模拟访问公共 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 存储桶的公共访问权限
授予对 s3 存储桶的公共访问权限,而不是为 aws 无服务器应用程序提供静态网站
如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?