針對任何測試執行器平行執行測試
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
執行測試來驗證程式代碼變更是維護品質的關鍵。 若要讓持續整合做法成功,您必須擁有搭配每個組建執行的良好測試套件。 不過,隨著程式碼基底成長,迴歸測試套件通常也會成長,而且執行完整迴歸測試可能需要很長的時間。 有時候,測試本身可能長時間執行 ,這通常是當您撰寫端對端測試的情況。 這可減少客戶價值可傳遞的速度,因為管線無法快速處理組建。
平行執行測試是改善 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
建立的測試結果會發佈至伺服器。
將此存放庫) ,將 (匯入 gitHub Azure Repos或Azure DevOps Server) 或分支 (:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
此 Python 範例會使用 PowerShell 腳本來配量測試。 測試是使用 pytest 執行。 接著,pytest 所建立的 JUnit 樣式測試結果會發佈至伺服器。 將此存放庫) ,將 (匯入 gitHub Azure Repos或Azure DevOps Server) 或分支 (:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
此 JavaScript 範例會使用 Bash 腳本來配量測試。 測試是使用 Mocha 執行器來執行。 接著,Mocha 所建立的 JUnit 樣式測試結果會發佈至伺服器。 將此存放庫) ,將 (匯入 gitHub Azure Repos或Azure DevOps Server) 或分支 (:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
範例程式碼包含存放庫根目錄的檔案 azure-pipelines.yml
,可用來建立管線。 請遵循 建立您的第一個管線 中的所有指示來建立管線,並查看測試配量的運作情形。
結合平行處理原則以進行大量平行測試
在管線中使用平行作業時,管線會採用多部機器平行執行每個作業。 大部分的測試執行器都提供在單一電腦上平行執行測試的功能, (通常是藉由建立多個平行) 執行的處理常式或執行緒。 這兩種類型的平行處理原則可以結合以進行大量平行測試,讓管線中的測試變得非常有效率。
說明及支援
- 請參閱 我們的疑難排解 頁面
- 取得Stack Overflow的建議,並透過開發人員社群取得支援