我正在为一个快速类编写测试用例,以使用boto 3从s3中查找/获取密钥。我过去曾使用moto测试boto(而不是3)代码,但我试图在这个项目中移动到boto 3,并遇到一个问题:
class TestS3Actor(unittest.TestCase):
@mock_s3
def setUp(self):
self.bucket_name = 'test_bucket_01'
self.key_name = 'stats_com/fake_fake/test.json'
self.key_contents = 'This is test data.'
s3 = boto3.session.Session().resource('s3')
s3.create_bucket(Bucket=self.bucket_name)
s3.Object(self.bucket_name, self.key_name).put(Body=self.key_contents)
错误:
...
File "/Library/Python/2.7/site-packages/botocore/vendored/requests/packages/urllib3/connectionpool.py", line 344, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
File "/Library/Python/2.7/site-packages/botocore/vendored/requests/packages/urllib3/connectionpool.py", line 314, in _raise_timeout
if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6
TypeError: __str__ returned non-string (type WantWriteError)
botocore.hooks: DEBUG: Event needs-retry.s3.CreateBucket: calling handler <botocore.retryhandler.RetryHandler object at 0x10ce75310>
看起来moto没有正确地模拟boto 3调用-我该如何使其工作?
2条答案
按热度按时间twh00eeo1#
对我有用的是在运行我的模拟测试之前用
boto3
设置环境。下面是一个工作片段:
当运行
py.test test.py
时,您会得到以下输出:e5nszbig2#
根据this的信息,似乎还不支持使用Boto3 S3 Put流式上传到s3。
在我的例子中,我使用以下方法成功地将对象上传到bucket:
其中file_to_upload是您要上传到s3 bucket的本地文件。对于您的测试用例,您可以创建一个临时文件来检查此功能: