你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 YAML 中配置负载测试

了解如何使用 YAML 在 Azure 负载测试中配置负载测试。 使用测试配置 YAML 文件可以从持续集成和持续交付 (CI/CD) 工作流创建和运行负载测试。

负载测试 YAML 语法

负载测试配置使用以下键:

密钥 类型 必选 默认值 说明
version string Y 负载测试规范版本。 唯一支持的值为 v0.1
testId string Y 负载测试的唯一标识符。 值必须在 2 到 50 个字符 ([a-z0-9_-]) 之间。 对于现有测试,可以从 Azure 门户中的测试详细信息页获取 testId
testName string N 已弃用。 负载测试的唯一标识符。 此设置将 testId替换为 。 你仍然可以使用 testName 字段运行现有测试。
displayName string N 测试的显示名称。 此值显示在 Azure 门户中的测试列表中。 如果未提供,则 testId 会用作显示名称。
description string N 测试的简要说明。 值的长度最大为 100 个字符。
testType string Y 测试类型。 可能的值:
  • URL:基于 URL 的负载测试
  • JMX:基于 JMeter 的负载测试
  • Locust:基于 Locust 的负载测试
testPlan string Y 对测试计划文件的引用。
  • 如果为 testType: JMX :JMeter 测试脚本的相对路径。
  • 如果 testType: Locust为 :Locust 测试脚本的相对路径。
  • 如果testType: URL为 :请求 JSON 文件的相对路径
engineInstances integer Y 用于运行测试计划的并行测试引擎实例数。 详细了解 如何配置大规模负载
configurationFiles 字符串数组 N 测试脚本所需的外部文件列表。 例如,CSV 数据文件、图像或任何其他数据文件。
Azure 负载测试会上传与测试脚本相同的文件夹中的所有文件。 在 JMeter 脚本或 Locust 脚本中,仅引用使用文件名的外部文件,并删除任何文件路径信息。
failureCriteria object N 负载测试失败条件的列表。 有关更多详细信息,请参阅 failureCriteria
autoStop 字符串或对象 N 当错误百分比超过某值时自动停止负载测试。
可能的值:
- disable:不要自动停止负载测试。
- 对象:有关更多详细信息,请参阅 自动停止 配置。
properties object N
  • 如果 testType: JMX为 :JMeter 用户属性文件引用。
  • 如果 testType: Locust为 :Locust 配置文件引用。
有关更多详细信息,请参阅 属性
zipArtifacts 字符串数组 N 指定 zip 项目文件的列表。 对于基于 JMeter 的测试的 JMeter 脚本和用户属性以外的文件,以及基于 Locust 的测试的 Locust 脚本和配置文件,如果文件大小超过 50 MB,请将其压缩为 ZIP 文件。 请确保 ZIP 文件的大小保持在 50 MB 以下。 每个 ZIP 项目最多允许 5 个 ZIP 项目,每个文件的最大大小为 1000 个,未压缩的大小为 1 GB。 testType: JMX仅适用于和 testType: Locust
splitAllCSVs boolean N False 跨所有测试引擎实例均匀拆分输入 CSV 文件。 有关详细信息,请参阅在负载测试中读取 CSV 文件
secrets object N Apache JMeter 或 Locust 脚本引用的机密列表。 有关更多详细信息,请参阅机密。
env object N Apache JMeter 脚本或 Locust 引用的环境变量列表。 有关更多详细信息,请参阅 环境变量
certificates object N 用于在 JMeter 或 Locust 脚本中使用应用程序终结点进行身份验证的客户端证书列表。 有关更多详细信息,请参阅 证书
keyVaultReferenceIdentity string N 用户分配的托管标识的资源 ID,用于访问 Azure Key Vault 中的机密。 如果使用系统管理的标识,则不需要此信息。 请确保向此用户分配的标识授予对你的 Azure 密钥保管库的访问权限。 详细了解 Azure 负载测试中的托管标识。
subnetId string N 用于测试专用托管终结点的虚拟网络子网的资源 ID。 此子网会托管注入的测试引擎 VM。 有关详细信息,请参阅如何加载测试专用托管终结点
publicIPDisabled boolean N 测试专用终结点时,请禁用公共 IP 地址、负载均衡器和网络安全组的部署。 有关详细信息,请参阅如何加载测试专用托管终结点
regionalLoadTestConfig object N 跨区域分配负载,以模拟来自多个区域的用户流量。 有关详细信息,请参阅 区域负载测试配置

