您好,我有 AWS Lambda,我想为其添加一个层。我希望能够只测试 lambda 的单个方法。然而,其中许多都使用层逻辑,因此在我看来这并不容易。做到这一点的最佳方法是什么?
一种方法是封装层,主机位于某处并将其用作依赖项。既然如此,为什么还要费心使用图层呢?
我的另一个想法是使用 sam-cli 在本地部署 lambda。我知道如何使用它来测试整个 lambda 逻辑,但我不知道如何单独对方法进行单元测试;/
你有什么经历?
韩国
编辑。我的解决方案
添加pytest
将所有测试放入test
目录
添加测试 lambda
调用测试的处理程序
import pytest
def lambda_handler(event, _):
res = pytest.main(['-x', './tests'])
return res
- 添加指向先前创建的 lambda 处理程序的 template.yml
Resources:
MyFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: src/
Handler: test.lambda_handler
Runtime: python3.6
Events:
MyInfo:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /my-service/test
Method: get
Environment:
Variables:
ELASTICSEARCH_DOC_TYPE: "article"
ELASTICSEARCH_INDEX: "artilces"
ELASTICSEARCH_HOST: "elastic"
ELASTICSEARCH_PORT: "9200"
ELASTICSEARCH_URL: "http://my_elastic.com:9200"
Layers:
- arn:aws:lambda:eu-west-1:XXXXXXXXXXXXX:layer:lambda_layer:37
- Run
sam local invoke --no-event
就我而言,我使用 moto 库来模拟 AWS 服务,因此使用 sam local 不是一个选择。我刚刚将 lambda 层的路径添加到测试文件中的 sys 路径中,它对我起到了作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)