【问题标题】:BotoCore/Boto3 Stubber Operation Not Found for generate_presigned_post未找到用于 generate_presigned_post 的 BotoCore/Boto3 存根操作
【发布时间】:2021-08-07 02:12:36
【问题描述】:

我正在尝试使用botocore.stub.Stubber 来模拟我的boto3.client,并且在尝试添加模拟的generate_presigned_post 响应时得到botocore.model.OperationNotFoundError

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)

当我运行test_create_presigned_post 时,我在add_reponse 中得到OperationNotFoundError。有谁知道为什么会这样?

注意:S3File.create_presigned_post 直接取自 docs,唯一的变化是客户端被移动到一个函数中,以便可以模拟它(并添加一个区域参数)。

【问题讨论】:

  • 现在看到了,同样的命令 - 你解决了吗?
  • 恐怕不会,我们实际上已经放弃了这种方法,因为安全团队决定他们不想公开有关我们存储桶的任何信息。
  • 很高兴知道,谢谢!

标签: python django mocking boto3 botocore


【解决方案1】:

generate_presigned_post()generate_presigned_url() 不对 S3 进行 API 调用,因此不需要 Stubber。

https://github.com/boto/botocore/blob/b3b5559a641c1caecaec2739564f043b61947d51/botocore/signers.py#L607

例子:

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

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多