amazon-web-services - 如何对使用层方法的 lambda 逻辑进行单元测试?

标签 amazon-web-services aws-lambda aws-sam aws-sam-cli

嗨,我有我的 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
  • 运行 sam local invoke --no-event
  • 最佳答案

    就我而言,我使用 moto 库来模拟 AWS 服务,因此不能选择使用 sam local。我只是在我的测试文件中将我的 lambda 层的路径添加到我的 sys 路径中,它对我有用。

    关于amazon-web-services - 如何对使用层方法的 lambda 逻辑进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705464/

    相关文章:

    amazon-web-services - 属性值与 Number YML 类型不匹配

    amazon-web-services - 适用于多环境的 AWS SAM/Cloudformation - 将逗号分隔列表转换为 ARN

    amazon-web-services - 减少无服务器部署包的大小

    amazon-web-services - 如何使用已经运行的eb env配置eb cli

    amazon-web-services - AWS Step Function 可以描述这种数据流吗?

    scala - 使用 scala 时的 lambda 的 AWS 凭证不起作用

    python-3.x - Python导入语句。模块未找到错误: when running tests and referencing a module in a parent folder

    amazon-ec2 - 来自不同 EC2 区域的速度

    amazon-web-services - 从 Swagger 错误导入 Amazon API Gateway - 不采用泛型

    amazon-web-services - lambda 层是否包含 aws-sdk