Megosztás a következőn keresztül:


Tesztek párhuzamos futtatása a Visual Studio tesztelési feladatával

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

A kódmódosítások ellenőrzésére vonatkozó tesztek futtatása kulcsfontosságú a minőség fenntartásához. Ahhoz, hogy a folyamatos integrációs gyakorlat sikeres legyen, mindenképpen rendelkeznie kell egy jó tesztcsomaggal, amely minden buildtel fut. A kódbázis növekedésével azonban a regressziós tesztcsomag is növekszik, és a teljes regressziós teszt futtatása hosszú időt vehet igénybe. Előfordulhat, hogy maguk a tesztek hosszú ideig futnak – ez általában akkor fordul elő, ha végpontok közötti teszteket ír. Ez csökkenti az ügyfélértékek kézbesítésének sebességét, mivel a folyamatok nem tudják elég gyorsan feldolgozni a buildeket.

A tesztek párhuzamos futtatása nagyszerű módszer a CI/CD-folyamatok hatékonyságának javítására. Ez egyszerűen elvégezhető a felhő által kínált további kapacitás alkalmazásával. Ez a cikk azt ismerteti, hogyan konfigurálhatja a Visual Studio tesztelési feladatát a tesztek párhuzamos futtatásához több ügynök használatával.

Előfeltétel

Ismerkedjen meg ügynökök és feladatokfogalmaival. Több feladat párhuzamos futtatásához több ügynököt kell konfigurálni. Elegendő párhuzamos feladatra is szüksége van.

Teszt szeletelés

A Visual Studio tesztfeladat (2. verzió) úgy lett kialakítva, hogy zökkenőmentesen működjön a párhuzamos feladatok beállításaival. Ha a Visual Studio-tesztfeladatot tartalmazó folyamatfeladat (az egyszerűség kedvéért a VSTest-feladat) több ügynök egyidejű futtatására van konfigurálva, automatikusan észleli, hogy több ügynök is érintett, és olyan tesztszeleteket hoz létre, amelyek párhuzamosan futtathatók ezen ügynökök között.

A feladat úgy konfigurálható, hogy különböző követelményeknek megfelelő tesztszeleteket hozzon létre. Ezek a követelmények lehetnek a tesztek és ügynökök száma, az előző tesztek futási ideje, vagy a tesztek helye az assembly-kben.

kötegelési beállítások

Ezeket a lehetőségeket a következő szakaszok ismertetik.

Egyszerű felosztás a tesztek és ügynökök száma alapján

Ez a beállítás egy egyszerű szeletelő algoritmus használatával osztja el a "T" tesztek számát az "N" ügynökök között, így minden ügynök T/N-teszteket futtat. Ha például a tesztcsomag 1000 tesztet tartalmaz, és két ügynököt használ párhuzamos feladatokhoz, mindegyik ügynök 500 tesztet futtat. Vagy csökkentheti a tesztek futtatásához szükséges időt nyolc ügynök használatával, amely esetben minden ügynök 125 tesztet futtat párhuzamosan.

Ezt a beállítást általában akkor használják, ha minden tesztnek hasonló futási ideje van. Ha a teszt futásideje nem hasonló, előfordulhat, hogy az ügynökök nem lesznek hatékonyan kihasználva, mert egyes ügynökök több hosszú ideig futó teszttel rendelkező szeleteket kapnak, míg más ügynökök rövid ideig futó tesztekkel rendelkező szeleteket kaphatnak, és sokkal korábban fejeződhetnek be, mint a többi ügynök.

Felbontás a tesztek korábbi futási ideje alapján

Ez a beállítás figyelembe veszi a korábbi futási időket, hogy tesztszeleteket hozzon létre, hogy az egyes szeletek futási ideje körülbelül azonos legyen. A rövid ideig futó tesztek kötegelve lesznek, míg a hosszú ideig futó tesztek külön részekre lesznek beosztva.

Ezt a lehetőséget akkor érdemes használni, ha a szerelvényen belüli tesztek nem rendelkeznek függőségekkel, és nem kell ugyanazon az ügynökön futniuk. Ez a lehetőség az ügynökök leghatékonyabb kihasználtságát eredményezi, mivel minden ügynök ugyanolyan mennyiségű "munkát" kap, és mindegyik körülbelül ugyanabban az időben fejeződik be.

Szeletelés tesztösszeállítások alapján

Ez a beállítás egy egyszerű szeletelő algoritmust használ, amely felosztja az "A" tesztszerelvények (vagy fájlok) számát az "N" ügynökök között, így minden ügynök A/N-szerelvényekből futtat teszteket. A rendszer nem veszi figyelembe a szerelvényen belüli tesztek számát a beállítás használatakor. Ha például a tesztcsomag tíz tesztszerelvényt tartalmaz, és két ügynököt használ párhuzamos feladatokhoz, minden ügynök öt tesztszerelvényt kap a futtatáshoz. Öt ügynök használatával még tovább csökkentheti a tesztek futtatásához szükséges időt, ebben az esetben minden ügynök két tesztszerelvényt kap a futtatáshoz.

