Sdílet prostřednictvím


Paralelní spouštění testů pomocí úlohy Visual Studio Test

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

Spouštění testů pro ověření změn v kódu je klíčem k zachování kvality. Aby byla kontinuální integrace úspěšná, je nezbytné mít dobrou testovací sadu, která se spouští s každým sestavením. S růstem základu kódu ale sada regresních testů obvykle roste 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 se jedná o případ, kdy píšete kompletní testy. Tím se sníží rychlost, s jakou může být doručena hodnota zákazníka, protože pipeliny nemůžou dostatečně rychle zpracovávat sestavení.

Paralelní spouštění testů představuje skvělý způsob, jak zlepšit efektivitu kanálů CI/CD. To lze snadno provést použitím další kapacity nabízené cloudem. Tento článek popisuje, jak nakonfigurovat úlohu Visual Studio Test tak, aby spouštěla testy paralelně pomocí více agentů.

Předpoklad

Seznamte se s koncepty agentů a úloh. Pokud chcete paralelně spouštět více úloh, musíte nakonfigurovat více agentů. Potřebujete také dostatek paralelních úloh.

Dělení testů

Úloha Visual Studio Test (verze 2) je navržená tak, aby bez problémů fungovala s nastavením paralelní úlohy. Pokud je úloha kanálu, která obsahuje úlohu Visual Studio Test (označovanou jako "úloha VSTest", pro zjednodušení) nakonfigurovaná tak, aby běžela paralelně na více agentech, automaticky zjistí, že je zapojeno více agentů, a vytvoří testovací řezy, které se dají paralelně spouštět napříč těmito agenty.

Úkol lze nakonfigurovat tak, aby vytvořil testovací části tak, aby vyhověly různým požadavkům, jako je dávkování na základě počtu testů a agentů, předchozích dob běhu testů nebo umístění testů v modulech.

Možnosti dávkování

Tyto možnosti jsou vysvětleny v následujících částech.

Jednoduché vytváření řezů na základě počtu testů a agentů

Toto nastavení používá jednoduchý algoritmus řezů k rozdělení počtu testů T napříč agenty N tak, aby každý agent spustil testy T/N. Pokud například sada testů obsahuje 1 000 testů a pro paralelní úlohy použijete dva agenty, každý agent spustí 500 testů. Nebo můžete zkrátit dobu potřebnou k dalšímu spuštění testů pomocí osmi agentů, v takovém případě každý agent spouští paralelně 125 testů.

Tato možnost se obvykle používá, když mají všechny testy podobné doby běhu. Pokud doby trvání testů nejsou podobné, agenti nemusí být efektivně využíváni, protože někteří z nich můžou přijmout části s několika dlouhotrvajícími testy, zatímco jiní mohou přijmout úseky s krátkými testy a dokončit úkoly mnohem dříve než ostatní.

Řezání na základě historického času běhu testů

Toto nastavení bere v úvahu minulé časy spuštění za účelem vytvoření sekcí testů tak, aby každá sekce měla přibližně stejný čas spuštění. Krátkodobé testy budou seskupeny, zatímco dlouhotrvající testy se přidělí samostatným skupinám.

Tato možnost by se měla použít, když testy v sestavení nemají závislosti a nemusí běžet na stejném agentu. Výsledkem této možnosti je nejúčinnější využití agentů, protože každý agent získá stejné množství "práce" a všechny se dokončí přibližně ve stejnou dobu.

Řezání na základě testovacích sestavení

Toto nastavení používá jednoduchý algoritmus řezů, který rozdělí počet testovacích sestavení (nebo souborů) "A" mezi agenty N, aby každý agent spustil testy ze sestavení A/N. Při použití této možnosti není zohledněn počet testů v rámci sestavení. Pokud například sada testů obsahuje deset testovacích sestavení a pro paralelní úlohy použijete dva agenty, každý agent obdrží pět testovacích sestavení ke spuštění. Můžete snížit dobu potřebnou k dalšímu spuštění testů pomocí pěti agentů, v takovém případě každý agent získá ke spuštění dvě testovací sestavení.

