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

Python 如何在单元测试中修补boto3 lambda调用,python,amazon-web-services,unit-testing,pytest,boto3,Python,Amazon Web Services,Unit Testing,Pytest,Boto3,我想向单元测试添加一个补丁注释,这样当我的boto3 lambda客户端尝试调用时,我们将得到一个模拟响应,但是当我尝试将补丁添加到单元测试时,它会得到以下错误 AttributeError:没有属性“invoke” 这是尝试的测试 @patch("functions.my_function.my_function.boto3.client.invoke") def test_duck_response_200(self, lambda_mock_respon

我想向单元测试添加一个补丁注释,这样当我的boto3 lambda客户端尝试调用时,我们将得到一个模拟响应,但是当我尝试将补丁添加到单元测试时,它会得到以下错误
AttributeError:没有属性“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_客户端,而不是响应。然后,您可以将
模拟的\u lambda\u客户端的
返回\u值设置为
模拟的\u响应

#my_lambda.py
def get_附件(我的_id):
有效负载={“myId”:my_id}
响应=lambda_client.invoke(
FunctionName=os.environ[“MY_LAMBDA”],
有效载荷=json.dumps(有效载荷),
)
返回response.status\u代码
#测试我的lambda.py
@mock.patch(“我的lambda.lambda\u客户机”)
def测试响应200(模拟lambda客户端):
mock_response=mock.mock()
模拟_响应。状态_代码=200
mock_lambda_client.invoke.return_value=mock_响应
响应=获取附件(“某些id”)
断言响应==200

假设您的
调用\u lambda
位于
my\u lambda.py
文件中。您希望使用补丁注释模拟lambda_客户端,而不是响应。然后,您可以将
模拟的\u lambda\u客户端的
返回\u值设置为
模拟的\u响应

#my_lambda.py
def get_附件(我的_id):
有效负载={“myId”:my_id}
响应=lambda_client.invoke(
FunctionName=os.environ[“MY_LAMBDA”],
有效载荷=json.dumps(有效载荷),
)
返回response.status\u代码
#测试我的lambda.py
@mock.patch(“我的lambda.lambda\u客户机”)
def测试响应200(模拟lambda客户端):
mock_response=mock.mock()
模拟_响应。状态_代码=200
mock_lambda_client.invoke.return_value=mock_响应
响应=获取附件(“某些id”)
断言响应==200

lambda_客户机来自哪里?请包含代码。它只是代码中的一个全局变量,现在已添加到
boto3中。client
是一个函数,用于返回要修补其方法的客户端对象;这应该是
@patch(“functions.my\u function.my\u function.boto3.client”)
lambda\u mock\u response.return\u value.invoke.return\u value=mock\u response
。lambda\u client
来自哪里?请包含代码。它只是代码中的一个全局变量,现在已添加到
boto3中。client
是一个函数,用于返回要修补其方法的客户端对象;这应该是
@patch(“functions.my\u function.my\u function.boto3.client”)
lambda\u mock\u response.return\u value.invoke.return\u value=mock\u response