Ezt a lehetőséget akkor érdemes használni, ha egy szerelvényen belüli tesztek függőségekkel rendelkeznek, vagy AssemblyInitialize és AssemblyCleanup, illetve ClassInitialize és ClassCleanup metódusokat használnak a tesztkód állapotának kezeléséhez.

Tesztek párhuzamos futtatása klasszikus buildelési folyamatokban

Ha nagy tesztcsomagot vagy hosszú ideig futó integrációs tesztcsomagot használ a klasszikus buildelési folyamatban való futtatáshoz, kövesse az alábbi lépéseket.

Megjegyzés

Ha a többügynökös képességet helyszíni TFS-kiszolgálóval rendelkező buildfolyamatokban szeretné használni, a TFS 2018 Update 2 vagy újabb verzióját kell használnia.

  1. Építési feladat egyetlen ügynök használatával. Visual Studio-projektek létrehozása és buildösszetevők közzététele az alábbi képen látható feladatok használatával. Ez az alapértelmezett feladatbeállításokat használja (egyetlen ügynök, nincs párhuzamos feladat).

    buildJobSingleAgent

  2. Tesztek párhuzamos futtatása több ügynökkel:

    • ügynökfeladat hozzáadása

      AddAgentJobBuild

    • Konfigurálja a feladatot úgy, hogy több ügynök párhuzamosan működjön. Az alábbi példa három ügynököt használ.

      ParallelTestJobBuild

      Tipp

      A nagymértékben párhuzamos teszteléshez akár 99 ügynököt is megadhat.

    • Adjon hozzá egy Build Artifacts letöltése feladatot a munkához. Ez a lépés a buildelési feladat és a tesztfeladat közötti kapcsolat, és annak biztosításához szükséges, hogy a buildelési feladatban létrehozott bináris fájlok elérhetők legyenek a tesztfeladat által a tesztek futtatásához használt ügynökökön. Győződjön meg arról, hogy a tevékenység úgy van beállítva, hogy letöltse az "Aktuális build" által előállított összetevőket, és az összetevő neve megegyezik a buildelési feladatban Build-összetevők közzététele feladatban használt összetevő nevével.

      DownloadBuildArtifacts

    • Adja hozzá a Visual Studio Test feladatot, és konfigurálja a szükséges szeletelési stratégiahasználatára.

Feladatok beállítása párhuzamos teszteléshez YAML-folyamatokban

Adja meg a parallel stratégiát a job-ben, és adja meg, hogy hány feladatot kell elküldeni. Legfeljebb 99 ügynököt adhat meg a nagyméretű tesztcsomagok tesztelésének skálázásához.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

További információ: YAML-séma – Feladat.

Tesztek párhuzamos futtatása klasszikus kiadási folyamatokban

Ha nagy tesztcsomagot vagy hosszú ideig futó funkcionális tesztcsomagot használ az alkalmazás üzembe helyezése után, kövesse az alábbi lépéseket. Előfordulhat például, hogy egy webalkalmazást szeretne üzembe helyezni, és szelénteszteket futtatni egy böngészőben az alkalmazás működésének ellenőrzéséhez.

Megjegyzés

Ha a többügynökös képességet helyszíni TFS-kiszolgálóval rendelkező kiadási folyamatokban szeretné használni, a TFS 2017 Update 1 vagy újabb verzióját kell használnia.

  1. Alkalmazás üzembe helyezése egyetlen ügynökhasználatával. Az Azure Deployment használata: Erőforráscsoport létrehozása vagy frissítése vagy az Azure App Service üzembe helyezési feladata webalkalmazás üzembe helyezéséhez az Azure App Servicesben. Ez az alapértelmezett feladatbeállításokat használja (egyetlen ügynök, nincs párhuzamos feladat).

    DeployApp1Agent

  2. Tesztek párhuzamos futtatása több ügynökkel:

    • ügynökfeladat hozzáadása

      AddAgentJobRM

    • Konfigurálja a feladatot úgy, hogy több ügynök párhuzamosan működjön. Az alábbi példa három ügynököt használ.

      ParallelTestJobRM

      Tipp

      A nagymértékben párhuzamos teszteléshez akár 99 ügynököt is megadhat.

    • Adjon hozzá minden olyan további feladatot, amelyeket a Visual Studio tesztfeladatának futtatása előtt kell futtatnia. Futtasson például egy PowerShell-szkriptet a tesztekhez szükséges adatok beállításához.

      Tipp

      A kiadási folyamatok feladatai alapértelmezés szerint letöltik a kiadási folyamathoz társított összes összetevőt. Időt takaríthat meg, ha úgy konfigurálja a feladatot, hogy csak a feladat által igényelt tesztösszetevőket töltse le. Például a webalkalmazás bináris fájljai nem szükségesek a szeléntesztek futtatásához, és ezek letöltése kihagyható, ha az alkalmazást és a tesztösszetevőket a buildelési folyamat külön teszi közzé.

    • Adja hozzá a Visual Studio Test feladatot, és konfigurálja a szükséges szeletelési stratégiahasználatára.

      Tipp

      Ha a tesztgépeken nincs telepítve a Visual Studio, a Visual Studio Tesztplatform-telepítő feladat használatával beszerezheti a tesztplatform szükséges verzióját.

