你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
本文内容
可以通过创建 CI/CD 管道在 Azure 负载测试中自动执行负载测试。 本文介绍如何手动配置 GitHub Actions、Azure Pipelines 或其他 CI 工具以调用 Azure 负载测试中的现有测试。 自动执行负载测试,以持续验证负载下的应用程序性能和稳定性。
若要将现有负载测试添加到 CI/CD 管道,请执行以下操作:
配置服务身份验证以允许 CI 工具连接到 Azure 负载测试资源。
将负载测试输入文件添加到存储库,例如 JMeter 测试脚本和负载测试 YAML 配置。
更新 CI/CD 管道定义以调用 Azure 负载测试。
先决条件
Azure DevOps 组织和项目。 如果没有 Azure DevOps 组织,可以免费创建一个 。 如需 Azure Pipelines 入门方面的帮助,请参阅创建第一个管道 。
一个 GitHub 帐户。 如果没有 GitHub 帐户,可以免费创建一个 。
用于存储负载测试输入文件和创建 GitHub Actions 工作流的 GitHub 存储库。 若要创建一个存储库,请参阅创建新存储库 。
创建或修改 CI 管道的权限。
用于存储负载测试输入文件的源代码存储库。
若要在 CI/CD 工作流中运行负载测试,需要向 CI/CD 工作流授予访问负载测试资源的权限。 为 CI/CD 工作流创建服务主体,并分配负载测试参与者 Azure RBAC 角色。
在 Azure Pipelines 中创建服务连接
在 Azure Pipelines 中,在 Azure DevOps 项目中创建服务连接,以访问 Azure 订阅中的资源。 创建服务连接时,Azure DevOps 会创建 Microsoft Entra 服务主体对象。
登录到你的 Azure DevOps 组织 (https://dev.azure.com/<your-organization>
),并选择你的项目。
将 <your-organization>
文本占位符替换为项目标识符。
选择“项目设置”>“服务连接”>“+ 新建服务连接”。
在“新建服务连接”窗格中,选择“Azure 资源管理器”,然后选择“下一步”。
依次选择“服务主体(自动)”身份验证方法、“下一步”。
输入服务连接详细信息,然后选择“保存”以创建服务连接。
字段
值
范围级别
订阅 。
订阅
选择用于托管负载测试资源的 Azure 订阅。
资源组
选择用于包含负载测试资源的资源组。
服务连接名称
为服务连接输入唯一的名称。
向所有管道授予访问权限
已选中。
从服务连接列表中,选择之前创建的连接,然后选择“管理服务主体”。
Azure 门户将在单独的浏览器标签页中打开,并显示服务主体详细信息。
在 Azure 门户中,复制“显示名称”值。
在下一步中,使用此值向服务主体授予运行负载测试的权限。
授予对 Azure 负载测试的访问权限
Azure 负载测试使用 Azure RBAC 授予对负载测试资源执行特定活动的权限。 若要从 CI/CD 管道运行负载测试,请将负载测试参与者角色授予服务主体。
在 Azure 门户 中,转到 Azure 负载测试资源。
选择“访问控制(IAM)”>“添加”>“添加角色分配”。
在“角色”选项卡中,选择作业功能角色列表中的“负载测试参与者” 。
在“成员”选项卡中,选择“选择成员”,然后使用之前复制的显示名称搜索服务主体。
选择服务主体,然后选择“选择”。
在“查看 + 分配”选项卡中,选择“查看 + 分配”,以添加角色分配。
现在可以使用 Azure Pipelines 工作流定义中的服务连接来访问 Azure 负载测试资源。
若要从 GitHub Actions 工作流访问 Azure 负载测试资源,请先创建 Microsoft Entra 服务主体 。 此服务主体表示 Microsoft Entra ID 中的 GitHub Actions 工作流。
接下来,向该服务主体授予使用 Azure 负载测试资源创建和运行负载测试的权限。
创建服务主体
在 Azure 订阅中创建服务主体并分配负载测试参与者角色,以便 GitHub Actions 工作流有权访问 Azure 负载测试资源以运行负载测试。
创建服务主体并分配 Load Test Contributor
角色:
# Get the resource ID for the load testing resource - replace the text place holders.
loadtest=$(az resource show -g <resource-group-name> -n <load-testing-resource-name> --resource-type "Microsoft.LoadTestService/loadtests" --query "id" -o tsv)
echo $loadtest
# Create a service principal and assign the Load Test Contributor role - the scope is limited to the load testing resource.
az ad sp create-for-rbac --name "my-load-test-cicd" --role "Load Test Contributor" \
--scopes $loadtest \
--json-auth
输出是表示服务主体的 JSON 对象。 使用此信息在 GitHub Actions 工作流中向 Azure 进行身份验证。
Creating 'Load Test Contributor' role assignment under scope
{
"clientId": "00000000-0000-0000-0000-000000000000",
"clientSecret": "00000000-0000-0000-0000-000000000000",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-0000-000000000000",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
将输出 JSON 对象复制到剪贴板。
在下一步中,将服务主体信息存储为 GitHub Actions 机密。
将 Azure 凭据存储在 GitHub Actions 机密中
创建 GitHub Actions 机密以安全存储服务主体信息。 在工作流定义中使用此机密进行连接,以便向 Azure 进行身份验证并访问 Azure 负载测试资源。
若要创建 GitHub Actions 机密,请执行以下操作:
在 GitHub 中,浏览到存储库。
选择设置> Secrets 和 variables> Actions。
选择“新建存储库机密”,输入机密信息,然后选择“添加机密”以创建新机密。
字段
值
名称
AZURE_CREDENTIALS
机密
粘贴之前复制的服务主体创建命令的 JSON 输出。
现在,可以使用存储的凭据从 GitHub Actions 工作流访问 Azure 订阅和负载测试资源。
如果使用另一个 CI/CD 工具,请使用 Azure CLI 与 Azure 资源交互。 执行以下步骤,授权 CI 工具访问负载测试资源:
创建 Microsoft Entra 服务主体 以连接到 Azure 订阅并访问 Azure 负载测试资源。
通过分配负载测试参与者角色授予服务主体创建和运行负载测试的权限。
将 Azure 凭据安全地存储在 CI 工具中。
执行以下步骤,为 CI 工具配置服务授权:
创建服务主体并分配负载测试参与者角色:
<resource-group-name>
替换文本<load-testing-resource-name>
占位符。
# Get the resource ID for the load testing resource - replace the text place holders.
loadtest=$(az resource show -g <resource-group-name> -n <load-testing-resource-name> --resource-type "Microsoft.LoadTestService/loadtests" --query "id" -o tsv)
echo $loadtest
# Create a service principal and assign the Load Test Contributor role - the scope is limited to the load testing resource.
az ad sp create-for-rbac --name "my-load-test-cicd" --role "Load Test Contributor" \
--scopes $loadtest \
--json-auth
输出是表示服务主体的 JSON 对象。
Creating 'Load Test Contributor' role assignment under scope
{
"clientId": "00000000-0000-0000-0000-000000000000",
"clientSecret": "00000000-0000-0000-0000-000000000000",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-0000-000000000000",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
clientId
复制值clientSecret
和tenantId
值,并将其安全地存储为 CI 工具中的机密。
使用这些值通过 Azure CLI az login
命令登录到 Azure 订阅。
在存储库中添加负载测试文件
若要在 CI/CD 工作流中使用 Azure 负载测试运行负载测试,需要在源代码管理存储库中添加所有负载测试输入文件。
如果没有现有的负载测试,请将以下文件添加到源代码存储库:
如果有现有的负载测试,可以直接从Azure 门户下载配置设置和所有输入文件。 执行以下步骤,以在 Azure 门户中下载现有负载测试的输入文件:
在 Azure 门户 中,转到 Azure 负载测试资源。
在左窗格中,选择“测试”以查看负载测试的列表,然后选择测试。
选择使用的测试运行旁边的省略号 (...),然后选择“下载输入文件” 。
浏览器会下载包含负载测试输入文件的压缩文件夹。
使用任何 zip 工具提取输入文件。
此文件夹包含以下文件:
config.yaml
:负载测试 YAML 配置文件。 你将在 CI/CD 工作流定义中引用此文件。
.jmx
:JMeter 测试脚本
运行负载测试所需的任何其他输入文件,例如 CSV 文件或用户属性文件。
将所有提取的输入文件提交到源代码管理存储库。
使用在其中配置 CI/CD 管道的源代码存储库。
更新 CI/CD 工作流定义
Azure 负载测试支持 GitHub Actions 和 Azure Pipelines 运行负载测试。
安装适用于 Azure DevOps 的 Azure 负载测试扩展
若要创建和运行负载测试,Azure Pipelines 工作流定义使用 Azure DevOps 市场中的 Azure 负载测试任务 扩展。
打开 Azure DevOps 市场中的 Azure 负载测试任务扩展 ,然后选择“免费获取”。
选择你的 Azure DevOps 组织,然后选择“安装”以安装扩展。
如果对所选 Azure DevOps 组织没有管理员权限,请选择“请求”以请求管理员安装扩展。
更新 Azure Pipelines 工作流
更新 Azure Pipelines 工作流,为 Azure 负载测试资源运行负载测试。
登录到你的 Azure DevOps 组织 (https://dev.azure.com/<your-organization>
),并选择你的项目。
在左侧导航栏中选择“管道”,选择你的管道,然后选择“编辑”以编辑工作流定义。
或者,选择“创建管道”以在 Azure Pipelines 中创建新管道。
使用 AzureLoadTest
任务运行负载测试。
指定之前在 loadTestConfigFile
属性中导出的负载测试配置文件。
将 <load-testing-resource>
和 <load-testing-resource-group>
文本占位符替换为 Azure 负载测试资源和资源组的名称。
- task: AzureLoadTest@1
inputs:
azureSubscription: $(serviceConnection)
loadTestConfigFile: 'config.yaml'
loadTestResource: <load-testing-resource>
resourceGroup: <load-testing-resource-group>
(可选)可以使用 env
或 secrets
属性将参数或机密传递给负载测试。
使用 publish
任务在 Azure Pipelines 工作流运行中将测试结果作为项目发布。
- publish: $(System.DefaultWorkingDirectory)/loadTest
artifact: loadTestResults
更新 GitHub Actions 工作流
更新 GitHub Actions 工作流,为 Azure 负载测试资源运行负载测试。
在 GitHub 中,浏览到存储库。
编辑 GitHub Actions 工作流或在 GitHub 存储库中创建新工作流 。
使用操作actions/checkout
通过负载测试输入文件检查存储库。
- name: Checkout
uses: actions/checkout@v3
通过 azure/login
操作使用存储的凭据向 Azure 进行身份验证。
将以下 YAML 内容粘贴到工作流定义中:
- name: Login to Azure
uses: azure/login@v1
continue-on-error: false
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
通过 azure/load-testing
操作运行负载测试。
指定之前在 loadTestConfigFile
属性中导出的负载测试配置文件。
将 <load-testing-resource>
和 <load-testing-resource-group>
文本占位符替换为 Azure 负载测试资源和资源组的名称。
- name: 'Azure Load Testing'
uses: azure/load-testing@v1
with:
loadTestConfigFile: 'config.yaml'
loadTestResource: <load-testing-resource>
resourceGroup: <load-testing-resource-group>
(可选)可以使用 env
或 secrets
属性将参数或机密传递给负载测试。
使用 actions/upload-artifact
操作在 GitHub Actions 工作流运行中将测试结果作为项目发布。
- uses: actions/upload-artifact@v2
with:
name: loadTestResults
path: ${{ github.workspace }}/loadTest
更新 CI 工作流,使用 Azure CLI 为 Azure 负载测试资源运行负载测试。 使用 CI 工具的具体信息将以下命令添加到 CI 工作流:
使用服务主体登录到 Azure 订阅。
使用前面存储的 clientId
、 clientSecret
值和 tenandId
值。
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
az account set -s $AZURE_SUBSCRIPTION_ID
使用负载测试配置 YAML 文件创建负载测试。
将<load-testing-resource>
负载<load-testing-resource-group>
<load-test-config-yaml>
测试资源的名称、资源组名称和负载测试配置 YAML 文件的文件名替换为之前添加到存储库的负载测试配置 YAML 文件的名称和文本占位符。
az load test create --load-test-resource <load-testing-resource> --resource-group <load-testing-resource-group> --test-id sample-test-id --load-test-config-file <load-test-config-yaml>
运行负载测试。
testRunId="run_"`date +"%Y%m%d%_H%M%S"`
displayName="Run"`date +"%Y/%m/%d_%H:%M:%S"`
az load test-run create --load-test-resource <load-testing-resource> --test-id sample-test-id --test-run-id $testRunId --display-name $displayName --description "Test run from CLI"
检索并显示负载测试运行的客户端指标。
az load test-run metrics list --load-test-resource <load-testing-resource> --test-run-id $testRunId --metric-namespace LoadTestRunMetrics
查看负载测试结果
从 CI/CD 管道运行负载测试时,可以直接在 CI/CD 输出日志中查看摘要结果。 如果将测试结果作为管道项目发布,还可以下载 CSV 文件进行进一步报告。
清理资源
如果你不打算使用已创建的任何资源,请删除它们,以免继续产生费用。
删除 Azure Pipelines 更改:
登录到你的 Azure DevOps 组织 (https://dev.azure.com/<your-organization>
),并选择你的项目。
将 <your-organization>
文本占位符替换为项目标识符。
如果创建了新管道:
选择“管道”,然后选择你的管道。
选择省略号,然后选择“删除”。
输入管道名称,然后选择“删除”以删除管道。
如果修改了现有工作流定义,请撤消用于运行负载测试的修改,并保存工作流。
删除服务连接:
选择“项目设置”>“服务连接”,然后选择你的服务连接。
选择“编辑”>“删除”以删除该服务连接。
删除 GitHub Actions 更改:
在 GitHub 中,浏览到存储库。
如果创建了新的工作流定义,请删除 .github/workflows
文件夹中的工作流 YAML 文件。
如果修改了现有工作流定义,请撤消用于运行负载测试的修改,并保存工作流。
删除服务主体:
az ad sp delete --id $(az ad sp show --display-name "my-load-test-cicd" -o tsv)
撤消 CI 工作流中的更改。
删除服务主体:
az ad sp delete --id $(az ad sp show --display-name "my-load-test-cicd" -o tsv)
后续步骤
请转到下一篇文章,了解如何通过定义测试失败条件和比较测试运行来识别性能回归。