Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 ta lång tid att köra – detta är vanligtvis fallet om du skriver end-to-end-tester. 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 konfigurera Visual Studio-testuppgiften att köra tester parallellt med hjälp av flera agenter.
Förutsättningar
Sätt dig in i begreppen agenter och jobb. Om du vill köra flera jobb parallellt måste du konfigurera flera agenter. Du behöver också tillräckligt med parallella jobb.
Test-slicering
Visual Studio-testaktiviteten (version 2) är utformad för att fungera sömlöst med parallella jobbinställningar. När ett pipelinejobb som innehåller Visual Studio-testaktiviteten (kallas "VSTest-uppgift" för enkelhetens skull) är konfigurerat att köras på flera agenter parallellt, identifierar det automatiskt att flera agenter är inblandade och skapar testsektorer som kan köras parallellt mellan dessa agenter.
Uppgiften kan konfigureras för att skapa testsektorer som passar olika krav, till exempel batchbearbetning baserat på antalet tester och agenter, tidigare testkörningstider eller platsen för tester i sammansättningar.
De här alternativen beskrivs i följande avsnitt.
Enkel segmentering baserat på antalet tester och agenter
Den här inställningen använder en enkel segmenteringsalgoritm för att dela upp antalet test "T" mellan N-agenter så att varje agent kör T/N-tester. Om testpaketet till exempel innehåller 1 000 tester och du använder två agenter för parallella jobb, kommer varje agent att köra 500 tester. Eller så kan du minska den tid det tar att köra testerna ytterligare med hjälp av åtta agenter, vilket innebär att varje agent kör 125 tester parallellt.
Det här alternativet används vanligtvis när alla tester har liknande körningstider. Om testkörningstiderna inte liknar varandra kanske agenterna inte används effektivt eftersom vissa agenter kan få delar med flera långvariga tester, medan andra agenter kan få delar med kortvariga tester och bli klara mycket tidigare än resten av agenterna.
Segmentering baserat på tidigare körtid för tester
Den här inställningen tar hänsyn till tidigare körningstider för att skapa testsektorer så att varje sektor har ungefär samma körningstid. Kortvariga tester grupperas tillsammans, medan långvariga tester fördelas på separata delar.
Det här alternativet bör användas när tester inom en sammansättning inte har beroenden och inte behöver köras på samma agent. Det här alternativet resulterar i den mest effektiva användningen av agenter eftersom varje agent får samma mängd "arbete" och alla slutförs ungefär samtidigt.
Segmentering baserat på testmonteringar
Den här inställningen använder en enkel segmenteringsalgoritm som delar upp antalet testsammansättningar (eller filer) "A" mellan N-agenter, så att varje agent kör tester från A/N-sammansättningar. Antalet tester i en sammansättning beaktas inte när du använder det här alternativet. Om testpaketet till exempel innehåller tio testsammansättningar och du använder två agenter för parallella jobb, får varje agent fem testsammansättningar som ska köras. Du kan minska den tid det tar att köra testerna ytterligare med hjälp av fem agenter, vilket innebär att varje agent får två testsammansättningar att köra.
Det här alternativet bör användas när tester inom en sammansättning har beroenden eller använder AssemblyInitialize och AssemblyCleanup, eller ClassInitialize och ClassCleanup metoder för att hantera tillstånd i testkoden.
Kör tester parallellt i klassiska byggningspipelines
Om du har en stor testsvit eller långvariga integreringstester som ska köras i den klassiska bygg-pipelinen använder du följande steg.
Anmärkning
Om du vill använda multiagentfunktionen i byggpipelines med lokal TFS-server måste du använda TFS 2018 Update 2 eller en senare version.
Byggjobb med hjälp av en enda agent. Skapa Visual Studio-projekt och publicera byggartefakter med hjälp av de uppgifter som visas i följande bild. Detta använder standardinställningarna för jobb (enskild agent, inga parallella jobb).
Köra tester parallellt med flera agenter:
Lägg till en -agentuppgift
Konfigurera jobbet så att det använder flera agenter parallellt. Exemplet här använder tre agenter.
Tips
För massivt parallell testning kan du ange så många som 99 agenter.
Lägg till en Hämta byggartefakter uppgift i jobbet. Det här steget är länken mellan byggjobbet och testjobbet och är nödvändigt för att säkerställa att binärfilerna som genereras i byggjobbet är tillgängliga på de agenter som används av testjobbet för att köra tester. Kontrollera att uppgiften är inställd på att ladda ned artefakter som skapats av den aktuella versionen och att artefaktnamnet är samma som artefaktnamnet som används i Publicera byggartefakter uppgift i byggjobbet.
Lägg till uppgiften Visual Studio Test och konfigurera den så att den använder den segmenteringsstrategi som krävs.
Ställa in jobb för parallell testning i YAML-pipelines
Ange parallel strategi i job och ange hur många jobb som ska skickas. Du kan ange så många som 99 agenter för att skala upp testningen för stora testpaket.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Mer information finns i YAML-schema – Jobb.
Kör tester parallellt i klassiska releasepipelines
Använd följande steg om du har en stor testsvit eller tidskrävande funktionella tester som ska köras efter att programmet har distribuerats. Du kanske till exempel vill distribuera ett webbprogram och köra Selenium-tester i en webbläsare för att verifiera appfunktionen.
Anmärkning
Om du vill använda multiagentfunktionen i versionspipelines med lokal TFS-server måste du använda TFS 2017 Update 1 eller en senare version.
Distribuera appen med en enda agent. Använd azure-distributionen: Skapa eller uppdatera resursgruppen eller Azure App Service Deploy-uppgiften för att distribuera en webbapp till Azure App Services. Detta använder standardinställningarna för jobb (enskild agent, inga parallella jobb).
Köra tester parallellt med flera agenter:
Lägg till en -agentuppgift
Konfigurera jobbet så att det använder flera agenter parallellt. Exemplet här använder tre agenter.
Tips
För massivt parallell testning kan du ange så många som 99 agenter.
Lägg till eventuella ytterligare uppgifter som måste köras innan Visual Studio-testaktiviteten körs. Kör till exempel ett PowerShell-skript för att konfigurera data som krävs av dina tester.
Tips
Jobb i versionspipelines laddar ned alla artefakter som är länkade till versionspipelinen som standard. För att spara tid kan du konfigurera jobbet så att det bara hämtar de testartefakter som krävs av jobbet. Till exempel krävs inte webbapplikationers binärfiler för att köra Selenium-tester och kan nedladdningen av dessa hoppas över om appen och testartefakter publiceras separat av din byggpipeline.
Lägg till uppgiften Visual Studio Test och konfigurera den så att den använder den segmenteringsstrategi som krävs.
Tips
Om testdatorerna inte har Visual Studio installerat kan du använda uppgiften Visual Studio Test Platform Installer för att hämta den version av testplattformen som krävs.
Massivt parallelliserad testning genom att kombinera parallella pipelinejobb med parallellt testutförande
När parallella jobb används i en pipeline används flera datorer (agenter) för att köra varje jobb parallellt. Testramverk och löpare ger också möjlighet att köra tester parallellt på en enda dator, vanligtvis genom att skapa flera processer eller trådar som körs parallellt. Parallellitetsfunktioner kan kombineras på ett skiktat sätt för att uppnå massivt parallell testning. I samband med Visual Studio-testuppgiftenkan parallellitet kombineras på följande sätt:
Parallellitet som erbjuds av testramverk. Alla moderna testramverk som MSTest v2, NUnit, xUnit och andra ger möjlighet att köra tester parallellt. Vanligtvis körs tester i en sammansättning parallellt. Dessa testramverk interagerar med Visual Studio-testplattformen med hjälp av en testadapter, och testramverket tillsammans med motsvarande adapter fungerar inom en testvärdmiljö som Visual Studio Test Platform skapar när tester körs. Därför är parallellisering på det här lagret i en process för alla ramverk och adaptrar.
Parallellitet som erbjuds av Visual Studio Test Platform (vstest.console.exe). Visual Studio Test Platform kan köra testsammansättningar parallellt. Användare av vstest.console.exe identifierar detta som /parallell växel. Det gör detta genom att starta en värdprocess för tester på varje tillgänglig kärna och tilldela den tester i en assembly att köra. Detta fungerar för alla ramverk som har en testadapter för Visual Studio-testplattformen, eftersom enheten för parallellisering är en testassemblage eller testfil. Detta i kombination med den parallellitet som erbjuds av testramverk (beskrivs ovan) ger maximal grad av parallellisering när tester körs på en enda agent i pipelinen.
Parallelism som erbjuds av Visual Studio Test (VSTest)-aktiviteten. VSTest-uppgiften stöder parallellkörning av tester mellan flera agenter (eller datorer). Testsektorer skapas och varje agent kör en sektor i taget. De tre olika segmenteringsstrategierna, i kombination med den parallellitet som erbjuds av testplattformen och testramverket (enligt beskrivningen ovan), resulterar i följande:
Segmentering baserat på antalet tester och agenter. Enkel skivning där tester grupperas i lika stora delar. Ett segment innehåller tester från en eller flera sammansättningar. Testkörningen på agenten följer sedan den parallellism som beskrivs i 1 och 2 ovan.
Indelning baserat på tidigare körtid. Baserat på tidigare tider för att köra tester och antalet tillgängliga agenter delas testerna upp i delar så att varje del kräver ungefär lika mycket exekveringstid. Ett segment innehåller tester från en eller flera sammansättningar. Testkörningen på agenten följer sedan den parallellism som beskrivs i 1 och 2 ovan.
Segmentering baserat på sammansättningar. En del är en testsammansättning och innehåller därför tester som alla hör till samma sammansättning. Körning på agenten följer sedan den parallellitet som beskrivs i 1 och 2 ovan. Men 2 kanske inte inträffar om en agent bara tar emot en sammansättning som ska köras.
Hjälp och stöd
- Se vår felsökningssida
- Få råd om Stack Overflow och få support via utvecklarcommunityn