本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建测试场景
创建测试场景包括四个主要步骤:配置常规设置、定义场景、塑造流量模式和审查配置。
步骤 1:常规设置
为负载测试配置基本参数,包括测试名称、描述和常规配置选项。
测试识别
-
测试名称(必填)-测试场景的描述性名称
-
测试描述(必填)-有关测试目的和配置的其他详细信息
-
标签(可选)-添加最多 5 个标签来对测试场景进行分类和组织
日程安排选项
配置测试的运行时间:
-
立即运行 -创建后立即运行测试。
-
运行一次 -安排测试在特定的日期和时间运行。
-
按计划运行 -使用基于 cron 的计划定期自动运行测试。您可以从常用模式(每小时、每天、每周)中进行选择,也可以定义自定义 cron 表达式。有关可接受的 cron 格式、支持的模式和限制的详细信息,请参阅开发者指南中的 Cron 表达式参考。
计划工作流程
当您安排测试时,会出现以下工作流程:
-
计划参数通过亚马逊 API 网关发送到解决方案的 API。
-
API 将参数传递给 Lambda 函数,该函数创建配置为在指定日期运行的亚马逊 EventBridge 计划程序计划。
-
对于一次性测试(运行一次), EventBridge 调度器计划在指定的日期和时间调用
api-servicesLambda 函数,该函数执行测试。 -
对于定期测试(按计划运行), EventBridge 调度器计划立即按照 cron 或速率表达式定义的节奏调用
api-servicesLambda 函数,直到到期日为止。
实时数据
选中 “包括实时数据” 复选框以查看测试运行期间的实时指标。启用后,您可以监控:
-
平均响应时间。
-
虚拟用户数量。
-
成功的请求很重要。
-
失败的请求计数。
实时数据功能提供实时图表,每隔一秒汇总数据。有关更多信息,请参阅使用实时数据进行监控。
步骤 2:场景配置
定义特定的测试场景并选择您的首选测试框架。
测试类型选择
选择要执行的负载测试类型:
-
简单 HTTP 端点 -使用简单的配置测试单个 API 端点或网页。
-
JMeter -上传 JMeter 测试脚本(.jmx 文件或 .zip 档案)。
-
k6 -上传 k6 测试脚本(.js 文件或 .zip 档案)。
-
Locust -上传 Locust 测试脚本(.py 文件或 .zip 档案)。
注意
所有四种测试类型都依赖于第三方组件。该解决方案通过Taurus测试自动化框架运行测试,该框架根据测试类型执行JMeter、k6或Locust;简单的HTTP端点测试转换为JMeter测试计划,由捆绑的Apache JMeter运行。在创建测试之前,请查看Third-party 测试框架中的安全注意事项、许可证信息和补丁选项。
交通形状模式
选择哪一侧控制测试生成的负载。您选择的模式会更改控制台在步骤 3:流量形状中显示的字段。
-
标准 -解决方案控制负载。您可以设置虚拟用户、上线时间和保留时长。标准是默认模式,也是唯一支持简单 HTTP 端点测试的模式。
-
原生 -您的脚本控制负载。该解决方案在测试框架自己的命令行下运行您的脚本,并仅设置每个区域的任务数和安全持续时间。
原生需要上传脚本,因此在选择简单 HTTP 端点测试类型时无法选择该脚本。有关选择哪种模式的完整定义和指南,请参阅交通形态模式。
HTTP 端点配置
选择 “简单 HTTP 端点” 后,该解决方案将根据您的配置生成 JMeter 测试计划,并使用捆绑的 Apache JMeter 二进制文件执行该计划。配置以下设置:
- HTTP 端点(必填)
-
输入要测试的终端节点的完整 URL。例如
https://api.example.com/users。确保可从 AWS 基础设施访问终端节点。 - HTTP 方法(必需)
-
为您的请求选择 HTTP 方法。默认值为
GET。其他选项包括POSTPUT、DELETE、PATCH、HEAD、和OPTIONS。 - 请求标头(可选)
-
将自定义 HTTP 标头添加到您的请求中。常见示例包括:
-
Content-Type: application/json -
Authorization: Bearer <token> -
User-Agent: LoadTest/1.0选择 “添加标题” 以包含多个标题。
-
- 车身有效载荷(可选)
-
为 POST 或 PUT 请求添加请求正文内容。支持 JSON、XML 或纯文本格式。例如:
{"userId": 123, "action": "test"}。
测试框架脚本
使用 JMeter、k6 或 Locust 时,请上传您的测试脚本文件或包含测试脚本和支持文件的 .zip 存档。
对于 JMeter,您可以在 .zip 存档的/plugins文件夹中包含自定义插件。
对于 Locust,必须命名.zip 存档中的测试脚本。locustfile.py要在运行时将第三方 Python 包安装到容器中,请在存档中添加一个requirements.txt文件,并可以选择在没有互联网访问的情况下安装轮packages子文件的子目录。有关更多信息,请参阅蝗虫测试。
重要
在标准模式下,该解决方案控制负载并覆盖脚本声明的内容。您的测试脚本(JMeter、k6 或 Locust)可以定义并发性(虚拟用户)、事务速率(TPS)、启动时间和其他加载参数。该解决方案改为应用您在 “流量形状” 屏幕中指定的值。该配置控制任务数、并发性(每个任务的虚拟用户数)、加速持续时间和测试执行的保持时间。
在原生模式下,您的脚本控制负载,解决方案不向框架传递任何负载参数。有关两种模式之间的区别,请参阅交通形状模式。
安全持续时间(原生模式)
当您选择纯模式时,控制台会在脚本上传旁边显示安全持续时间字段。默认值为 4 小时,最大值为 24 小时。
在原生模式下,安全持续时间会结束运行时间比预期更长的测试,因为您的脚本决定运行何时完成。这是警卫,不是时间表。如果持续时间过后测试仍在运行,则解决方案将停止测试框架。它保留运行部分的结果,并将运行记录为已完成而不是失败。将其设置为预期脚本所需的最长运行时间以上。
第 3 步:交通形状
配置测试期间流量的分配方式,包括多区域支持。
交通形状模式
该解决方案提供两种交通形态模式,即标准和原生。它们在哪一方控制负载方面有所不同:解决方案或您上传的脚本。您可以在 “步骤 2:场景配置” 中选择模式,它决定以下哪些字段适用。
注意
原生模式是 4.3.0 版中的预览功能。标准模式是默认模式,也是解决方案一直使用的行为。
Standard
标准模式使解决方案控制负载。您可以设置每个区域的 Fargate 任务数、每个任务的并发虚拟用户数、启动时间和保留时长。该解决方案通过 Taurus 自动化框架运行您的测试,该框架将这些值转换为底层框架自己的负载控制。Taurus 优先于脚本声明的任何负载,因此 k6 选项块、Locust LoadTestShape 或 JMeter 线程组将被重写或忽略。区域的虚拟用户是任务数乘以每项任务的并发度,无论您选择哪个框架,其形状都相同。每个测试在 4.3.0 版本之前都是这样运行的,因此之前创建的场景保持原样,无需更改。
当负载形状属于脚本之外、通过控制台、CLI 或代理设置时,请选择 “标准”。标准模式是唯一一种无需触摸脚本即可设置精确的虚拟用户数量并更改增速和保持形状的模式。只有标准版支持简单 HTTP 端点类型,解决方案会为您生成测试计划。典型用途:容量检查步进 500 到 5,000 个虚拟用户,每晚回归,保持 1,000 个用户持续十分钟,或者任何需要相同增量的比较。它的极限是表现力。金牛座无法代表的任何内容在这里都不可用,包括多个加权场景、每个阶段的阈值和执行者到达率。
本地人
原生模式让您的脚本控制负载。该解决方案在框架自己的命令行下运行您上传的文件:jmeter -n -tk6 run、或locust --headless。它不传递任何负载标志,因此您的脚本是其生成的流量的唯一权限,该解决方案永远不会对其进行重写。还有两个控制措施:每个区域要启动多少个 Fargate 任务,以及最长 24 小时的安全期限。安全持续时间是为了防范永不退出的脚本,而不是时间表。如果持续时间过后测试仍在运行,则解决方案会停止框架,收集已运行部分的结果,并将运行记录为已完成而不是失败。每个任务作为独立的框架进程运行,任务之间不进行协调,因此区域会为每个任务生成一份脚本声明负载的完整副本。例如,一个容纳 200 个虚拟用户、运行五个任务的 k6 脚本将 1,000 个虚拟用户置于目标上。因此,任务数是 Native 提供的唯一负载控制,它以脚本声明的整数倍移动。更改渐变、保持时间或虚拟用户数量本身就意味着编辑脚本。
如果要完全按照编写的方式运行脚本,请选择 Native。已经在本地或在 CI 中运行的脚本在解决方案上运行不变,这是使用 Native 的主要原因。Native 保留了框架可以表达的所有内容:k6 场景、阶段和阈值;Locust LoadTestShape 类和加权任务集;JMeter 计时器和线程组。当载荷形状是测试含义的一部分时选择它,忠实地再现它比从外部引导它更重要。典型用途:在不重写流水线的情况下重复使用流水线中的 k6 脚本、峰值后恢复配置文件或单个并发数无法表达的加权场景。按原样运行框架会受到两个限制。原生需要上传脚本,因此简单 HTTP 端点不可用。不得设置 Locust 脚本processes,因为只有当 Locust 作为单个进程运行时,解决方案才会计算请求数。
选择模式
| 如果你需要 | 选择 |
|---|---|
|
精确的虚拟用户数,从脚本外部设置 |
标准 |
|
在不编辑脚本的情况下更改加速或保持时间 |
标准 |
|
一个完全没有脚本的单个 URL |
标准 |
|
无论框架如何,负载形状都相同 |
标准 |
|
如要重用 CI 或本地脚本,请保持不变 |
Native |
|
剧本自身的阶段、阈值或形状都受到尊重 |
Native |
|
k6 场景、阈值或到达率执行者 |
Native |
|
蝗虫 |
Native |
|
JMeter 计时器和线程组完全按照创作方式运行 |
Native |
|
仅按脚本自身负载的整数倍来缩放负载 |
Native |
Multi-Region 流量配置
选择一个或多个 AWS 区域以按地理位置分配您的负载测试。对于每个选定的区域,配置:
- 任务数
-
将在 Fargate 集群中为测试场景启动的容器(任务)的数量。一旦账户达到 “已达到 Fargate 资源” 上限,将不会创建其他任务。任务计数适用于两种交通形态模式。在原生模式下,它是控制台提供的唯一负载控制,因为每项任务都会运行脚本的完整副本。
- 并发
-
每个任务生成的并发虚拟用户的数量。建议的限制基于每个任务 2 个 vCPU 的默认设置。并发受到 CPU 和内存资源的限制。此字段仅适用于标准模式。在原生模式下,控制台会为每个区域显示一个 “由脚本定义” 的只读值,因为您的脚本会设置自己的虚拟用户数量。
确定用户数量
容器可以支持测试的用户数量可以通过逐步增加用户数量和监控亚马逊的性能来确定 CloudWatch。一旦观察到 CPU 和内存性能已接近极限,您就达到了容器在其默认配置(2 个 vCPU 和 4 GB 内存)下可以支持该测试的最大用户数。
此校准设置并发值,因此适用于标准模式。它建立的容器限制也适用于原生模式。您可以在此处提高或降低脚本声明的负载,而不是设置 “并发” 字段。
校准过程
您可以使用以下示例开始确定测试的并发用户限制:
-
创建不超过 200 个用户的测试。
-
测试运行时,使用CloudWatch 控制台监控 CPU 和内存
: -
在导航窗格的 “容器见解” 下,选择性能监控。
-
在性能监控页面上,从左侧下拉菜单中选择 ECS 集群。
-
从右侧下拉菜单中,选择您的亚马逊弹性容器服务 (Amazon ECS) 集群。
-
-
监视时,观察 CPU 和内存。如果 CPU 未超过 75% 或内存未超过 85%(忽略一次性峰值),则可以对更多用户运行另一项测试。
如果测试未超过资源限制,请重复步骤 1-3。或者,您可以增加容器资源以允许更多的并发用户。但是,这会导致更高的成本。有关详细信息,请参阅开发者指南。
注意
为了获得准确的结果,在确定并发用户限制时,一次只能运行一个测试。所有测试都使用同一个集群, CloudWatch 容器见解会根据集群汇总性能数据。这会导致两个测试同时报告给 CloudWatch Container Insights,从而导致单个测试的资源利用率指标不准确。
有关校准每个引擎的用户的更多信息,请参阅文档中的 “校准 Taurus 测试
注意
该解决方案显示每个区域的可用容量信息,帮助您在可用限制内规划测试配置。
可用任务表
可用任务表显示每个选定区域的资源可用性:
-
区域 -AWS 区域名称。
-
每个任务的 vCPU -分配给每项任务的虚拟 CPU 数量(默认值:2)。
-
DLT 任务限制 -根据您账户的 Fargate 按需 vCPU 配额可以创建的最大任务数。新账户的配额通常较低;请在服务配额控制台中验证您的当前限额,并在需要时申请提高配额。
-
可用的 DLT 任务 -该地区当前可用的任务数量,计算方法是您的 DLT 任务限制减去运行 Fargate 任务时已使用的 vCPU。
要增加可用任务的数量或每项任务的 vCPU 数量,请参阅开发人员指南。
测试持续时间
定义您的负载测试将运行多长时间。控制台仅在标准模式下显示此部分。在原生模式下,您的脚本决定测试运行多长时间,以您在步骤 2:场景配置中设置的安全持续时间为限。
- 加快速度
-
达到目标并发的时间。在此期间,负载从 0 逐渐增加到配置的并发级别。
- 等待
-
维持目标负荷的持续时间。在此期间,测试将以完全并发的方式继续进行。
步骤 4:审核并创建
在创建测试场景之前,请检查所有配置。验证:
-
常规设置(名称、描述、时间表)。
-
场景配置(测试类型、端点或脚本)。
-
流量形状(模式、任务、用户、时长、区域)。
查看后,选择 “创建” 以保存您的测试场景。
管理测试场景
创建测试场景后,您可以:
-
编辑 -修改测试配置。常见使用案例包括:
-
优化流量形状以达到所需的交易速率。
-
-
复制 -复制现有测试场景以创建变体。常见使用案例包括:
-
更新端点或添加 headers/body 参数。
-
添加或修改测试脚本。
-
-
删除 -移除不再需要的测试场景。