[英]how to patch boto3 lambda invoke on unit test
我想向单元测试添加补丁注释,以便当我的 boto3 lambda 客户端尝试调用时,我们将获得模拟响应,但是当我尝试将补丁添加到我的单元测试时,它会收到以下错误AttributeError: <function client at 0x106a38b80> does not have the attribute 'invoke'
这是尝试的测试
@patch("functions.my_function.my_function.boto3.client.invoke")
def test_duck_response_200(self, lambda_mock_response):
mock_response = Mock()
mock_response.status_code = 200
mock_response.content = get_response()
lambda_mock_response.return_value = mock_response
id = "111111111"
response = invoke_lambda(id)
这是函数
lambda_client = boto3.client("lambda", region)
def invoke_lambda(id):
payload = {"id": id}
response = lambda_client.invoke(
FunctionName=os.environ["MY_LAMBDA"],
Payload=json.dumps(payload),
)
response_content = json.loads(response["Payload"].read().decode())
return response_content["claim"][0]
假设您的invoke_lambda
位于my_lambda.py
文件中。 您想使用补丁注释来模拟 lambda_client,而不是响应。 然后,您可以将mocked_lambda_client
的return_value
设置为mocked_response
。
# my_lambda.py
def get_attachment(my_id):
payload = {"myId": my_id}
response = lambda_client.invoke(
FunctionName=os.environ["MY_LAMBDA"],
Payload=json.dumps(payload),
)
return response.status_code
# test_my_lambda.py
@mock.patch("my_lambda.lambda_client")
def test_duck_response_200(mock_lambda_client):
mocked_response = mock.Mock()
mocked_response.status_code = 200
mock_lambda_client.invoke.return_value = mocked_response
response = get_attachment('some_id')
assert response == 200
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.