当前正在编写测试并尝试利用botocore提供的Stubber
。
我正在尝试:
client = boto3.client("s3")
response = {'Body': 'content'}
expected_params = {'Bucket': 'a_bucket_name', 'Key': 'a_path', 'Filename': 'a_target'}
with Stubber(client) as stubber:
stubber.add_response('download_file', response, expected_params)
download_file(client, "a_bucket_name", "a_path", "a_target")
该下载文件是我自己的函数,仅包装客户机download_file调用。它在实践中起作用。
但是,由于发生“ OperationNotFound”错误,因此在stubber.add_response
上的测试失败。我逐步使用了调试器,问题出现在存根API中:
if not hasattr(self.client, method):
raise ValueError(
"Client %s does not have method: %s"
% (self.client.meta.service_model.service_name, method))
# Create a successful http response
http_response = AWSResponse(None, 200, {}, None)
operation_name = self.client.meta.method_to_api_mapping.get(method) <------- Error here
self._validate_response(operation_name, service_response)
字典中的两者之间似乎没有映射,这是存根API的失败还是我遗漏了什么?
答案 0 :(得分:1)
我刚刚发现了这个问题,所以看起来好像真的是图书馆而不是我:
https://github.com/boto/botocore/issues/974
这是因为download_file和upload_file是boto3中的自定义项。他们大声疾呼一个或多个请求。目前,除了记录自定义使用的基本命令并将其添加到存根之外,没有什么比支持自定义更好的了。尽管我们自己不支持它,但是有一个外部库可以为您处理。