[英]How to unit test a boto3 lambda client invoke function
完全不确定并且找不到关于如何对来自 boto 3 lambda 客户端的响应进行单元测试的很多信息,尤其是当我需要解码存储在对象中的响应时。 这是一个类似我想要单元测试的函数的例子
def get_attachment(my_id):
payload = {"myId": my_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]
有各种 boto3 模拟工作:
响应负载被编码在一个对象中。 具体来说,它是一个StreamingBody
对象。 您的模拟响应还必须返回一个StreamingBody
对象,以便它可以调用.read()
并对其进行解码。
import io
import json
import os
import mock
from botocore.response import StreamingBody
@mock.patch.dict(os.environ, {"MY_LAMBDA": "some_lambda"})
@mock.patch("path.to.get_attachment.lambda_client")
def test_get_attachment(mock_lambda_client):
mocked_response_payload = json.dumps({'claim': ['foobar']}).encode("utf-8")
mock_lambda_client.invoke.return_value = {'Payload': StreamingBody(io.BytesIO(mocked_response_payload), len(mocked_response_payload))}
response = get_attachment('some_id')
assert response == 'foobar'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.