Mocking boto3 S3 client method Python 模拟boto3 S3客户端方法Python

4 浏览
0 Comments

Mocking boto3 S3 client method Python 模拟boto3 S3客户端方法Python

我试图模拟boto3 s3客户端对象的一个单一方法,以抛出一个异常。但是我需要这个类的所有其他方法都正常工作。

这样我就可以在执行upload_part_copy时测试一个单独的异常测试。

第一次尝试

import boto3
from mock import patch
with patch('botocore.client.S3.upload_part_copy', side_effect=Exception('上传错误')) as mock:
    client = boto3.client('s3')
    # 应返回实际结果
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # 应返回模拟的异常
    e = client.upload_part_copy()

然而,这会出现以下错误:

ImportError: No module named S3

第二次尝试

在查看botocore.client.py源代码后,我发现它做了一些巧妙的事情,方法upload_part_copy并不存在。我发现它似乎调用的是BaseClient._make_api_call,所以我尝试模拟这个方法

import boto3
from mock import patch
with patch('botocore.client.BaseClient._make_api_call', side_effect=Exception('上传错误')) as mock:
    client = boto3.client('s3')
    # 应返回实际结果
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # 应返回模拟的异常
    e = client.upload_part_copy()

这会抛出一个异常... 但是在我想避免的get_object方法上。

有没有关于如何只在upload_part_copy方法上抛出异常的想法?

0