共用方式為


針對任何測試執行器平行執行測試

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

執行測試以驗證程式碼變更是維持品質的關鍵。 為了使持續整合實踐成功,您必須擁有一個與每次組建一起運行的良好測試套件。 然而,隨著程式碼庫的成長,回歸測試套件也趨於成長,執行完整的回歸測試可能需要很長時間。 有時,測試本身可能會長時間運行 - 如果您編寫端到端測試,通常會出現這種情況。 這降低了交付客戶價值的速度,因為管道無法足夠快地處理構建。

平行執行測試是提高 CI/CD 管道效率的好方法。 這可以通過使用雲提供的額外容量輕鬆完成。 本文討論如何使用多個代理程式來處理作業,以平行化測試。

先決條件

熟悉 代理工作的概念。 每個代理程式一次只能執行一個作業。 若要平行執行多個工作,您必須設定多個代理程式。 您也需要足夠的 平行作業

設定平行工作

在 YAML 中指定「平行」策略,並指出應該分派多少個作業。 變數 System.JobPositionInPhaseSystem.TotalJobsInPhase 會新增至每一個工作。

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

小提示

您可以指定多達 99 個代理程式,以擴展大型測試套件的測試。

切片測試套件

若要平行執行測試,您必須先對測試套件進行切片 (或分割),以便每個切片都可以獨立執行。 例如,您可以使用兩個代理程式,並在每個代理程式上平行執行 500 個測試,而不是在單一代理程式上執行包含 1000 個測試的大型套件。 或者,您可以使用 8 個代理程式,並在每個代理程式上平行執行 125 個測試,以進一步減少執行測試所花費的時間量。

在工作中執行測試的步驟需要知道應該執行哪個測試配量。 變數 System.JobPositionInPhaseSystem.TotalJobsInPhase 可用於此目的:

  • System.TotalJobsInPhase 表示切片總數(可以將其視為「totalSlices」)
  • System.JobPositionInPhase 識別特定切片(您可以將其視為“sliceNum”)

如果您將所有測試檔案表示為單一維度陣列,則每個工作都可以執行索引為 [sliceNum + totalSlices] 的測試檔案,直到所有測試檔案都執行完為止。 例如,如果您有六個測試檔案和兩個平行工作,則第一個工作 (slice0) 將執行編號為 0、2 和 4 的測試檔案,而第二個工作 (slice1) 將執行編號為 1、3 和 5 的測試檔案。

6 片 2 次測試

如果您改用三個平行工作,第一個工作 (slice0) 將執行編號為 0 和 3 的測試檔案,第二個工作 (slice1) 將執行編號為 1 和 4 的測試檔案,而第三個工作 (slice2) 將執行編號為 2 和 5 的測試檔案。

6 片 3 次測試

範例程式碼

此 .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 ,可用來建立管線。 請遵循 建立第一個管線 中的所有指示來建立管線,並查看測試切片的運作方式。

結合並行性進行大規模並行測試

在管線中使用平行作業時,管線會使用多部機器來平行執行每個作業。 大部分的測試執行器都提供在單一電腦上平行執行測試的功能 (通常是透過建立平行執行的多個進程或執行緒) 。 這兩種類型的並行性可以組合起來進行大規模並行測試,這使得管道中的測試非常高效。

幫助與支援