Dar*_*one 5 python django mocking botocore boto3
我正在尝试使用botocore.stub.Stubber
来模拟我的,并且在尝试添加模拟响应时boto3.client
收到:botocore.model.OperationNotFoundError
generate_presigned_post
class S3FileTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.s3 = botocore.session.get_session().create_client('s3')
cls.region_name = 'eu-west-2'
@staticmethod
def _mock__get_s3(region_name):
client = boto3.client('s3', config=boto3.session.Config(signature_version='s3v4'), region_name=region_name)
stubber = Stubber(client)
stubber.add_response('generate_presigned_post', {'test':1}, {'bucket_name': 'test_bucket', 'region_name': region_name, 'object_name': 'test.csv'})
return stubber
@patch('uploader.models.s3_file.S3File._get_s3', new=_mock__get_s3)
def test_create_presigned_post(self):
response = S3File.create_presigned_post('stuart-special-testing-bucket', self.region_name, 'test.csv')
print(response)
Run Code Online (Sandbox Code Playgroud)
当我跑步时,test_create_presigned_post
我得到OperationNotFoundError
了add_reponse
. 有谁知道为什么会这样?
注意:S3File.create_presigned_post
直接取自文档,唯一的变化是客户端被移动到一个函数中,以便可以模拟它(并添加一个区域参数)。
小智 3
generate_presigned_post()
并且generate_presigned_url()
不会对 S3 进行 API 调用,因此不需要 Stubber。
例子:
import boto3
s3 = boto3.client("s3")
def get_upload_url() -> dict:
return s3.generate_presigned_post(
Bucket="test-bucket",
Key="test-file.txt",
)
def test_get_upload_url():
response: dict = get_upload_url()
assert "url" in response
assert "fields" in response
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1393 次 |
最近记录: |