Sdílet prostřednictvím


Paralelní spouštění testů pro libovolný test runner

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Spouštění testů pro ověření změn v kódu je klíčem k udržení kvality. Pro úspěch kontinuální integrace je nezbytné mít dobrou testovací sadu, která se spouští s každým buildem. S růstem základu kódu ale roste i sada regresních testů a spuštění úplného regresního testu může trvat dlouhou dobu. Někdy můžou být samotné testy dlouhotrvající – obvykle k tomu dochází v případě, že píšete kompletní testy. Tím se snižuje rychlost, s jakou je možné doručovat hodnotu pro zákazníka, protože kanály nemůžou zpracovávat sestavení dostatečně rychle.

Paralelní spouštění testů je skvělý způsob, jak zlepšit efektivitu kanálů CI/CD. To lze snadno provést využitím další kapacity, kterou nabízí cloud. Tento článek popisuje, jak můžete paralelizovat testy pomocí více agentů ke zpracování úloh.

Předpoklad

Seznamte se s koncepty agentů a úloh. Každý agent může najednou spustit jenom jednu úlohu. Pokud chcete paralelně spouštět více úloh, musíte nakonfigurovat více agentů. Potřebujete také dostatek paralelních úloh.

Nastavení paralelních úloh

Zadejte v YAML "paralelní" strategii a určete, kolik úloh se má odeslat. Proměnné System.JobPositionInPhase a System.TotalJobsInPhase se přidají do každé úlohy.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Tip

Můžete zadat až 99 agentů pro vertikální navýšení kapacity testování pro velké testovací sady.

Dělení testovací sady

Pokud chcete testy spouštět paralelně, musíte nejprve vytvořit průřez (nebo oddíl) testovací sady, aby bylo možné jednotlivé řezy spustit nezávisle. Například místo spouštění velké sady 1000 testů na jednom agentu můžete použít dva agenty a spustit paralelně 500 testů na každém agentu. Nebo můžete zkrátit dobu, kterou je potřeba k dalšímu spuštění testů, a to použitím 8 agentů a spuštěním 125 testů paralelně na každém agentu.

Krok, který spouští testy v úloze, musí vědět, který testovací řez se má spustit. System.JobPositionInPhase Proměnné a System.TotalJobsInPhase se dají použít k tomuto účelu:

  • System.TotalJobsInPhase označuje celkový počet řezů (můžete si ho představit jako "totalSlices").
  • System.JobPositionInPhase identifikuje konkrétní řez (můžete si ho představit jako "sliceNum").

Pokud představujete všechny testovací soubory jako jednorozměrné pole, může každá úloha spustit testovací soubor indexovaný na [sliceNum + totalSlices], dokud se nespustí všechny testovací soubory. Pokud máte například šest testovacích souborů a dvě paralelní úlohy, spustí první úloha (řez0) testovací soubory s číslem 0, 2 a 4 a druhá úloha (řez1) spustí testovací soubory s číslem 1, 3 a 5.

6 testů ve 2 řezech

Pokud místo toho použijete tři paralelní úlohy, první úloha (řez0) spustí testovací soubory s čísly 0 a 3, druhá úloha (řez1) spustí testovací soubory s číslem 1 a 4 a třetí úloha (řez2) spustí testovací soubory číslování 2 a 5.

6 testů ve 3 řezech

Ukázka kódu

Tato ukázka .NET Core používá --list-tests k průřezu dotnet test testů parametry a --filter . Testy se spouští pomocí NUnit. Výsledky testů vytvořené testovací úlohou DotNetCoreCLI@2 se pak publikují na server. Naimportujte (do Azure Repos nebo Azure DevOps Server) nebo forku (do GitHubu) toto úložiště:

https://github.com/idubnori/ParallelTestingSample-dotnet-core

Tato ukázka Pythonu používá k průřezu testů skript PowerShellu. Testy se spouští pomocí pytestu. Výsledky testů ve stylu JUnit vytvořené nástrojem pytest se pak publikují na serveru. Naimportujte (do Azure Repos nebo Azure DevOps Server) nebo forku (do GitHubu) toto úložiště:

https://github.com/PBoraMSFT/ParallelTestingSample-Python

Tato ukázka JavaScriptu používá k průřezu testů skript Bash. Testy se spouští pomocí nástroje mocha runner. Výsledky testů ve stylu JUnit vytvořené nástrojem mocha se pak publikují na serveru. Naimportujte (do Azure Repos nebo Azure DevOps Server) nebo forku (do GitHubu) toto úložiště:

https://github.com/PBoraMSFT/ParallelTestingSample-Mocha

Ukázkový kód obsahuje soubor azure-pipelines.yml v kořenovém adresáři úložiště, který můžete použít k vytvoření kanálu. Podle pokynů v tématu Vytvoření prvního kanálu vytvořte kanál a podívejte se na testovací řezy v akci.

Kombinování paralelismu pro masivní paralelní testování

Když se v kanálu používají paralelní úlohy, kanál využívá k paralelnímu spuštění každé úlohy několik počítačů. Většina běžců testů poskytuje možnost paralelně spouštět testy na jednom počítači (obvykle vytvořením více procesů nebo vláken, které běží paralelně). Tyto dva typy paralelismu je možné kombinovat pro hromadně paralelní testování, díky čemuž je testování v kanálech mimořádně efektivní.

Nápověda a podpora