Tuto možnost byste měli použít, když testy v sestavení mají závislosti nebo využívají metody AssemblyInitialize a AssemblyCleanup, nebo ClassInitialize a ClassCleanup ke správě stavu ve vašem testovacím kódu.

Spusťte testy paralelně v klasických buildových potrubích

Pokud máte velkou sadu testů nebo dlouhotrvající integrační testy ke spuštění v klasickém kanálu buildu, postupujte následovně.

Poznámka:

Pokud chcete používat funkci více agentů v kanálech buildů s místním serverem TFS, musíte použít TFS 2018 Update 2 nebo novější verzi.

  1. Sestavení úlohy pomocí jednoho agenta Sestavte projekty sady Visual Studio a publikujte artefakty sestavení pomocí úloh zobrazených na následujícím obrázku. Používá se výchozí nastavení úlohy (jeden agent, žádné paralelní úlohy).

    buildJobSingleAgent

  2. Paralelní spouštění testů pomocí několika agentů:

    • Přidání úlohy agenta

      AddAgentJobBuild

    • Nakonfigurujte úlohu tak, aby paralelně používala více agentů. V tomto příkladu se používají tři agenti.

      ParallelTestJobBuild

      Návod

      Pro masivní paralelní testování můžete zadat až 99 agentů.

    • Přidejte do úlohy úkon Stáhnout artefakty sestavení. Tento krok je propojením mezi úlohou sestavení a testovací úlohou a je nezbytné zajistit, aby binární soubory generované v úloze sestavení byly k dispozici na agentech používaných testovací úlohou ke spouštění testů. Ujistěte se, že je úloha nastavená na stahování artefaktů vytvořených aktuálním sestavením a název artefaktu je stejný jako název artefaktu použitý v úloze Publikovat artefakty sestavení v úloze sestavení.

      DownloadBuildArtifacts

    • Přidejte úlohu Visual Studio Test a nakonfigurujte ji tak, aby používala požadovanou strategii řezů.

Nastavení úloh pro paralelní testování v kanálech YAML

parallel Zadejte strategii v poli job a určete, kolik úloh má být odesláno. Můžete zadat až 99 agentů pro zvýšení kapacity testování rozsáhlých testovacích sad.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

Další informace najdete ve schématu YAML – úloha.

Spouštění testů paralelně v klasických uvolňovacích kanálech

Pokud máte velkou sadu testů nebo dlouhotrvající funkční testy ke spuštění po nasazení aplikace, postupujte následovně. Můžete například chtít nasadit webovou aplikaci a spustit testy Selenium v prohlížeči, abyste ověřili funkčnost aplikace.

Poznámka:

Pokud chcete používat funkcionalitu s více agenty v kanálech verzí s místním serverem TFS, musíte použít TFS 2017 Update 1 nebo novější verzi.

  1. Nasaďte aplikaci pomocí jednoho agenta. Použijte úlohu pro nasazení Azure: Vytvořit nebo aktualizovat skupinu prostředků, nebo úlohu Azure App Service Deploy k nasazení webové aplikace do Azure App Services. Používá se výchozí nastavení úlohy (jeden agent, žádné paralelní úlohy).

    DeployApp1Agent

  2. Paralelní spouštění testů pomocí několika agentů:

    • Přidání úlohy agenta

      AddAgentJobRM

    • Nakonfigurujte úlohu tak, aby paralelně používala více agentů. V tomto příkladu se používají tři agenti.

      ParallelTestJobRM

      Návod

      Pro masivní paralelní testování můžete zadat až 99 agentů.

    • Přidejte všechny další úlohy , které se musí spustit před spuštěním testovací úlohy sady Visual Studio. Například spuštěním skriptu PowerShellu nastavte všechna data, která vaše testy vyžadují.

      Návod

      Úlohy v releasovacím pipeline ve výchozím nastavení stahují všechny artefakty spojené s releasovacím pipeline. Pokud chcete ušetřit čas, můžete úlohu nakonfigurovat tak, aby stáhla pouze testovací artefakty vyžadované úlohou. Například binární soubory webové aplikace nejsou nutné ke spuštění testů Selenium a jejich stažení se dá přeskočit, pokud se aplikace a testovací artefakty publikují zvlášť kanálem buildu.

    • Přidejte úlohu Visual Studio Test a nakonfigurujte ji tak, aby používala požadovanou strategii řezů.

      Návod

      Pokud testovací počítače nemají nainstalovanou sadu Visual Studio, můžete k získání požadované verze testovací platformy použít úlohu Instalační program testovací platformy sady Visual Studio .

