您可以藉由建立 CI/CD 管線,在 Azure 負載測試中自動執行負載測試。 在本文中,您將了解如何手動設定 GitHub Actions、Azure Pipelines 或其他 CI 工具,以叫用 Azure 負載測試中的現有測試。 請將負載測試自動化,以持續驗證應用程式在負載下的效能和穩定性。
若要將現有負載測試新增至 CI/CD 管線:
- 設定服務驗證,以允許 CI 工具連線到您的 Azure 負載測試資源。
- 將負載測試輸入檔新增至您的存放庫,例如測試指令碼和負載測試 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 Resource Manager],然後選取 [下一步]。
選取 [服務主體 (自動)] 驗證方法,然後選取 [下一步]。
輸入服務連線詳細資料,然後選取 [儲存] 以建立服務連線。
| 領域 |
價值觀 |
|
範圍層級 |
訂用帳戶。 |
|
訂閱 |
選取裝載了負載測試資源的 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 (英文) 中瀏覽您的存放庫。
選取 [設定]>[秘密和變數]>[動作]。
選取 [新增存放庫祕密],輸入秘密資訊,然後選取 [新增秘密] 以建立新的秘密。
| 領域 |
價值觀 |
|
名稱 |
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 負載測試來執行負載測試,您必須在原始檔控制存放庫中新增所有負載測試輸入檔。
如果您沒有現有的負載測試,請將下列檔案新增至原始程式碼存放庫:
- 對組態 YAML 檔案進行負載測試。 了解如何建立負載測試組態 YAML 檔案 (部分機器翻譯)。
- 測試計劃檔案。 若為 JMeter 型測試,請新增 JMeter 測試指令碼 (
JMX 檔案)。 針對 Locust 型測試,新增 Locust 測試指令碼 (.py 檔案)。 若為 URL 型測試,請新增要求 JSON 檔案 (部分機器翻譯)。
- 任何 JMeter 使用者屬性檔案 (部分機器翻譯)。
- 測試計劃所使用的任何輸入資料檔案。 例如,CSV 資料檔案。
如果您有現有的負載測試,則可以直接從 Azure 入口網站下載組態設定和所有輸入檔。 執行下列步驟,在 Azure 入口網站中下載現有負載測試的輸入檔:
在 Azure 入口網站中,移至您的 Azure 負載測試資源。
在左窗格上,選取 [測試] 以檢視負載測試清單,然後選取您的測試。
選取所使用測試回合旁的省略號 (...),然後選取 [下載輸入檔]。
瀏覽器會下載包含負載測試輸入檔的 ZIP 壓縮資料夾。
使用任何 ZIP 工具即可將輸入檔解壓縮。
這個資料夾包含下列檔案:
-
config.yaml:負載測試 YAML 組態檔。 您會在 CI/CD 工作流程定義中參考此檔案。
-
.jmx 或 .py:JMeter 或 Locust 測試指令碼
- 任何其他輸入檔,例如要執行負載測試所需的 CSV 檔案或使用者屬性檔案。
將所有解壓縮的輸入檔認可至原始檔控制存放庫。
使用在其中設定 CI/CD 管線的原始程式碼存放庫。
更新 CI/CD 工作流程定義
Azure 負載測試同時支援使用 GitHub Actions 和 Azure Pipelines 來執行負載測試。
安裝適用於 Azure DevOps 的 Azure 負載測試延伸模組
為了建立和執行負載測試,Azure Pipelines 工作流程定義會使用來自 Azure DevOps Marketplace 的 Azure 負載測試工作 (部分機器翻譯) 延伸模組。
開啟 Azure DevOps Marketplace 中的 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 和 tenantId 值。
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 檔案的檔案名稱。
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)
後續步驟
請前往下一篇文章,以了解如何藉由定義測試失敗準則和比較測試回合來識別效能迴歸。