了解如何使用 YAML 在 Azure 负载测试中配置负载测试。 使用测试配置 YAML 文件可以从持续集成和持续交付 (CI/CD) 工作流创建和运行负载测试。
负载测试 YAML 语法
负载测试配置使用以下键:
密钥 | 类型 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
version |
字符串 | Y | 负载测试规范版本。 唯一支持的值为 v0.1 。 |
|
testId |
字符串 | Y | 负载测试的唯一标识符。 值必须在 2 到 50 个字符 ([a-z0-9_-]) 之间。 对于现有测试,可以从 Azure 门户中的测试详细信息页获取 testId 。 |
|
testName |
字符串 | N |
已弃用。 负载测试的唯一标识符。 此设置将 testId 替换为 。 你仍然可以使用 testName 字段运行现有测试。 |
|
displayName |
字符串 | N | 测试的显示名称。 此值显示在 Azure 门户中的测试列表中。 如果未提供,则 testId 会用作显示名称。 |
|
description |
字符串 | N | 测试的简要说明。 值的长度最大为 100 个字符。 | |
testType |
字符串 | Y | 测试类型。 可能的值:
|
|
testPlan |
字符串 | Y | 对测试计划文件的引用。
|
|
engineInstances |
整数 | Y | 用于运行测试计划的并行测试引擎实例数。 详细了解 如何配置大规模负载。 | |
configurationFiles |
字符串数组 | N | 测试脚本所需的外部文件列表。 例如,JMX 片段文件、CSV 数据文件、图像或任何其他数据文件。 Azure 负载测试会上传与测试脚本相同的文件夹中的所有文件。 在 JMeter 脚本或 Locust 脚本中,仅引用使用文件名的外部文件,并删除任何文件路径信息。 |
|
failureCriteria |
物体 | N | 负载测试失败条件。 有关更多详细信息,请参阅 failureCriteria 。 | |
autoStop |
字符串或对象 | N | 当错误百分比超过某值时自动停止负载测试。 可能的值: - disable :不要自动停止负载测试。- 对象:有关更多详细信息,请参阅 自动停止 配置。 |
|
properties |
物体 | N |
|
|
zipArtifacts |
字符串数组 | N | 指定 zip 项目文件的列表。 对于基于 JMeter 的测试的主测试脚本和用户属性以外的文件以及基于 Locust 的测试的 Locust 脚本和配置文件,如果文件大小超过 50 MB,请将其压缩为 ZIP 文件。 请确保 ZIP 文件的大小保持在 50 MB 以下。 每个 ZIP 项目最多允许 5 个 ZIP 项目,每个文件的最大大小为 1000 个,未压缩的大小为 1 GB。
testType: JMX 仅适用于和 testType: Locust 。 |
|
splitAllCSVs |
布尔 | N | 假 | 跨所有测试引擎实例均匀拆分输入 CSV 文件。 有关详细信息,请参阅在负载测试中读取 CSV 文件。 |
secrets |
物体 | N | Apache JMeter 或 Locust 脚本引用的机密列表。 有关更多详细信息,请参阅机密。 | |
env |
物体 | N | Apache JMeter 脚本或 Locust 引用的环境变量列表。 有关更多详细信息,请参阅 环境变量 。 | |
certificates |
物体 | N | 用于在 JMeter 或 Locust 脚本中使用应用程序终结点进行身份验证的客户端证书列表。 有关更多详细信息,请参阅 证书 。 | |
appComponents |
物体 | N | 在负载测试期间要监视的服务器 -side 资源列表。 有关更多详细信息 ,请参阅 appComponents 。 | |
subnetId |
字符串 | N | 用于测试专用托管终结点的虚拟网络子网的资源 ID。 此子网会托管注入的测试引擎 VM。 有关详细信息,请参阅如何加载测试专用托管终结点。 | |
publicIPDisabled |
布尔 | N | 测试专用终结点时,请禁用公共 IP 地址、负载均衡器和网络安全组的部署。 有关详细信息,请参阅如何加载测试专用托管终结点。 | |
regionalLoadTestConfig |
物体 | N | 跨区域分配负载,以模拟来自多个区域的用户流量。 有关详细信息,请参阅 区域负载测试配置 。 | |
referenceIdentities |
物体 | N | 用于从 Azure Key Vault 访问机密的测试中使用的托管标识列表、服务器端故障条件的指标和终结点身份验证的指标。 有关更多详细信息,请参阅 referenceIdentities 。 |
负载测试配置示例
以下 YAML 代码片段包含一个示例负载测试配置。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
subnetId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Network/virtualNetworks/load-testing-vnet/subnets/load-testing
configurationFiles:
- 'sampledata.csv'
- 'testfragment.jmx'
zipArtifacts:
- bigdata.zip
splitAllCSVs: True
failureCriteria:
- avg(response_time_ms) > 300
- percentage(error) > 50
- GetCustomerDetails: avg(latency) >200
autoStop:
errorPercentage: 80
timeWindow: 60
secrets:
- name: my-secret
value: https://akv-contoso.vault.azure.net/secrets/MySecret/abc1234567890def12345
keyVaultReferenceIdentity: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity
failureCriteria
配置
测试失败条件使你可以定义条件,以确定负载测试运行是否成功。 如果满足一个或多个失败条件,则测试将获取失败的测试结果。 详细了解 如何使用负载测试失败条件。 可以针对客户端指标(例如响应时间、延迟等)以及服务器端应用组件的服务器端指标定义故障条件。
客户端指标
可以定义应用于整个负载测试或应用于特定请求的失败条件。 失败条件采用以下结构:
- 负载测试级别的测试条件:
Aggregate_function (client_metric) condition threshold
。 - 应用于特定请求的测试条件:
Request: Aggregate_function (client_metric) condition threshold
。
Azure 负载测试支持以下客户端指标:
指标 | 聚合函数 | 阈值 | 条件 | 说明 |
---|---|---|---|---|
response_time_ms |
avg (平均)min (最小值)max (最大值)pxx (百分位),xx 可以是 50、75、90、95、96、97、98、99、999 和 9999 |
整数值,表示毫秒数 (ms)。 |
> (大于)< (小于) |
响应时间或经过的时间,以毫秒为单位。 在 Apache JMeter 文档中详细了解经过的时间。 |
latency |
avg (平均)min (最小值)max (最大值)pxx (百分位),xx 可以是 50、90、95、99 |
整数值,表示毫秒数 (ms)。 |
> (大于)< (小于) |
延迟,以毫秒为单位。 在 Apache JMeter 文档中详细了解延迟。 |
error |
percentage |
0-100 范围的数值,表示百分比。 |
> (大于) |
失败请求数百分比。 |
requests_per_sec |
avg (平均) |
最多包含两位小数的数值。 |
> (大于) < (小于) |
每秒请求数。 |
requests |
count |
整数值。 |
> (大于) < (小于) |
总请求数。 |
服务器端指标
可以在服务器端应用组件的服务器端指标上定义失败条件。
下表描述了配置中的 serverMetrics:
不同字段:
参数 | 说明 |
---|---|
resourceId |
必填。 应用组件的资源 ID |
metricNamespace |
必填。 服务器端指标命名空间。 |
metricName |
必填。 应应用条件的服务器端指标。 |
aggregation |
必填。 要应用于服务器端指标的聚合。 |
condition |
可选。 比较运算符,例如 greater than 或 less than 。 |
value |
必填。 要与指标进行比较的数值。 |
失败条件配置示例
以下代码片段显示了负载测试配置,该配置具有三个负载测试失败条件。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
failureCriteria:
clientMetrics:
- avg(responseTimeMs) > 300
- percentage(error) > 50
- getCustomerDetails: avg(latency) > 200
serverMetrics:
- resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
metricNamespace: Microsoft.Compute/virtualMachines
metricName: Percentage CPU
aggregation: Average
condition: GreaterThan
value: 80
- resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
metricNamespace: Microsoft.Compute/virtualMachines
metricName: Available Memory
aggregation: Average
condition: LessThan
value: 20
appComponents
配置
可以在负载测试期间监视服务器端资源。 详细了解 如何监视服务器端资源。 为 Azure 托管的应用程序运行负载测试时,Azure 负载测试会收集应用程序组件的资源指标,并在负载测试仪表板中显示这些指标。
下表描述了配置中的 appComponents:
不同字段:
参数 | 说明 |
---|---|
resourceId |
必填。 应用组件的资源 ID,应应用条件。 |
resourceName |
可选。 要监视的资源的名称。 |
kind |
可选。 要监视的资源的类型。 |
metrics |
必填。 要监视应用组件的指标列表。 这包含指标的名称、命名空间和聚合。 |
应用组件配置示例
以下代码片段显示了一个负载测试配置,其中包含两个应用组件。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
appComponents:
- resourceId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appComponentResource"
resourceName: appComponentResource #Optional
kind: web # Optional
metrics:
- name: "requests/duration"
namespace: microsoft.insights/components
aggregation: "Average"
- name: "requests/count"
aggregation: "Total"
namespace: microsoft.insights/components
- resourceId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appComponentResource"
resourceName: appComponentResource #Optional
kind: web # Optional
metrics:
- name: "requests/duration"
aggregation: "Average"
namespace: microsoft.insights/components
- name: "requests/count"
aggregation: "Total"
namespace: microsoft.insights/components
autoStop
配置
负载测试自动停止功能使你能够在给定时间范围内错误百分比超过特定阈值时自动停止负载测试。 详细了解 负载测试自动停止功能。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
errorPercentage |
整数 | 90 | 错误百分比的阈值,在 timeWindow 。 如果错误百分比在任何给定时间范围内超过此百分比,测试运行将自动停止。 |
timeWindow |
整数 | 六十 | 用于计算 . 的时间 errorPercentage 窗口(以秒为单位)。 |
自动停止配置示例
以下代码片段显示了负载测试配置,该配置具有三个负载测试失败条件。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
autoStop:
errorPercentage: 80
timeWindow: 60
properties
配置
可以为负载测试指定 JMeter 用户属性文件。 用户属性文件与测试计划和其他文件一起上传。 详细了解如何在 Azure 负载测试中使用 JMeter 用户属性。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
userPropertyFile |
字符串 | 要用作 Apache JMeter 用户属性文件 或 Locust 配置文件的文件。 对于 Locust,支持扩展名为 .conf、.ini 和 .toml 的文件作为配置文件。 该文件将连同测试脚本和其他配置文件一起上传到 Azure 负载测试资源。 如果文件位于本地计算机上的某个子文件夹中,请使用测试脚本所在位置的相对文件路径。 |
用户属性文件配置示例
以下代码片段显示了一个负载测试配置,该配置指定用户属性文件。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
properties:
userPropertyFile: 'user.properties'
以下代码片段显示了一个负载测试配置,该配置指定了 Locust 配置文件。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.py
testType: Locust
engineInstances: 1
properties:
userPropertyFile: 'locust.conf'
secrets
配置
可以在 Azure 密钥库中存储机密值,并在测试计划中引用它们。 详细了解如何将 机密与 Azure 负载测试配合使用。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
name |
字符串 | 机密的名称。 此名称应与在测试计划请求中使用的机密名称匹配。 | |
value |
字符串 | Azure 密钥保管库机密的 URI(机密标识符)。 |
机密配置示例
以下代码片段显示了一个负载测试配置,该配置引用 Azure 密钥库中的机密my-secret
。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
secrets:
- name: my-secret
value: https://akv-contoso.vault.azure.net/secrets/MySecret/abc1234567890def12345
env
配置
可以在测试计划中指定环境变量并引用它们。 详细了解如何将 环境变量与 Azure 负载测试配合使用。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
name |
字符串 | 环境变量的名称。 此名称应与在测试计划请求中使用的变量名称匹配。 | |
value |
字符串 | 环境变量的值。 |
环境变量配置示例
以下代码片段显示了一个负载测试配置,该配置指定环境变量 my-variable
和值 my-value
。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
env:
- name: my-variable
value: my-value
certificates
配置
可以将客户端证书传递给负载测试。 该证书存储在 Azure Key Vault 中。 详细了解如何将 客户端证书与 Azure 负载测试配合使用。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
name |
字符串 | 证书的名称。 | |
value |
字符串 | Azure 密钥保管库中证书的 URI(秘密标识符)。 |
证书配置示例
以下代码片段演示负载测试配置,该配置引用 Azure 密钥库中的客户端证书。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
certificates:
- name: my-certificate
value: https://akv-contoso.vault.azure.net/certificates/MyCertificate/abc1234567890def12345
referenceIdentities
配置
可以在负载测试中对各种方案使用托管标识。 托管标识可用于在测试中访问 Azure Key Vault 中的机密或证书、获取服务器端故障条件的指标和终结点的身份验证。
下表描述了配置中的 referenceIdentities:
不同字段:
参数 | 说明 |
---|---|
kind |
必填。 这定义了正在使用托管标识的方案。 这可以是下列 KeyVault 项之一, Metrics 也可以 Engine 。 类型可以有多个项 Engine 。 |
type |
必填。 标识的类型。 这可以是 UserAssigned 或 SystemAssigned 。 |
value |
必填。 托管标识的资源 ID。 如果类型为 SystemAssigned ,则无需提供此项。 |
参考标识配置示例
以下代码片段显示了多个标识的负载测试配置。
version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
secrets:
- name: my-secret
value: https://akv-contoso.vault.azure.net/secrets/MySecret/abc1234567890def12345
failureCriteria:
serverMetrics:
- resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
metricNamespace: Microsoft.Compute/virtualMachines
metricName: Percentage CPU
aggregation: Average
condition: GreaterThan
value: 80
referenceIdentities:
- kind: KeyVault
type: UserAssigned
value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity
- kind: Metrics
type: SystemAssigned
- kind: Engine
type: UserAssigned
value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity
- kind: Engine
type: UserAssigned
value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity1
请求 JSON 文件
如果使用基于 URL 的测试,则可以在 JSON 文件中指定 HTTP 请求,而不是使用测试脚本。 请确保在 testType
测试配置 YAML 文件中设置它 URL
并引用请求 JSON 文件。
HTTP 请求
请求 JSON 文件使用以下属性来定义属性中的 requests
请求:
properties | 类型 | 说明 |
---|---|---|
requestName |
字符串 | 唯一的请求名称。 配置测试失败条件时,可以引用请求名称。 |
responseVariables |
数组 | 响应变量列表。 使用响应变量从请求中提取值,并在后续请求中引用该值。 详细了解 响应变量。 |
responseVariables.extractorType |
字符串 | 从响应输出中提取值的机制。 支持的值为 XPathExtractor 、JSONExtractor 和 RegularExpression 。 |
responseVariables.expression |
字符串 | 用于检索响应输出的表达式。 表达式取决于提取程序类型值。 |
responseVariables.variableName |
字符串 | 唯一响应变量名称。 可以使用语法在后续请求 {$variable-name} 中引用此变量。 |
queryParameters |
数组 | 要传递给终结点的查询字符串参数列表。 |
queryParameters.key |
字符串 | 查询字符串参数名称。 |
queryParameters.value |
字符串 | 查询字符串参数值。 |
requestType |
字符串 | 请求的类型。 支持的值为: URL 或 CURL 。 |
endpoint |
字符串 | 要测试的应用程序终结点的 URL。 |
headers |
数组 | 要传递给应用程序终结点的 HTTP 标头列表。 为每个标头指定键值对。 |
body |
字符串 | HTTP 请求的正文文本。 可以使用该 requestBodyFormat 设置来指定正文内容的格式。 |
requestBodyFormat |
字符串 | 正文内容的格式。 支持的值为 Text 、JSON 、JavaScript 、HTML 和 XML 。 |
method |
字符串 | 用于调用终结点的 HTTP 方法。 支持的值为:GET 、、、POST 、PUT DELETE 、 PATCH HEAD 和OPTIONS 。 |
curlCommand |
字符串 | 要运行的 cURL 命令。 要求是 requestType CURL 。 |
以下 JSON 代码片段包含一个请求 JSON 文件的示例:
{
"version": "1.0",
"scenarios": {
"requestGroup1": {
"requests": [
{
"requestName": "add",
"responseVariables": [],
"queryParameters": [
{
"key": "param1",
"value": "value1"
}
],
"requestType": "URL",
"endpoint": "https://www.contoso.com/orders",
"headers": {
"api-token": "my-token"
},
"body": "{\r\n \"customer\": \"Contoso\",\r\n \"items\": {\r\n\t \"product_id\": 321,\r\n\t \"count\": 50,\r\n\t \"amount\": 245.95\r\n }\r\n}",
"method": "POST",
"requestBodyFormat": "JSON"
},
{
"requestName": "get",
"responseVariables": [],
"requestType": "CURL",
"curlCommand": "curl --request GET 'https://www.contoso.com/orders'"
},
],
"csvDataSetConfigList": []
}
},
"testSetup": [
{
"virtualUsersPerEngine": 1,
"durationInSeconds": 600,
"loadType": "Linear",
"scenario": "requestGroup1",
"rampUpTimeInSeconds": 30
}
]
}
加载配置
请求 JSON 文件使用以下属性来定义属性中的 testSetup
负载配置:
properties | 类型 | 负载类型 | 说明 |
---|---|---|---|
loadType |
字符串 | 加载模式类型。 支持的值为:linear 、step 和 spike 。 |
|
scenario |
字符串 | 对属性中指定的请求组的 scenarios 引用。 |
|
virtualUsersPerEngine |
整数 | 全部 | 每个测试引擎实例的虚拟用户数。 |
durationInSeconds |
整数 | 全部 | 负载测试的总持续时间(以秒为单位)。 |
rampUpTimeInSeconds |
整数 | 线性步骤 | 持续时间(以秒为单位)以提升到虚拟用户的目标数量。 |
rampUpSteps |
整数 | 步长 | 达到虚拟用户目标数量的步骤数。 |
spikeMultiplier |
整数 | 峰值 | 将目标用户数与峰值持续时间相乘的因素。 |
spikeHoldTimeInSeconds |
整数 | 峰值 | 维护峰值负载的总持续时间(以秒为单位)。 |
区域负载测试配置
可以跨区域分配负载,以更好地模拟现实生活中的流量模式。 可以指定要从中生成负载的区域以及要从每个区域模拟的负载量。 为此,可以指定区域中所需的区域名称和引擎实例数。 详细了解如何 从多个区域生成负载。
密钥 | 类型 | 默认值 | 说明 |
---|---|---|---|
region |
字符串 | Azure 区域的名称。 | |
engineInstances |
整数 | 该 Azure 区域的引擎实例数。 |
区域负载测试配置示例
以下代码片段显示了一个负载测试配置,该配置指定两个 Azure 区域 eastus
以及 eastasia
每个区域的引擎实例数。
displayName: Sample Test
testPlan: sampleScript.jmx
description: 'Load test website home page'
engineInstances: 4
testId: SampleTest
testType: Locust
splitAllCSVs: False
regionalLoadTestConfig:
- region: eastus
engineInstances: 2
- region: eastasia
engineInstances: 2
failureCriteria:
- p90(response_time_ms) > 10000
autoStop:
errorPercentage: 90
timeWindow: 60
相关内容
- 了解如何在 CI/CD 工作流中生成自动化回归测试。
- 了解如何使用机密和环境变量来参数化负载测试。
- 了解如何加载测试安全端点。