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.
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.
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
- Podívejte se na naši stránku pro řešení potíží.
- Získejte rady ke službě Stack Overflow a získejte podporu prostřednictvím Developer Community