繁体   English   中英

如何在单元测试中修补 boto3 lambda 调用

[英]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_clientreturn_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM