Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
執行測試以驗證程式碼變更是維持品質的關鍵。 為了使持續整合實踐成功,您必須擁有一個與每次組建一起運行的良好測試套件。 然而,隨著程式碼庫的成長,回歸測試套件也趨於成長,執行完整的回歸測試可能需要很長時間。 有時,測試本身可能會長時間運行 - 如果您編寫端到端測試,通常會出現這種情況。 這降低了交付客戶價值的速度,因為管道無法足夠快地處理構建。
平行執行測試是提高 CI/CD 管道效率的好方法。 這可以通過使用雲提供的額外容量輕鬆完成。 本文討論如何使用多個代理程式來處理作業,以平行化測試。
先決條件
熟悉 代理 和 工作的概念。 每個代理程式一次只能執行一個作業。 若要平行執行多個工作,您必須設定多個代理程式。 您也需要足夠的 平行作業。
設定平行工作
在 YAML 中指定「平行」策略,並指出應該分派多少個作業。
變數 System.JobPositionInPhase 和 System.TotalJobsInPhase 會新增至每一個工作。
jobs:
- job: ParallelTesting
strategy:
parallel: 2
小提示
您可以指定多達 99 個代理程式,以擴展大型測試套件的測試。
切片測試套件
若要平行執行測試,您必須先對測試套件進行切片 (或分割),以便每個切片都可以獨立執行。 例如,您可以使用兩個代理程式,並在每個代理程式上平行執行 500 個測試,而不是在單一代理程式上執行包含 1000 個測試的大型套件。 或者,您可以使用 8 個代理程式,並在每個代理程式上平行執行 125 個測試,以進一步減少執行測試所花費的時間量。
在工作中執行測試的步驟需要知道應該執行哪個測試配量。 變數 System.JobPositionInPhase 和 System.TotalJobsInPhase 可用於此目的:
-
System.TotalJobsInPhase表示切片總數(可以將其視為「totalSlices」) -
System.JobPositionInPhase識別特定切片(您可以將其視為“sliceNum”)
如果您將所有測試檔案表示為單一維度陣列,則每個工作都可以執行索引為 [sliceNum + totalSlices] 的測試檔案,直到所有測試檔案都執行完為止。 例如,如果您有六個測試檔案和兩個平行工作,則第一個工作 (slice0) 將執行編號為 0、2 和 4 的測試檔案,而第二個工作 (slice1) 將執行編號為 1、3 和 5 的測試檔案。
如果您改用三個平行工作,第一個工作 (slice0) 將執行編號為 0 和 3 的測試檔案,第二個工作 (slice1) 將執行編號為 1 和 4 的測試檔案,而第三個工作 (slice2) 將執行編號為 2 和 5 的測試檔案。
範例程式碼
此 .NET Core 範例會使用 --list-tests 和 --filter 參數 dotnet test 來分割測試。
測試是使用 NUnit 執行。 然後,測試任務所建立的 DotNetCoreCLI@2 測試結果會發佈至伺服器。
匯入 (Azure Repos 或 Azure DevOps Server) 或分支 (至 GitHub) 此存放庫:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
此 Python 範例會使用 PowerShell 腳本來分割測試。 測試是使用 pytest 執行的。 然後,pytest 建立的 JUnit 樣式測試結果會發佈到伺服器上。 匯入 (Azure Repos 或 Azure DevOps Server) 或分支 (至 GitHub) 此存放庫:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
此 JavaScript 範例會使用 bash 指令碼來分割測試。 測試是使用 mocha 執行器來執行。 然後,mocha 建立的 JUnit 樣式測試結果會發佈到伺服器。 匯入 (Azure Repos 或 Azure DevOps Server) 或分支 (至 GitHub) 此存放庫:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
範例程式碼包含存放庫根目錄的檔案 azure-pipelines.yml ,可用來建立管線。 請遵循 建立第一個管線 中的所有指示來建立管線,並查看測試切片的運作方式。
結合並行性進行大規模並行測試
在管線中使用平行作業時,管線會使用多部機器來平行執行每個作業。 大部分的測試執行器都提供在單一電腦上平行執行測試的功能 (通常是透過建立平行執行的多個進程或執行緒) 。 這兩種類型的並行性可以組合起來進行大規模並行測試,這使得管道中的測試非常高效。
幫助與支援
- 請參閱我們的 故障排除 頁面
- 取得 Stack Overflow 的建議,並透過開發人員社群取得支援