AWS 上的分布式负载测试的工作原理 - AWS 上的分布式负载测试

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 上的分布式负载测试的工作原理

以下详细分解显示了运行测试场景所涉及的步骤。

测试工作流

image3

  1. 您可以使用 Web 控制台向解决方案的 API 提交包含配置详细信息的测试场景。

  2. 测试场景配置以 JSON 文件 s3://<bucket-name>/test-scenarios/<$TEST_ID>/<$TEST_ID>.json () 的形式上传到亚马逊简单存储服务 (Amazon S3)。

  3. AWS Step Functions 状态机使用测试 ID、任务计数、测试类型和文件类型作为 AWS Step Functions 状态机输入来运行。如果已安排测试,它将首先创建一个 CloudWatch 事件规则,该规则将在指定日期触发 AWS Step Functions。有关计划工作流程的更多详细信息,请参阅本指南的测试计划工作流程部分。

  4. 配置详细信息存储在场景 Amazon DynamoDB 表中。

  5. 在 AWS Step Functions 任务运行器工作流程中, task-status-checkerAWS Lambda 函数检查亚马逊弹性容器服务 (Amazon ECS) 任务是否已经在使用相同的测试 ID 运行。如果发现具有相同测试 ID 的任务正在运行,则会导致错误。如果 AWS Fargate 集群中没有运行 Amazon ECS 任务,则该函数将返回测试 ID、任务计数和测试类型。

  6. 任务运行器 AWS Lambda 函数获取上一步中的任务详细信息,并在 AWS Fargate 集群中运行 Amazon ECS 工作线程任务。Amazon ECS API 使用该 RunTask 操作来运行工作线程任务。启动这些工作线程任务,然后等待领导者任务的启动消息以开始测试。每个定义的 RunTask 操作限制为 10 个任务。如果您的任务数超过 10,则任务定义将多次运行,直到所有工作人员任务都已启动。该函数还会生成一个前缀来区分结果解析 AWS Lambda 函数中的当前测试。

  7. task-status-checkerAWS Lambda 函数检查所有的 Amazon ECS 工作线程任务是否都使用相同的测试 ID 运行。如果任务仍在置备,则它会等待一分钟,然后再次检查。所有 Amazon ECS 任务运行后,它会返回测试 ID、任务计数、测试类型、所有任务 IDs 和前缀,并将其传递给任务运行器函数。

  8. 任务运行器 AWS Lambda 函数再次运行,这次是启动单个 Amazon ECS 任务来充当领导节点。此 ECS 任务向每个工作任务发送启动测试消息,以便同时启动测试。

  9. task-status-checkerAWS Lambda 函数再次检查 Amazon ECS 任务是否使用相同的测试 ID 运行。如果任务仍在运行,它会等待一分钟,然后再次检查。一旦没有正在运行的 Amazon ECS 任务,它就会返回测试 ID、任务计数、测试类型和前缀。

  10. 当任务运行器 AWS Lambda 函数在 AWS Fargate 集群中运行 Amazon ECS 任务时,每个任务都会从 Amazon S3 下载测试配置并开始测试。

  11. 测试运行后,每个任务的平均响应时间、并发用户数、成功请求数和失败请求数将记录在 Amazon 中, CloudWatch 并可在 CloudWatch 控制面板中查看。

  12. 如果您在测试中包含实时数据,则解决方案会 CloudWatch 使用订阅筛选器筛选实时测试结果。然后,该解决方案将数据传递给 Lambda 函数。

  13. 然后,Lambda 函数对收到的数据进行结构化并将其发布到 AWS IoT Core 主题中。

  14. Web 控制台订阅测试的 AWS IoT Core 主题,并接收发布到该主题的数据,以便在测试运行时绘制实时数据。

  15. 测试完成后,容器镜像会将一份详细报告作为 XML 文件导出到 Amazon S3。每个文件都有一个 UUID 作为文件名。例如,s3://dlte-bucket/test-scenarios/ <$TEST_ID> /results/ <$UUID > .json。

  16. 当 XML 文件上传到 Amazon S3 时,结果解析器 AWS Lambda 函数读取以前缀开头的 XML 文件中的结果,然后解析所有结果并将其汇总为一个汇总结果。

  17. 结果解析器 AWS Lambda 函数将汇总结果写入亚马逊 DynamoDB 表。