Dela via


Köra tester parallellt för alla testkörare

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

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 göras enkelt genom att använda den ytterligare kapacitet som erbjuds av molnet. I den här artikeln beskrivs hur du kan parallellisera tester med hjälp av flera agenter för att bearbeta jobb.

Förutsättningar

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/Råd

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.

Steget 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 ett visst segment (du kan se det som "sliceNum")

Om du representerar alla testfiler som en endimensionell matris kan varje jobb köra en testfil indexerad på [sliceNum + totalSlices], tills alla testfiler körs. Om du till exempel har sex testfiler och två parallella jobb körs testfilerna 0, 2 och 4, och det andra jobbet (segment1) kör testfilerna 1, 3 och 5.

6 tester i 2 sektorer

Om du använder tre parallella jobb i stället kör det första jobbet (segment0) 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.

6 tester i 3 sektorer

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 på 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. JUnit-testresultat 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 dela ut testerna. Testerna körs med 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 stöd