在此文章
您可以藉由建立 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 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
檔案)。 若為 URL 型測試,請新增要求 JSON 檔案 (部分機器翻譯)。
任何 JMeter 使用者屬性檔案 (部分機器翻譯)。
測試計劃所使用的任何輸入資料檔案。 例如,CSV 資料檔案。
如果您有現有的負載測試,則可以直接從 Azure 入口網站下載組態設定和所有輸入檔。 執行下列步驟,在 Azure 入口網站中下載現有負載測試的輸入檔:
在 Azure 入口網站 中,移至您的 Azure 負載測試資源。
在左窗格上,選取 [測試] 以檢視負載測試清單,然後選取您的測試。
選取所使用測試回合旁的省略號 (...) ,然後選取 [下載輸入檔] 。
瀏覽器會下載包含負載測試輸入檔的 ZIP 壓縮資料夾。
使用任何 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 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
和 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 檔案的檔案名稱。
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)
下一步
請前往下一篇文章,以了解如何藉由定義測試失敗準則和比較測試回合來識別效能迴歸。