你当前正在访问 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 的负载测试
testPlan string Y 对测试计划文件的引用。
  • 如果 testType: JMX为 :JMeter 测试脚本的相对路径。
  • 如果testType: URL为 :请求 JSON 文件的相对路径
engineInstances integer Y 用于运行测试计划的并行测试引擎实例数。 详细了解 如何配置大规模负载
configurationFiles 字符串数组 N 测试脚本所需的外部文件列表。 例如,CSV 数据文件、图像或任何其他数据文件。
Azure 负载测试上传与测试脚本相同的文件夹中的所有文件。 在 JMeter 脚本中,仅引用使用文件名的外部文件,并删除任何文件路径信息。
failureCriteria object N 负载测试失败条件的列表。 有关更多详细信息,请参阅 failureCriteria
autoStop 字符串或对象 N 当错误百分比超过值时自动停止负载测试。
可能的值:
- disable:不要自动停止负载测试。
- 对象:有关更多详细信息,请参阅 自动停止 配置。
properties object N JMeter 用户属性文件引用。 有关更多详细信息,请参阅 属性
zipArtifacts 字符串数组 N 指定 zip 项目文件的列表。 对于 JMeter 脚本和用户属性以外的文件,如果文件大小超过 50 MB,请将其压缩为 ZIP 文件。 确保 ZIP 文件的大小保持在 50 MB 以下。 每个 ZIP 项目最多允许 5 个 ZIP 项目,每个文件的最大大小为 1000 个,未压缩的大小为 1 GB。 仅适用于以下情况 testType: JMX
splitAllCSVs boolean N False 跨所有测试引擎实例均匀拆分输入 CSV 文件。 有关详细信息,请参阅在负载测试中读取 CSV 文件
secrets object N Apache JMeter 脚本引用的机密列表。 有关更多详细信息,请参阅机密。
env object N Apache JMeter 脚本引用的环境变量列表。 有关更多详细信息,请参阅 环境变量
certificates object N 用于在 JMeter 脚本中使用应用程序端点进行身份验证的客户端证书列表。 有关更多详细信息,请参阅 证书
keyVaultReferenceIdentity string N 用户分配的托管标识的资源 ID,用于访问 Azure Key Vault 中的机密。 如果使用系统管理的标识,则不需要此信息。 请确保向此用户分配的标识授予对你的 Azure 密钥保管库的访问权限。 详细了解 Azure 负载测试中的托管标识。
subnetId string N 用于测试专用托管终结点的虚拟网络子网的资源 ID。 此子网托管注入的测试引擎 VM。 有关详细信息,请参阅如何加载测试专用托管终结点
publicIPDisabled boolean N 测试专用终结点时,禁用公共 IP 地址、负载均衡器和网络安全组的部署。 有关详细信息,请参阅如何加载测试专用托管终结点

负载测试配置示例

以下 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、90、95、99
整数值,表示毫秒数 (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 用户属性文件的文件。 该文件将连同 JMeter 测试脚本和其他配置文件一起上传到 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'

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 数组 响应变量列表。 使用响应变量从请求中提取值,并在后续请求中引用该值。 详细了解 响应变量
responseVariables.extractorType string 从响应输出中提取值的机制。 支持的值为 XPathExtractorJSONExtractorRegularExpression
responseVariables.expression string 用于检索响应输出的表达式。 表达式取决于提取程序类型值。
responseVariables.variableName string 唯一响应变量名称。 可以使用语法在后续请求 {$variable-name} 中引用此变量。
queryParameters 数组 要传递给终结点的查询字符串参数列表。
queryParameters.key string 查询字符串参数名称。
queryParameters.value string 查询字符串参数值。
requestType string 请求的类型。 支持的值为: URLCURL
endpoint string 要测试的应用程序终结点的 URL。
headers 数组 要传递给应用程序终结点的 HTTP 标头列表。 为每个标头指定键值对。
body string HTTP 请求的正文文本。 可以使用该 requestBodyFormat 设置来指定正文内容的格式。
requestBodyFormat string 正文内容的格式。 支持的值为 TextJSONJavaScriptHTMLXML
method string 用于调用终结点的 HTTP 方法。 支持的值为:GET、、、POSTPUTDELETEPATCHHEADOPTIONS
curlCommand string 要运行的 cURL 命令。 要求是 requestTypeCURL

以下 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 峰值 维护峰值负载的总持续时间(以秒为单位)。