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

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

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 doručení hodnoty zákazníka, protože kanály nemůžou zpracovávat sestavení dostatečně rychle.

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.

Řezy 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í řezy tak, aby vyhovoval různým požadavkům, jako je dávkování na základě počtu testů a agentů, předchozích testovacích běhů nebo umístění testů v sestaveních.

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 časy spuštění testů nejsou podobné, agenti nemusí být efektivně využíváni, protože někteří agenti můžou přijímat řezy s několika dlouhotrvajícími testy, zatímco jiní agenti můžou přijímat řezy s krátkými testy a dokončit mnohem dříve než ostatní agenti.

Vytváření řezů na základě doby posledního běhu testů

Toto nastavení bere v úvahu časy spuštění za účelem vytvoření řezů testů tak, aby každý řez byl přibližně stejný. Krátkodobé testy budou rozděleny do dávek, zatímco dlouhotrvající testy se přidělí samostatným řezů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.

Vytváření řezů 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í při použití této možnosti 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žití AssemblyInitialize a AssemblyCleanupnebo ClassInitialize a ClassCleanup metody ke správě stavu v testovacím kódu.

Paralelní spouštění testů v klasických kanálech buildu

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

      Tip

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

    • Přidejte do úlohy úlohu 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 vertikální navýšení kapacity testování velkých testovacích sad.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

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

Paralelní spouštění testů v kanálech klasických verzí

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 funkci 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žití nasazení Azure: Vytvoření nebo aktualizace skupiny prostředků nebo úlohy nasazení služby Aplikace Azure k nasazení webové aplikace do Aplikace Azure služeb. 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

      Tip

      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í.

      Tip

      Úlohy v kanálech verze ve výchozím nastavení stahují všechny artefakty propojené s kanálem verze. 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ů.

      Tip

      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í kombinováním paralelních úloh kanálu s paralelním spouštěním testů

Když se v kanálu používají paralelní úlohy, využívá k paralelnímu spouštění jednotlivých úloh několik počítačů (agentů). 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ě. Tato testovací rozhraní jsou rozhraní s platformou Visual Studio Test pomocí testovacího adaptéru a testovací architektury společně s odpovídajícím adaptérem a pracují v rámci procesu testovacího hostitele, který sada Visual Studio Test Platform 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é vstest.console.exe to poznají jako /paralelní přepínač. Provede to spuštěním procesu hostitele testu na každém dostupném jádru a předáním testů v 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. To v kombinaci s paralelizací nabízenými testovacími architekturami (popsané výše) poskytuje maximální stupeň paralelizace při spuštění testů na jednom agentovi v kanálu.

  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 paralelismus nabízený testovací platformou a testovací architekturou (jak je popsáno výše), mají za následek následující:

    • Vytváření řezů na základě počtu testů a agentů. Jednoduché řezy, ve kterých jsou testy seskupeny ve stejných řezech. Řez obsahuje testy z jednoho nebo více sestavení. Testování provádění na agentu pak odpovídá paralelismu popsanému v 1 a 2 výše.

    • Vytváření řezů na základě času v minulosti. 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í. Řez obsahuje testy z jednoho nebo více sestavení. Testování provádění na agentu pak odpovídá paralelismu popsanému v 1 a 2 výše.

    • Vytváření řezů na základě sestavení. Ř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