Masivní paralelní testování, které kombinuje paralelní úlohy kanálů s paralelním prováděním testů

Když se v potrubí používají paralelní úlohy, několik počítačů (agentů) se využívá k paralelnímu spuštění každé úlohy. Testovací architektury a spouštěče také poskytují 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ě. Funkce paralelismu je možné kombinovat vrstveným způsobem, aby se dosáhlo masivního paralelního testování. V kontextu úlohy Visual Studio Test lze paralelismus kombinovat následujícími způsoby:

  1. Paralelismus nabízený testovacími architekturami Všechny moderní testovací architektury, jako jsou MSTest v2, NUnit, xUnit a další, poskytují možnost paralelně spouštět testy. Testy v sestavení se obvykle spouští paralelně. Tyto testovací rámce komunikují s platformou Visual Studio Test pomocí testovacího adaptéru a testovacího frameworku, spolu s odpovídajícím adaptérem, a pracují v rámci procesu testovacího hostitele, který platforma Visual Studio Test vytvoří při spuštění testů. Proto paralelizace v této vrstvě probíhá pro všechny architektury a adaptéry.

  2. Paralelismus nabízený testovací platformou sady Visual Studio (vstest.console.exe). Visual Studio Test Platform může paralelně spouštět testovací sestavení. Uživatelé systému vstest.console.exe to poznají jako /paralelní přepínač. Provede to spuštěním hostitelského procesu testu na každém dostupném jádru a předáním testů v rámci sestavení ke spuštění. To funguje pro libovolnou architekturu, která má testovací adaptér pro testovací platformu sady Visual Studio, protože jednotkou paralelizace je testovací sestavení nebo testovací soubor. Toto, v kombinaci s paralelismem nabízeným testovacími rámci (popsanými výše), poskytuje maximální stupeň paralelizace při spuštění testů na jednom agentovi v potrubí.

  3. Paralelismus nabízený úlohou Visual Studio Test (VSTest). Úloha VSTest podporuje paralelní spouštění testů napříč několika agenty (nebo počítači). Vytvoří se testovací řezy a každý agent spustí vždy jeden řez. Tři různé strategie vytváření řezů v kombinaci s paralelismem nabízeným testovací platformou a testovacím rámcem (jak je popsáno výše), výsledkem je následující:

    • Rozdělení na základě počtu testů a agentů. Jednoduché rozdělení, kde jsou testy uspořádány ve stejně velkých řezech. Výřez obsahuje testy z jednoho nebo více sestavení. Provádění testů na agentu odpovídá paralelismu popsanému v 1 a 2 výše.

    • Řezání na základě dříve uplynulého času. Na základě předchozích časování pro spouštění testů a počtu dostupných agentů se testy seskupí do řezů tak, aby každý řez vyžadoval přibližně stejnou dobu provádění. Výřez obsahuje testy z jednoho nebo více sestavení. Provádění testů na agentu odpovídá paralelismu popsanému v 1 a 2 výše.

    • Řezání podle sestav. Řez je testovací sestavení a obsahuje testy, které všechny patří do stejného sestavení. Provádění na agentu pak odpovídá paralelismu popsanému v 1 a 2 výše. 2 však nemusí nastat, pokud agent obdrží pouze jedno sestavení ke spuštění.

Nápověda a podpora