本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS 上的分布式负载测试的工作原理
以下详细分解显示了运行测试场景所涉及的步骤。
测试工作流
-
您可以使用 Web 控制台向解决方案的 API 提交包含配置详细信息的测试场景。
-
测试场景配置以 JSON 文件
s3://<bucket-name>/test-scenarios/<$TEST_ID>/<$TEST_ID>.json
() 的形式上传到亚马逊简单存储服务 (Amazon S3)。 -
AWS Step Functions 状态机使用测试 ID、任务计数、测试类型和文件类型作为 AWS Step Functions 状态机输入来运行。如果已安排测试,它将首先创建一个 CloudWatch 事件规则,该规则将在指定日期触发 AWS Step Functions。有关计划工作流程的更多详细信息,请参阅本指南的测试计划工作流程部分。
-
配置详细信息存储在场景 Amazon DynamoDB 表中。
-
在 AWS Step Functions 任务运行器工作流程中, task-status-checkerAWS Lambda 函数检查亚马逊弹性容器服务 (Amazon ECS) 任务是否已经在使用相同的测试 ID 运行。如果发现具有相同测试 ID 的任务正在运行,则会导致错误。如果 AWS Fargate 集群中没有运行 Amazon ECS 任务,则该函数将返回测试 ID、任务计数和测试类型。
-
任务运行器 AWS Lambda 函数获取上一步中的任务详细信息,并在 AWS Fargate 集群中运行 Amazon ECS 工作线程任务。Amazon ECS API 使用该 RunTask 操作来运行工作线程任务。启动这些工作线程任务,然后等待领导者任务的启动消息以开始测试。每个定义的 RunTask 操作限制为 10 个任务。如果您的任务数超过 10,则任务定义将多次运行,直到所有工作人员任务都已启动。该函数还会生成一个前缀来区分结果解析 AWS Lambda 函数中的当前测试。
-
task-status-checkerAWS Lambda 函数检查所有的 Amazon ECS 工作线程任务是否都使用相同的测试 ID 运行。如果任务仍在置备,则它会等待一分钟,然后再次检查。所有 Amazon ECS 任务运行后,它会返回测试 ID、任务计数、测试类型、所有任务 IDs 和前缀,并将其传递给任务运行器函数。
-
任务运行器 AWS Lambda 函数再次运行,这次是启动单个 Amazon ECS 任务来充当领导节点。此 ECS 任务向每个工作任务发送启动测试消息,以便同时启动测试。
-
task-status-checkerAWS Lambda 函数再次检查 Amazon ECS 任务是否使用相同的测试 ID 运行。如果任务仍在运行,它会等待一分钟,然后再次检查。一旦没有正在运行的 Amazon ECS 任务,它就会返回测试 ID、任务计数、测试类型和前缀。
-
当任务运行器 AWS Lambda 函数在 AWS Fargate 集群中运行 Amazon ECS 任务时,每个任务都会从 Amazon S3 下载测试配置并开始测试。
-
测试运行后,每个任务的平均响应时间、并发用户数、成功请求数和失败请求数将记录在 Amazon 中, CloudWatch 并可在 CloudWatch 控制面板中查看。
-
如果您在测试中包含实时数据,则解决方案会 CloudWatch 使用订阅筛选器筛选实时测试结果。然后,该解决方案将数据传递给 Lambda 函数。
-
然后,Lambda 函数对收到的数据进行结构化并将其发布到 AWS IoT Core 主题中。
-
Web 控制台订阅测试的 AWS IoT Core 主题,并接收发布到该主题的数据,以便在测试运行时绘制实时数据。
-
测试完成后,容器镜像会将一份详细报告作为 XML 文件导出到 Amazon S3。每个文件都有一个 UUID 作为文件名。例如,s3://dlte-bucket/test-scenarios/ <$TEST_ID> /results/ <$UUID > .json。
-
当 XML 文件上传到 Amazon S3 时,结果解析器 AWS Lambda 函数读取以前缀开头的 XML 文件中的结果,然后解析所有结果并将其汇总为一个汇总结果。
-
结果解析器 AWS Lambda 函数将汇总结果写入亚马逊 DynamoDB 表。