【发布时间】:2020-11-03 02:38:19
【问题描述】:
我是使用 Amazon AWS 的无服务器世界的新手,我尝试了解编写集成测试的经验法则。
让我们给出以下我们要测试的简单系统:
我们有一家超市,我们想为它保存所有收据。系统包含一个带有单个数据表的数据库。一个作业队列,其中包含所有需要处理的事务和几个工人,它们对队列中的每个作业进行一些预处理,然后将结果提交到数据库。
我们要测试下一个场景:
- 初始化新数据库和队列
- 初始化几个工人
- 将作业插入队列
- 等等
- 验证结果
- 清洁环境
通过清理环境,我们下次运行测试时会得到相同的结果。如果我们不做,比如数据会留在数据库中,就会影响我们下次运行测试时的验证。
我的经验是与码头工人合作。有了它们,我可以docker-compose up 一个新的数据库并在设置时排队,docker-compose down 所有容器在拆卸时。这是一个简单的解决方案。
现在,问题是为我的无服务器 AWS 应用程序进行此类测试的好方法是什么?
数据库是dynamo db。队列是sqs,“工人”是lambdas,它们在sqs 插入时触发。当然,这是一个“简单”的例子,它已经过时了,但问题比具体情况要大。
目前我找到的解决方案:
- 使用本地服务,例如亚马逊官方提供的本地发电机数据库。但也不是官方的,也不是他们支持的本地 SQS。缺点:部署时亚马逊服务的结果可能会有所不同。
- 每次使用
sam deploy在亚马逊上运行测试。我可以创建一个新堆栈,但资源会永远留在 Amazon 的服务器中(例如 s3 存储桶和队列)。缺点:代码不是本地的,难以调试 + 需要时间部署。 - 对所有测试使用相同的资源并在开始时清理它们。缺点:丑陋的代码和项目之间大量代码重复的选项。
根据我的搜索,没有常见的“如何编写测试教程”,我想听听您的经验。
【问题讨论】:
标签: aws-lambda automated-tests integration-testing serverless-framework aws-serverless