Tests parallel uitvoeren met behulp van de Visual Studio Test-taak
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Het uitvoeren van tests voor het valideren van wijzigingen in code is essentieel voor het handhaven van de kwaliteit. Voor een geslaagde continue integratie is het essentieel dat u een goed testpakket hebt dat wordt uitgevoerd bij elke build. Naarmate de codebasis groeit, neemt de regressietestsuite echter ook toe en kan het uitvoeren van een volledige regressietest lang duren. Soms kunnen tests zelf lang duren. Dit is meestal het geval als u end-to-end-tests schrijft. Omdat pijplijnen builds niet snel genoeg kunnen verwerken, vermindert dit de snelheid waarmee waarde voor de klant kan worden geboden.
Het parallel uitvoeren van tests is een uitstekende manier om de efficiëntie van CI/CD-pijplijnen te verbeteren. Dit kan eenvoudig worden gedaan door gebruik te maken van de extra capaciteit die door de cloud wordt aangeboden. In dit artikel wordt beschreven hoe u de Visual Studio Test-taak kunt configureren om tests parallel uit te voeren met behulp van meerdere agents.
Voorwaarde
Raak vertrouwd met de concepten van agents en taken. Als u meerdere taken parallel wilt uitvoeren, moet u meerdere agents configureren. U hebt ook voldoende parallelle taken nodig.
Segmentering testen
De Visual Studio Test-taak (versie 2) is ontworpen om naadloos te werken met parallelle taakinstellingen. Wanneer een pijplijntaak met de Visual Studio-testtaak (de 'VSTest-taak' voor het gemak) is geconfigureerd om parallel te worden uitgevoerd op meerdere agents, wordt automatisch gedetecteerd dat er meerdere agents betrokken zijn en testsegmenten worden gemaakt die parallel kunnen worden uitgevoerd op deze agents.
De taak kan worden geconfigureerd om testsegmenten te maken die voldoen aan verschillende vereisten, zoals batchverwerking op basis van het aantal tests en agents, de vorige testuitvoeringstijden of de locatie van tests in assembly's.
Deze opties worden uitgelegd in de volgende secties.
Eenvoudige segmentering op basis van het aantal tests en agents
Deze instelling maakt gebruik van een eenvoudig segmenteringsalgoritme om het aantal tests 'T' over N-agents op te delen, zodat elke agent T/N-tests uitvoert. Als uw testpakket bijvoorbeeld 1000 tests bevat en u twee agents gebruikt voor parallelle taken, voert elke agent 500 tests uit. Of u kunt de hoeveelheid tijd die nodig is om de tests nog verder uit te voeren verminderen door acht agents te gebruiken. In dat geval voert elke agent 125 tests parallel uit.
Deze optie wordt meestal gebruikt wanneer alle tests vergelijkbare uitvoeringstijden hebben. Als de testuitvoeringstijden niet vergelijkbaar zijn, worden agents mogelijk niet effectief gebruikt omdat sommige agents segmenten met verschillende langlopende tests ontvangen, terwijl andere agents segmenten met kortlopende tests kunnen ontvangen en veel eerder eindigen dan de rest van de agents.
Segmentering op basis van de afgelopen uitvoering van tests
Deze instelling beschouwt eerdere uitvoeringstijden om segmenten van tests te maken, zodat elk segment ongeveer dezelfde looptijd heeft. Kortlopende tests worden samengevoegd, terwijl langlopende tests worden toegewezen aan afzonderlijke segmenten.
Deze optie moet worden gebruikt wanneer tests binnen een assembly geen afhankelijkheden hebben en niet hoeven te worden uitgevoerd op dezelfde agent. Deze optie resulteert in het meest efficiënte gebruik van agents, omdat elke agent dezelfde hoeveelheid 'werk' krijgt en allemaal ongeveer op hetzelfde moment eindigt.
Indeling op basis van testassembly's
Deze instelling maakt gebruik van een eenvoudig segmenteringsalgoritme waarmee het aantal testassembly's (of bestanden) 'A' over N-agents wordt verdeeld, zodat elke agent tests uitvoert vanuit A/N-assembly's. Het aantal tests binnen een assembly wordt niet meegenomen bij het gebruik van deze optie. Als uw testsuite bijvoorbeeld tien testassembly's bevat en u twee agents gebruikt voor parallelle taken, ontvangt elke agent vijf testassembly's die moeten worden uitgevoerd. U kunt de hoeveelheid tijd die nodig is om de tests nog verder uit te voeren verminderen door vijf agents te gebruiken. In dat geval krijgt elke agent twee testassembly's die moeten worden uitgevoerd.
Deze optie moet worden gebruikt wanneer tests binnen een assembly afhankelijkheden hebben of gebruikmaken van AssemblyInitialize
en AssemblyCleanup
, of ClassInitialize
en ClassCleanup
methoden, om de status in uw testcode te beheren.
Tests parallel uitvoeren in klassieke build-pijplijnen
Als u een groot testpakket of langlopende integratietests hebt om uit te voeren in uw klassieke build-pijplijn, gebruikt u de volgende stappen.
Notitie
Als u de mogelijkheid voor meerdere agents in build-pijplijnen met een on-premises TFS-server wilt gebruiken, moet u TFS 2018 Update 2 of een latere versie gebruiken.
Build-taak met één agent. Bouw Visual Studio-projecten en publiceer buildartefacten met behulp van de taken die worden weergegeven in de volgende afbeelding. Hiervoor worden de standaardtaakinstellingen (één agent, geen parallelle taken) gebruikt.
Tests parallel uitvoeren met behulp van meerdere agents:
Een agenttaak toevoegen
Configureer de taak voor het gebruik van meerdere agents tegelijk. In het voorbeeld hier worden drie agents gebruikt.
Hint
Voor massaal parallelle tests kunt u zo veel als 99 agents opgeven.
Voeg een taak toe om buildartefacten te downloaden aan de opdracht. Deze stap is de koppeling tussen de buildtaak en de testtaak en is nodig om ervoor te zorgen dat de binaire bestanden die zijn gegenereerd in de build-taak beschikbaar zijn op de agents die door de testtaak worden gebruikt om tests uit te voeren. Zorg ervoor dat de taak is ingesteld om artefacten te downloaden die zijn geproduceerd door de huidige build en dat de artefactnaam hetzelfde is als de artefactnaam die wordt gebruikt in de taak Publiceer Build Artefacten binnen de buildtaak.
Voeg de Visual Studio Test--taak toe en configureer deze om de vereiste segmenteringsstrategie te gebruiken.
Taken instellen voor parallelle tests in YAML-pijplijnen
Geef de parallel
strategie op in de job
en geef aan hoeveel taken moeten worden verzonden. U kunt maximaal 99 agents opgeven om tests voor grote testsuites omhoog te schalen.
jobs:
- job: ParallelTesting
strategy:
parallel: 2
Zie YAML-schema - Taakvoor meer informatie.
Tests parallel uitvoeren in klassieke release-pijplijnen
Gebruik de volgende stappen als u een groot testpakket of langlopende functionele tests hebt om uit te voeren na het implementeren van uw toepassing. U kunt bijvoorbeeld een webtoepassing implementeren en Selenium-tests uitvoeren in een browser om de app-functionaliteit te valideren.
Notitie
Als u de mogelijkheid voor meerdere agents wilt gebruiken in releasepijplijnen met een on-premises TFS-server, moet u TFS 2017 Update 1 of een latere versie gebruiken.
App implementeren met één agent. Gebruik de Azure-implementatie: een resourcegroep maken of bijwerken of de Azure App Service-implementatietaak om een web-app te implementeren in Azure App Services. Hiervoor worden de standaardtaakinstellingen (één agent, geen parallelle taken) gebruikt.
Tests parallel uitvoeren met behulp van meerdere agents:
Een agenttaak toevoegen
Configureer de taak voor het gebruik van meerdere agents, parallel aan . In het voorbeeld hier worden drie agents gebruikt.
Hint
Voor massaal parallelle tests kunt u zo veel als 99 agents opgeven.
Voeg extra taken toe die moeten worden uitgevoerd voordat de Visual Studio-testtaak wordt uitgevoerd. Voer bijvoorbeeld een PowerShell-script uit om gegevens in te stellen die vereist zijn voor uw tests.
Hint
Taken in release-pijplijnen downloaden standaard alle artefacten die zijn gekoppeld aan de release-pijplijn. Als u tijd wilt besparen, kunt u de taak zo configureren dat alleen de testartefacten die door de taak zijn vereist, worden gedownload. Binaire web-app-bestanden zijn bijvoorbeeld niet vereist om Selenium-tests uit te voeren en het downloaden hiervan kan worden overgeslagen indien de app en de testartefacten afzonderlijk worden gepubliceerd door uw build-pijplijn.
Voeg de Visual Studio Test--taak toe en configureer deze om de vereiste segmenteringsstrategie te gebruiken.
Hint
Als visual Studio niet is geïnstalleerd op de testcomputers, kunt u de taak Visual Studio Test Platform Installer gebruiken om de vereiste versie van het testplatform te verkrijgen.
Zeer parallelle tests door parallelle pijplijntaken te combineren met parallelle testuitvoering
Wanneer parallelle taken in een pijplijn worden gebruikt, worden meerdere machines (agents) gebruikt om elke taak parallel uit te voeren. Testframeworks en hardlopers bieden ook de mogelijkheid om tests parallel uit te voeren op één computer, meestal door meerdere processen of threads te maken die parallel worden uitgevoerd. Parallellismefuncties kunnen op een gelaagde manier worden gecombineerd om massaal parallelle tests uit te voeren. In de context van de Visual Studio Test-taakkan parallellisme op de volgende manieren worden gecombineerd:
parallelisme aangeboden door test-frameworks. Alle moderne testframeworks, zoals MSTest v2, NUnit, xUnit en andere, bieden de mogelijkheid om tests parallel uit te voeren. Tests in een assembly worden doorgaans parallel uitgevoerd. Deze testframeworks werken samen met het Visual Studio Test-platform met behulp van een testadapter en het testframework. Ze functioneren samen met de bijbehorende adapter binnen een testhostproces dat door het Visual Studio Test Platform wordt gecreëerd wanneer tests worden uitgevoerd. Parallellisatie op deze laag bevindt zich daarom binnen een proces voor alle frameworks en adapters.
parallelisme aangeboden door het Visual Studio Test Platform (vstest.console.exe). Visual Studio Test Platform kan parallel testassembly's uitvoeren. Gebruikers van vstest.console.exe herkennen dit als de /parallelle switch. Dit gebeurt door een testhostproces op elke beschikbare kern te starten en de tests in een assembly uit te voeren. Dit werkt voor elk framework met een testadapter voor het Visual Studio-testplatform, omdat de parallellisatie-eenheid een testassembly of testbestand is. Dit, in combinatie met de parallelle uitvoering die wordt aangeboden door testframeworks (hierboven beschreven), biedt de maximale mate van parallelle uitvoering wanneer tests worden uitgevoerd op één agent in de pijplijn.
Parallellisme dat wordt aangeboden door de Visual Studio Test-taak (VSTest). De VSTest-taak ondersteunt het parallel uitvoeren van tests op meerdere agents (of computers). Testsegmenten worden gemaakt en elke agent voert één segment tegelijk uit. De drie verschillende segmenteringsstrategieën, in combinatie met de parallelle uitvoering die wordt aangeboden door het testplatform en testframework (zoals hierboven beschreven), resulteert dit in het volgende:
Opsplitsen op basis van het aantal tests en agenten. Eenvoudige segmentering waarbij tests worden gegroepeerd in segmenten van gelijke grootte. Een segment bevat tests van een of meer assembly's. Testuitvoering op de agent komt vervolgens overeen met het parallelisme dat hierboven beschreven is in 1 en 2.
Segmentering op basis van eerdere uitvoeringstijd. Op basis van de vorige tijdsinstellingen voor het uitvoeren van tests en het aantal beschikbare agents worden tests gegroepeerd in segmenten, zodat voor elk segment ongeveer gelijke uitvoeringstijd is vereist. Een segment bevat tests van een of meer assembly's. De uitvoering van de test op de agent voldoet aan de parallelle uitvoering zoals beschreven in 1 en 2 hierboven.
Segmentering op basis van assemblages. Een segment is een testassembly en bevat dus tests die allemaal deel uitmaken van dezelfde assembly. Uitvoering op de agent komt vervolgens overeen met het parallelisme dat hierboven in 1 en 2 wordt beschreven. 2 kan echter niet voorkomen als een agent slechts één assembly ontvangt om uit te voeren.
Help en ondersteuning
- Zie onze pagina voor probleemoplossing
- Krijg advies over Stack Overflow en krijg ondersteuning via de Ontwikkelaarscommunity