模拟访问公共 GCS 存储桶的结果

Posted

技术标签:

【中文标题】模拟访问公共 GCS 存储桶的结果【英文标题】:Mock the result of accessing public GCS bucket 【发布时间】:2018-08-17 16:31:14 【问题描述】:

我有以下代码:

bucket = get_bucket('bucket-name')
blob = bucket.blob(os.path.join(*pieces))
blob.upload_from_string('test')
blob.make_public()
result = blob.public_url
# result is `<Mock name='mock().get_bucket().blob().public_url`

我想模拟 public_url 的结果,我的单元测试代码是这样的

with ExitStack() as st:
    from google.cloud import storage
    blob_mock = mock.Mock(spec=storage.Blob)
    blob_mock.public_url.return_value = 'http://'

    bucket_mock = mock.Mock(spec=storage.Bucket)
    bucket_mock.blob.return_value = blob_mock

    storage_client_mock = mock.Mock(spec=storage.Client)
    storage_client_mock.get_bucket.return_value = bucket_mock

    st.enter_context(
        mock.patch('google.cloud.storage.Client', storage_client_mock))
    my_function()

是否有类似 FakeRedis 或 moto 用于 Google 存储,所以我可以模拟 google.cloud.storage.Blob.public_url

【问题讨论】:

【参考方案1】:

我发现这个fake gcs server 是用 Go 编写的,它可以在 Docker 容器中运行并由 Python 库使用。见Python examples。

【讨论】:

以上是关于模拟访问公共 GCS 存储桶的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何允许 cognito 身份验证的用户获得对 s3 存储桶的公共访问权限

使用 Cloudfront 限制对 S3 存储桶的访问

授予对 s3 存储桶的公共访问权限,而不是为 aws 无服务器应用程序提供静态网站

如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?

无需凭据即可从特定 IP 授予对 AWS S3 存储桶的访问权限

apache-beam 从 GCS 存储桶的多个文件夹中读取多个文件并加载它 bigquery python