0

我们有一个 Step Function 状态机,它具有以 json 格式编写的状态语言规范,它在工作流执行期间根据输入和条件调用多个 Lambda 函数。

有没有办法通过模拟 Lambda 依赖项来单元/集成测试这个 json 代码(工作流程)?例如。测试特定 Lambda 的输出何时为 XXX,然后 YYY 步骤被步骤函数工作流调用。

我检查了“本地开发和测试 AWS Step Functions 工作流程”文档,但它似乎提供了一种在本地测试 Lambda 的步骤函数的方法。我想要的是模拟 Lambda 并测试 json(工作流/状态语言)。

4

1 回答 1

1

我们有一个开发人员想在本地运行 lambda 函数并在这个庄园中进行测试。老实说,我认为这非常无用并且没有增加任何价值,原因是除了您自己对状态语言规范的理解之外,您没有测试任何东西。

假设您为某个抛出异常的工作编写测试:

    "Try": {
      "Next": "Job Succeeded",
      "Type": "Parallel",
      "Branches": [{
        "StartAt": "TODO",
        "States": {
        "TODO": {
          "Comment": "This throws an exception.",
          "Type": "Task",
          Resource": "arn:aws:states:::states:startExecution.waitForTaskToken",
          "Parameters": {
            "Input": {
              "something.$": "$$.Execution.Input.something"
            }
          },
          "End": true
        }
        }
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "Next": "Job Failed"
      }]
    }

并测试TODO失败时进入,Job Failed成功时进入Job Succeeded. 好吧,这肯定会发生,没有必要对此进行测试,除非您自己为 AWS 工作。

唯一值得做的真正测试是集成测试和性能测试。您可以模拟服务关闭、数据库关闭等启动步进功能,并获得结果。即使那样,如果您知道您的任务将返回到功能集成测试中,也不会给您太多。

我的建议是将您的测试工作重点放在对步进函数的性能测试上,这将显示您的系统是否开始出现问题,步进函数是否开始超时等。但是对步进函数进行单元测试不会告诉您任何事情还不知道。这就是阶梯函数的重点。

于 2020-04-21T13:48:08.500 回答