Nagymértékben párhuzamos tesztelés párhuzamos folyamatfeladatok párhuzamos tesztvégrehajtással való kombinálásával

Ha párhuzamos feladatokat használ egy folyamatban, több gépet (ügynököt) használ az egyes feladatok párhuzamos futtatásához. A tesztelési keretrendszerek és futók emellett lehetővé teszik a tesztek párhuzamos futtatását egyetlen gépen, jellemzően több párhuzamosan futó folyamat vagy szál létrehozásával. A párhuzamossági funkciók rétegzett módon kombinálhatók a nagymértékben párhuzamos tesztelés érdekében. A Visual Studio-tesztfeladatkontextusában a párhuzamosság a következő módokon kombinálható:

  1. tesztelési keretrendszerek által kínált párhuzamosság. Minden modern tesztelési keretrendszer, például az MSTest v2, az NUnit, az xUnit és mások lehetővé teszik a tesztek párhuzamos futtatását. Egy szerelvény tesztjei általában párhuzamosan futnak. Ezek a tesztelési keretrendszerek egy tesztadapterrel és a tesztelési keretrendszerrel, valamint a megfelelő adapterrel kapcsolódnak a Visual Studio Tesztplatformhoz, és egy tesztgazdafolyamaton belül működnek, amelyet a Visual Studio Tesztplatform hoz létre a tesztek futtatásakor. Ezért ezen a rétegen a párhuzamosítás az összes keretrendszer és adapter folyamatán belül van.

  2. Visual Studio Test Platform (vstest.console.exe) által kínált párhuzamosság. A Visual Studio Test Platform párhuzamosan futtathat tesztszerelvényeket. A vstest.console.exe felhasználói ezt a /párhuzamos kapcsolóként ismerik fel. Ezt úgy teszi, hogy elindít egy tesztgazdafolyamatot az egyes elérhető magokon, és átadja neki a teszteket egy közgyűjteményben a végrehajtáshoz. Ez minden olyan keretrendszer esetében működik, amely rendelkezik tesztadapterrel a Visual Studio tesztplatformhoz, mivel a párhuzamosítás egysége egy tesztszerelvény vagy tesztfájl. Ez a tesztelési keretrendszerek által kínált (fent ismertetett) párhuzamossággal kombinálva biztosítja a párhuzamosság maximális fokát, amikor a tesztek egyetlen ügynökön futnak a folyamatban.

  3. A Visual Studio Test (VSTest) feladat által nyújtott párhuzamosság. A VSTest-feladat támogatja a tesztek párhuzamos futtatását több ügynök (vagy gép) között. A rendszer tesztszeleteket hoz létre, és minden ügynök egyszerre egy szeletet hajt végre. A három különböző szeletelési stratégiaa tesztplatform és a tesztelési keretrendszer által kínált párhuzamossággal kombinálva (a fent leírtak szerint) a következőket eredményezi:

    • Szeletelés a tesztek és az agentek száma alapján. Egyszerű szeletelés, ahol a tesztek egyenlő méretű szeletekbe vannak csoportosítva. Egy szelet egy vagy több egység tesztjeit tartalmazza. A tesztvégrehajtás az ügynökön ezután az 1. és a 2. párhuzamossághoz igazodik.

    • Felosztás múltbeli futási idő alapján. A tesztek futtatásának korábbi időzítései és a rendelkezésre álló ügynökök száma alapján a tesztek szeletekbe vannak csoportosítva, így az egyes szeletek körülbelül egyenlő végrehajtási időt igényelnek. Egy szelet egy vagy több egység tesztjeit tartalmazza. A tesztvégrehajtás az ügynökön ezután az 1. és a 2. párhuzamossághoz igazodik.

    • Szeletelés összeállítások alapján. Egy szelet egy tesztösszeállítás, így olyan teszteket tartalmaz, amelyek mind ugyanahhoz az összeállításhoz tartoznak. Az ügynökön történő végrehajtás ezután megfelel a fent leírt 1 és 2 párhuzamosságnak. Előfordulhat azonban, hogy 2 nem fordul elő, ha egy ügynök csak egy futtatandó modul kap.

Súgó és támogatás