繁体   English   中英

如何对 boto3 lambda 客户端调用函数进行单元测试

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

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