View a markdown version of this page

Backend - AWS 上的分布式负载测试

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

Backend

后端由容器镜像管道和负载测试引擎组成,您可以使用该引擎生成测试负载。你通过前端与后端进行交互。此外,针对每项测试启动的 Amazon ECS on AWS Fargate 任务都标有唯一的测试标识符 (ID)。这些测试 ID 标签可用于帮助您监控此解决方案的成本。有关更多信息,请参阅 AWS 账单和成本管理用户指南中的成本分配标签。 User-Defined

容器镜像管道

该解决方案使用使用亚马逊 Linux 2023 构建的容器镜像作为基础镜像。AWS 将这些图像托管在亚马逊弹性容器注册表 (Amazon ECR) 公共存储库中。该解决方案使用它们在 AWS Fargate 集群上的 Amazon ECS 中运行任务。

任务使用哪种图像取决于测试的交通形态模式。有关这些模式的更多信息,请参阅交通形态模式。

  • 标准模式使用安装了 Taurus 负载测试框架的单个镜像。Taurus 是一个开源测试自动化框架,支持 JMeter、k6、Locust 和其他测试工具。它将您在控制台中设置的负载参数应用于测试使用的任何框架。

  • 原生模式为每个测试框架(JMeter、k6 或 Locust)使用专用镜像,不使用 Taurus。每个图像都直接针对您的脚本运行其框架。

有关更多信息,请参阅本指南的容器镜像自定义部分。

测试框架配置

在解决方案生命周期的不同阶段配置了三种支持的测试框架,以平衡映像大小和版本灵活性:

  • Apache JMeter — 在堆栈部署期间暂存于您账户的 S3 存储桶中,并在 JMeter 或简单 HTTP 端点测试运行时在测试运行时提取。

  • Grafana k6 — 直接从框架提供商下载并在测试运行时提取,仅在 k6 测试运行时提取。

  • Locust — 在构建时安装到容器镜像中,在 Locust 测试运行之前一直处于空闲状态。

在两种流量形态模式下,配置的工作方式相同。原生模式映像在生命周期的同一时刻获得每个框架,与标准模式映像相同。因此,以下网络和部署要求适用于两者。

注意

k6 需要在测试运行时出站网络访问 Grafana k6 版本。受限的出口将导致 k6 测试在下载步骤失败。

测试基础架构

除了主 CloudFormation 模板外,该解决方案还提供了一个区域模板,用于启动在多个区域运行测试所需的资源。该解决方案将此模板存储在 Amazon S3 中,并在 Web 控制台中提供指向该模板的链接。每个区域堆栈都包括一个 VPC、一个 AWS Fargate 集群和一个用于处理实时数据的 Lambda 函数。

有关如何在其他区域部署测试基础设施的更多信息,请参阅本指南的Multi-Region 部署部分。

负载测试引擎

分布式负载测试解决方案使用亚马逊弹性容器服务 (Amazon ECS) 和 AWS Fargate 来模拟多个区域的数千名并行用户,以持续的速度生成 HTTP 请求。

您可以使用随附的 Web 控制台定义测试参数。该解决方案使用这些参数生成 JSON 测试场景并将其存储在 Amazon S3 中。有关测试脚本和测试参数的更多信息,请参阅本节中的测试类型。

AWS Step Functions 状态机在 AWS Fargate 集群中运行和监控 Amazon ECS 任务。AWS Step Functions 状态机包括 ecr 检查器 AWS Lambda 函数、任务状态检查器 AWS Lambda 函数、任务运行器 AWS Lambda 函数、任务取消器 AWS Lambda 函数和结果解析器 AWS Lambda 函数。有关工作流程的更多信息,请参阅本指南的测试执行工作流程部分。有关测试结果的更多信息,请参阅本指南的浏览测试结果部分。有关取消考试工作流程的更多信息,请参阅本指南的 “取消考试” 部分。

如果您选择实时数据,该解决方案将通过与该区域中 Fargate 任务对应的 CloudWatch 日志在每个区域启动实时数据发布器 Lambda 函数。然后,该解决方案处理数据并将其发布到您启动主堆栈的区域内的 AWS IoT Core 中的一个主题。有关更多信息,请参阅本指南的使用实时数据监控部分。