Köra tester parallellt för alla testkörare
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Att köra tester för att verifiera kodändringar är nyckeln till att upprätthålla kvaliteten. För att den kontinuerliga integreringen ska lyckas är det viktigt att du har en bra testsvit som körs med varje version. Men när kodbasen växer tenderar regressionstestsviten att växa och det kan ta lång tid att köra ett fullständigt regressionstest. Ibland kan själva testerna vara tidskrävande – detta är vanligtvis fallet om du skriver tester från slutpunkt till slutpunkt. Detta minskar hastigheten med vilken kundvärdet kan levereras eftersom pipelines inte kan bearbeta byggen tillräckligt snabbt.
Att köra tester parallellt är ett bra sätt att förbättra effektiviteten i CI/CD-pipelines. Detta kan enkelt göras genom att använda den ytterligare kapacitet som erbjuds av molnet. Den här artikeln beskriver hur du kan parallellisera tester med hjälp av flera agenter för att bearbeta jobb.
Förhandskrav
Bekanta dig med begreppen agenter och jobb. Varje agent kan bara köra ett jobb i taget. Om du vill köra flera jobb parallellt måste du konfigurera flera agenter. Du behöver också tillräckligt med parallella jobb.
Konfigurera parallella jobb
Ange en "parallell" strategi i YAML och ange hur många jobb som ska skickas.
Variablerna System.JobPositionInPhase
och System.TotalJobsInPhase
läggs till i varje jobb.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Tips
Du kan ange så många som 99 agenter för att skala upp testningen för stora testpaket.
Segmentera testsviten
Om du vill köra tester parallellt måste du först segmentera (eller partitionera) testpaketet så att varje sektor kan köras oberoende av varandra. I stället för att till exempel köra en stor uppsättning med 1 000 tester på en enda agent kan du använda två agenter och köra 500 tester parallellt på varje agent. Eller så kan du minska den tid det tar att köra testerna ytterligare genom att använda 8 agenter och köra 125 tester parallellt på varje agent.
Det steg som kör testerna i ett jobb måste veta vilken testsektor som ska köras. Variablerna System.JobPositionInPhase
och System.TotalJobsInPhase
kan användas för detta ändamål:
-
System.TotalJobsInPhase
anger det totala antalet sektorer (du kan se det som "totalSlices") -
System.JobPositionInPhase
identifierar en viss sektor (du kan se det som "sliceNum")
Om du representerar alla testfiler som en endimensionell matris kan varje jobb köra en testfil indexerad vid [sliceNum + totalSlices] tills alla testfiler körs. Om du till exempel har sex testfiler och två parallella jobb körs det första jobbet (segment0) testfilerna numrerade 0, 2 och 4, och det andra jobbet (segment1) kör testfilerna 1, 3 och 5.
Om du använder tre parallella jobb i stället kör det första jobbet (slice0) testfilerna numrerade 0 och 3, det andra jobbet (segment1) kör testfilerna numrerade 1 och 4 och det tredje jobbet (segment2) kör testfilerna numrerade 2 och 5.
Exempelkod
Det här .NET Core-exemplet använder --list-tests
och --filter
parametrar för dotnet test
för att segmentera testerna.
Testerna körs med NUnit. Testresultat som skapats av DotNetCoreCLI@2
testaktiviteten publiceras sedan till servern.
Importera (till Azure Repos eller Azure DevOps Server) eller förgrena (till GitHub) den här lagringsplatsen:
https://github.com/idubnori/ParallelTestingSample-dotnet-core
Det här Python-exemplet använder ett PowerShell-skript för att segmentera testerna. Testerna körs med pytest. Testresultat i JUnit-stil som skapats av pytest publiceras sedan till servern. Importera (till Azure Repos eller Azure DevOps Server) eller förgrena (till GitHub) den här lagringsplatsen:
https://github.com/PBoraMSFT/ParallelTestingSample-Python
Det här JavaScript-exemplet använder ett bash-skript för att segmentera testerna. Testerna körs med hjälp av mocha-löparen. JUnit-testresultat som skapats av mocha publiceras sedan till servern. Importera (till Azure Repos eller Azure DevOps Server) eller förgrena (till GitHub) den här lagringsplatsen:
https://github.com/PBoraMSFT/ParallelTestingSample-Mocha
Exempelkoden innehåller en fil azure-pipelines.yml
i roten på lagringsplatsen som du kan använda för att skapa en pipeline. Följ alla instruktioner i Skapa din första pipeline för att skapa en pipeline och se testslicering i praktiken.
Kombinera parallellitet för massivt parallell testning
När parallella jobb används i en pipeline använder pipelinen flera datorer för att köra varje jobb parallellt. De flesta testkörare har möjlighet att köra tester parallellt på en enda dator (vanligtvis genom att skapa flera processer eller trådar som körs parallellt). De två typerna av parallellitet kan kombineras för massivt parallell testning, vilket gör testning i pipelines extremt effektiv.
Hjälp och support
- Se vår felsökningssida
- Få råd om Stack Overflow och få support via utvecklarcommunityn