单元测试AWS:步骤功能

Vic*_*mar 7 unit-testing amazon-web-services aws-step-functions

我是AWS的初学者,我已经创建了我的第一个AWS步骤函数,现在下一步是单元测试这个步骤函数.我独立单元测试了我的lambda函数,现在我卡住了,不知道,我怎样才能进行步进功能的单元测试.

我在脑海里也有一个问题是值得对步进功能进行单元测试,有时候感觉可以做到或不做,因为它只是一个json.

我试图搜索,但我没有任何关于互联网或AWS文档的任何线索任何帮助将不胜感激任何关于此或任何样本用例的博客谢谢

{
"Comment": "An example of the Amazon States Language using a choice state.",
"StartAt": "LoginState",
States": {
"LoginState": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:us-east-1:170344690019:function:myfirstLogin",
  "Next": "ChoiceState"
},
"ChoiceState": {
  "Type" : "Choice",
  "Choices": [
    {
      "Variable": "$.success",
      "BooleanEquals": true,
      "Next": "logoutState"
    },
    {
      "Variable": "$.success",
      "BooleanEquals": false,
      "Next": "DefaultState"
    }
  ],
  "Default": "DefaultState"
},

"logoutState": {
  "Type" : "Task",
  "Resource": "arn:aws:lambda:us-east-1:170344690019:function:myFirstLogout",
  "End": true
},


"DefaultState": {
  "Type": "Fail",
  "Error": "DefaultStateError",
  "Cause": "No Matches!"
}

}
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ace 12

这有点挑剔,但它会告知以下解释.在测试状态机时,您正在扩展单元测试范围之外的集成测试.

为什么挑剔呢?由于您正在进行集成测试,因此您需要能够运行状态机,以便为输入提供输入并验证输出.以下是两种可以自动测试状态机的方法......

  1. 将您的状态机部署到AWS账户的测试环境中,并使用AWS提供的任何工具直接调用它(cli,boto3等).这更接近自动化测试,因为它在真实环境中测试状态机.如果将其设置为CI管道的一部分,则需要为构建服务器配置安装所需的访问权限并在AWS账户中执行状态机.

  2. 尝试使用stepfunctions-local之类的东西来模拟本地系统或测试环境中的运行状态机.如果您的CI管道设置已在运行现有的单元测试,则此选项可能很有用.这需要花费一些精力才能将工具正确安装到CI环境中,但这可能是值得的.

  3. 我个人最喜欢的......使用localstack.这些人在模拟可以在Docker容器中启动和运行的多个AWS服务方面做得非常出色.如果lambda使用其他AWS服务,这将特别有用.我喜欢在我的CI环境中运行它以进行集成测试.

  4. 使用AWS SAM CLI.我自己没有用过这么多.它要求您使用无服务器应用程序模型.他们的文档得到了很大的改进,因为它得到了更多的官方支持,因此通过遵循他们的指南和众多示例应该非常容易使用.在CI环境中运行此操作将要求您在测试环境中安装该工具.

我希望这有帮助.我不认为在这个答案中分享任何代码会有所帮助,因为你要做的事情并不简单,可以通过多种方式实现.例如,像CircleCI这样的CI服务利用Docker容器,您可以选择生成自己的Docker容器来运行stepfunctions-localstack或localstack.


niq*_*qui 5

AWS 最近发布了Step Functions的可下载版本