如何在 AWS Step Function 上执行集成测试

How to perform integration testing on AWS Step Function

我在 API 网关中有一个带有 lambda 代理集成的 REST API。 Lambda 将异步调用 Step Function 工作流,并将 return 负载中的 ID。这些 AWS 资源由 AWS CDK 部署和管理。

我的问题是,有没有正确的方法来执行集成测试?我想到了两种方法:

  1. 调用 REST API 端点,并对副作用进行断言。但由于工作流是异步执行的,因此测试需要不断轮询,直到副作用变得可见。
  2. 根据这篇博客 https://www.10printiamcool.com/step-function-integration-testing-with-cdk,我们似乎可以使用 CDK 来部署测试堆栈,并模拟相关资源(例如 Lambda)。但这听起来更像是单元测试。

我不确定是否有更好的选择。有什么想法吗?

我了解到您希望在无服务器 CDK 应用程序的上下文中对您的 Step Function 进行集成测试。 除了 200 API 响应之外,您对 Step Function 的通过标准还包括某些异步后端副作用。

鉴于这种情况,以下是关于两个相关主题的一些想法:

如何设计 Step Function 测试

如何测试您的 Step Function 与另一个 Step Function 的集成? A TestSfn 会映射通过 测试用例,依次在一个任务中使用各种输入调用 API 并在另一个任务中检查预期的副作用。 毕竟,Step Functions 非常擅长并行编排逐步的异步工作流,这正是您的用例所需要的。如果 TestSfn 成功,则测试通过。执行历史控制台和日志为诊断测试失败提供了很好的可见性。

测试环境

无服务器 + CDK 设置使得采用 best practice multi-account strategy 以及启动和停止完整的非生产部署来测试整个应用程序变得简单、快速和便宜。

您可以在日常 dev 环境中执行临时测试,并在一天结束时 cdk destroy 执行临时测试。 And/or 构建 CDK CI/CD pipeline 如果测试通过,则在推送到主环境时部署到您的 prod 环境:[pull from github] -> [deploy stacks to TEST account] -> [seed test data] -> [run tests] -> [destroy TEST stacks] -> [deploy stacks to PROD acccount].