负载测试配置示例

以下 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'
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
  • 应用于特定 JMeter 请求的测试条件: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 整数值。 >(大于)
<(小于)
总请求数。

失败条件配置示例

以下代码片段显示了负载测试配置,该配置具有三个负载测试失败条件。

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
failureCriteria:
  - avg(response_time_ms) > 300
  - percentage(error) > 50
  - GetCustomerDetails: avg(latency) >200

autoStop 配置

负载测试自动停止功能使你能够在给定时间范围内错误百分比超过特定阈值时自动停止负载测试。 详细了解 负载测试自动停止功能

密钥 类型 默认值 说明
errorPercentage integer 90 错误百分比的阈值,在 timeWindow。 如果错误百分比在任何给定时间范围内超过此百分比,测试运行将自动停止。
timeWindow integer 60 用于计算 . 的时间 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 string 要用作 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 string 机密的名称。 此名称应与在测试计划请求中使用的机密名称匹配。
value string 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 string 环境变量的名称。 此名称应与在测试计划请求中使用的变量名称匹配。
value string 环境变量的值。

环境变量配置示例

以下代码片段显示了一个负载测试配置,该配置指定环境变量 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 密钥库中。 详细了解如何将 客户端证书与 Azure 负载测试配合使用。

密钥 类型 默认值 说明
name string 证书的名称。
value string 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

请求 JSON 文件

如果使用基于 URL 的测试,则可以在 JSON 文件中指定 HTTP 请求,而不是使用 JMeter 测试脚本。 请确保在 testType 测试配置 YAML 文件中设置它 URL 并引用请求 JSON 文件。

HTTP 请求

请求 JSON 文件使用以下属性来定义属性中的 requests 请求:

properties 类型​​ 说明
requestName string 唯一的请求名称。 配置测试失败条件,可以引用请求名称。
responseVariables array 响应变量列表。 使用响应变量从请求中提取值,并在后续请求中引用该值。 详细了解 响应变量
responseVariables.extractorType string 从响应输出中提取值的机制。 支持的值为 XPathExtractorJSONExtractorRegularExpression
responseVariables.expression string 用于检索响应输出的表达式。 表达式取决于提取程序类型值。
responseVariables.variableName string 唯一响应变量名称。 可以使用语法在后续请求 {$variable-name} 中引用此变量。
queryParameters array 要传递给终结点的查询字符串参数列表。
queryParameters.key string 查询字符串参数名称。
queryParameters.value string 查询字符串参数值。
requestType string 请求的类型。 支持的值为: URLCURL
endpoint string 要测试的应用程序终结点的 URL。
headers array 要传递给应用程序终结点的 HTTP 标头列表。 为每个标头指定键值对。
body string HTTP 请求的正文文本。 可以使用该 requestBodyFormat 设置来指定正文内容的格式。
requestBodyFormat string 正文内容的格式。 支持的值为 TextJSONJavaScriptHTMLXML
method string 用于调用终结点的 HTTP 方法。 支持的值为:GET、、、POSTPUTDELETEPATCHHEADOPTIONS
curlCommand string 要运行的 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 string 加载模式类型。 支持的值包括: linearstepspike
scenario string 对属性中指定的请求组的 scenarios 引用。
virtualUsersPerEngine integer All 每个测试引擎实例的虚拟用户数。
durationInSeconds integer All 负载测试的总持续时间(以秒为单位)。
rampUpTimeInSeconds integer 线性步骤 持续时间(以秒为单位)以提升到虚拟用户的目标数量。
rampUpSteps integer 步长 达到虚拟用户目标数量的步骤数。
spikeMultiplier integer 峰值 将目标用户数与峰值持续时间相乘的因素。
spikeHoldTimeInSeconds integer 峰值 维护峰值负载的总持续时间(以秒为单位)。

区域负载测试配置

可以跨区域分配负载,以更好地模拟现实生活中的流量模式。 可以指定要从中生成负载的区域以及要从每个区域模拟的负载量。 为此,可以指定区域中所需的区域名称和引擎实例数。 详细了解如何 从多个区域生成负载。

密钥 类型 默认值 说明
region string Azure 区域的名称。
engineInstances integer 该 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