【问题标题】:Mocha tests in serverless AWS Lambda Express App无服务器 AWS Lambda Express 应用程序中的 Mocha 测试
【发布时间】:2017-02-17 14:59:52
【问题描述】:

我有一个基于expressjsnodejs 应用程序,我正在使用gruntjs 作为任务运行器和mochajs 作为测试框架进行测试。因此,我编写了组件、集成和单元测试,这些测试通过 grunt test 或直接通过 mocha test/component/v1/apiX 在本地执行,当我在部署期间作为 CI 流程的一部分在测试 VM 上进行开发时。

现在,当考虑将此应用程序移至 AWS Lambda 又名 going serverless 时,我想到了以下关于我的测试和 CI 流程的问题(请注意,我将使用 aws-serverless-express,因此不必编写 lambda 函数明确):

1) 如何实现通过 HTTP api 请求完成的组件/e2e 测试?

2) 如何实现只加载和测试应用程序一部分的集成和单元测试?

3) 如果任何测试失败,如何将两者与拒绝部署的新 CI 流集成?

我认为问题 1) 已基本解决:有很多方法可以从外部测试 AWS Lambda。您可以直接从 test-lambda 调用您的 lambda-to-test 进行 lambda-to-lambda 测试,也可以使用来自 test-lambda 的 HTTP 通过 AWS API Gateway 调用 lambda-to-test,如 here 所述。您还可以使用 serverless-mocha-plugin 进行本地 lambda 测试(如果使用 serverless)。

这是 2) 有趣的地方:一旦你的 lambda 被部署,它就是一个黑盒子。您不能执行任何未明确声明为 lambda 接口的内容。如何保存或重新实现我现有的 mocha 单元和集成测试?

3) 相同:如何让 CI 运行所有部署测试并在失败时拒绝部署?

这是我自己的方法:只有在 TEST 环境中,我才会让我的节点应用程序无服务器。简单地让它作为经典节点 HTTP 服务工作,方法是根据环境使所有无服务器更改有条件。由于几乎不需要更改,因此这应该是可能的且可维护的。现在我可以像往常一样在本地运行测试,也可以使用 grunt 和 mocha 进行部署。然后,如果我想确保无服务器版本也能正常工作,我仍然可以进行最终的 lambda 到 lambda 测试。

【问题讨论】:

  • 我以前用过lambCI 来处理这类事情。我认为阅读那篇文章可以帮助你理解作者的所有想法(非常接近你的)以及他发现的限制——即 lambda 300 秒生命周期、不支持 docker 等等......
  • 谢谢我去看看!

标签: node.js amazon-web-services mocha.js aws-lambda serverless-framework


【解决方案1】:

你的方法听起来不错。至于 3,你可以让你的 CI 运行本地测试,部署到“开发”或“测试”环境并运行 lambdaTests

grunt # run grunt commands including local mocha tests
serverless deploy --stage test # deploy to test environment (serverless#1.0 syntax)
grunt lambdaTest

您需要确保lambdaTest 命令在 lambda 请求失败或返回意外值时处理失败和抛出错误。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2022-09-29
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多