python - 如何模拟对 secretsmanager 的 boto3 客户端会话请求以返回特定响应或引发异常
问题描述
给定如下代码:
def do_stuff():
session = boto3.session.Session()
client = session.client(service_name="secretsmanager", region_name=region_name)
client.get_secret_value(SecretId=sendgrid_api_key_arn)
我如何模拟
client.get_secret_value("some-value")
返回一些值
以及如何模拟它以引发异常
@patch("boto3.session")
def test_get_sendgrid_api_key_secret_when_client_error(mock_session):
session = mock_session.Session();
client = session.client()
client.get_secret_value().return_value =
{"SecretString": "my-secret"} <- this is wrapped in a MagicMock which is useless.
解决方案
您需要client.get_secret_value
通过添加一个装饰器来进行修补。完成此操作后,您可以将 return_value 设置为您需要的异常。
@patch("boto3.session")
@patch("boto3.session.Session.client.get_secret_value")
def test_get_sendgrid_api_key_secret_when_client_error(mock_session,second_fn):
with pytest.raises('CustomException')
session = mock_session.Session();
second_fn.return_value = lambda : Exception('CustomException')
client = session.client()
client.get_secret_value()
执行时client.get_secret_value()
,测试用例将通过以引发预期的异常。类似地,我们可以分配任何其他值来模拟函数的返回,而不是 lambda。
推荐阅读
- python - 反转彩色图片?
- android - 如何将资产中的数据库移动到应用程序数据库?
- reactjs - Chrome 不会在 React 应用中保存 Express cookie
- python - 代码未输入带有有效语句的 if 语句且未退出 while 循环
- python - 有没有办法在 python 中测试竞争条件?
- r - 获取下一个迭代值而不是当前的闪亮值
- python - 我正在尝试制作一个小年龄游戏,但它关闭了
- python - AWS Boto3 IoT - 如何获取事物证书的内容
- javascript - 如何将在线模块/库添加到我的 React 文件中?
- javascript - 将一个数组中的数字与另一个数组中的数字进行比较并返回结果