栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

模拟boto3 S3客户端方法Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

模拟boto3 S3客户端方法Python

一旦我在这里发布,我就设法提出了一个解决方案。希望对您有帮助:)

import botocorefrom botocore.exceptions import ClientErrorfrom mock import patchimport boto3orig = botocore.client.baseClient._make_api_calldef mock_make_api_call(self, operation_name, kwarg):    if operation_name == 'UploadPartCopy':        parsed_response = {'Error': {'Code': '500', 'Message': 'Error Uploading'}}        raise ClientError(parsed_response, operation_name)    return orig(self, operation_name, kwarg)with patch('botocore.client.baseClient._make_api_call', new=mock_make_api_call):    client = boto3.client('s3')    # Should return actual result    o = client.get_object(Bucket='my-bucket', Key='my-key')    # Should return mocked exception    e = client.upload_part_copy()

JordanPhilips还使用botocore.stub.Stubber类发布了一个不错的解决方案]。虽然使用更干净的解决方案,但我无法模拟特定的操作。

Botocore有一个客户存根,您可以将其用于此目的:docs。

这是在其中放置错误的示例:

import boto3from botocore.stub import Stubberclient = boto3.client('s3')stubber = Stubber(client)stubber.add_client_error('upload_part_copy')stubber.activate()# Will raise a ClientErrorclient.upload_part_copy()

这是放置正常响应的示例。此外,现在可以在上下文中使用该Stubber。重要的是要注意,存根将在可能的范围内验证您提供的响应与服务将实际返回的内容匹配。这不是完美的方法,但是它将保护您避免插入总的废话响应。

import boto3from botocore.stub import Stubberclient = boto3.client('s3')stubber = Stubber(client)list_buckets_response = {    "Owner": {        "DisplayName": "name",        "ID": "EXAMPLE123"    },    "Buckets": [{        "CreationDate": "2016-05-25T16:55:48.000Z",        "Name": "foo"    }]}expected_params = {}stubber.add_response('list_buckets', list_buckets_response, expected_params)with stubber:    response = client.list_buckets()assert response == list_buckets_response


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号