Tartományspecifikus szabályok implementálása egyéni tesztek írásával

Befejeződött

Az eddigiekben láthatta, hogyan futtathat teszteket a sablonokon. Előfordulhat azonban, hogy olyan vállalatban vagy csapatban dolgozik, amelynek saját szabálykészlete van. Ezen szabályok miatt esetleg szeretné testre szabni a tesztelési felületet. Elképzelhetők a következő helyzetek:

  • Egy meghatározott tesztcsomag futtatása. A tesztelési eszközkészlet telepítésekor készen kap néhány tesztet, amelyek futni fognak. Ezek a tesztek a következő könyvtárban találhatók: <directory>/arm-ttk/testcases/deploymentTemplate telepítése.

    Ezt a tesztfuttatási felületet testre is szabhatja. A testreszabás egyik módja, ahogy az előző leckében láttuk, a -Test paraméter használatával. A futtatandó tesztek körét úgy is módosíthatja, hogy eltávolít egyes fájlokat a könyvtárból. A paraméterrel -Skip kihagyhat bizonyos teszteket.

  • Tartományspecifikus tesztek írása és futtatása. A tartományspecifikus szabályok kikényszerítéséhez egy tesztfájlt is létre lehet hozni. Ez a lecke elsősorban ezzel a helyzettel foglalkozik.

Saját tesztek írása és futtatása

Úgy határozott, hogy saját tartományspecifikus teszteket ír. Az ilyen tesztek megírásának és futtatásának folyamata a következő:

  1. Hozzon létre egy fájlt a címtár <telepítési könyvtárában>/arm-ttk/testcases/deploymentTemplate.
  2. Írja meg a fájl tartalmát a PowerShellben.
  3. Futtassa a fájlt, és vizsgálja meg az eredményeket.

Egyéni teszt létrehozása

Egy egyéni tesztet a megfelelő könyvtárba kell helyezni: <könyvtár/arm-ttk/testcases/deploymentTemplate telepítése>. Meg kell felelniük a kötőjeles elnevezési konvenciónak, rendelkezniük kell a .test utótaggal és a .ps1 végződéssel. Egy tipikus tesztfájl az alábbihoz hasonló:

Domain-Specific.test.ps1

Tartalomkészítés

Az elkészítendő tesztfájlt a PowerShellben kell megírnia. Egy tesztfájl három része a következő:

  • Dokumentáció. Ez a rész nem kötelező, de nagyon hasznos. A fájl elején található, és általában megjegyzéseket tartalmaz, amelyek leírják a tesztet, annak működését, és hogy hogyan hívható. A megjegyzések a következő példához hasonlóak lehetnek:

    <#
    .Synopsis
         Ensures that all IDs use the resourceID() function.
    .Description
         Ensures that all IDs use the resourceID() function, or resolve to parameters or variables that use the ResourceID() function.
    .Example
         Test-AzTemplate -TemplatePath .\100-marketplace-sample\ -Test IDs-Should-Be-Derived-From-ResourceIDs
    #>
    

    Az előző példa egy rövid leírásban leírja, hogy mit végez a teszt egy úgynevezett .Synopsisszakaszban. Van egy hosszabb leírás is a .. nevű .Descriptionszakaszban. Végül van egy szakasz, .Example amely a teszt futtatásának különböző módjait mutatja be.

  • Bemeneti paraméterek. A tesztfájlnak bemeneti paraméterei is lehetnek. Ezt a szakaszt a param kulcsszó és a zárójelek határozzák meg. Jellemző felépítése a következő:

    param(
       [Parameter(Mandatory=$true)]
       [PSObject]$TemplateObject,
    
       [Parameter(Mandatory=$true)]
       [string]$TemplateFileName,
    
       [string]$SampleName = "$ENV:SAMPLE_NAME"
    )
    

    Az előző példa három paramétert mutat be: $TemplateObject, $TemplateFileNameés $SampleName. Az első két paraméter kötelező, ahogy a Parameter[(Mandatory = $true)] dekoráció is mutatja. A paraméterek elnevezése tükrözi azok jelentését. $TemplateObject A sablonfájl objektumábrázolását tartalmazza, és TemplateFileName tartalmazza a tesztelt fájl nevét.

    Tipp.

    Az ARM-sablon tesztelési eszközkészletében további információk találhatók a paraméterekről.

  • Tesztelési logika. A teszt utolsó része a tesztelési logika. A tesztek többségének célja általában az alábbi lépések végrehajtása:

    1. Végighalad a sablonon.
    2. Ellenőriz egy vagy több feltételt.
    3. Hibát jelez, ha valami helytelen.

Kódsegédek

Számos segéd áll rendelkezésre, amelyek a tartalom megkereséséhez és a hibák jelentéséhez nyújtanak segítséget. Az alábbi példák két kódsegédet mutatnak be:

  • Find-JsonContent. Egy adott értékű adott elem megkeresésében segít. Példa:

    Find-JsonContent -Key apiVersion -Value * -Like
    

    Az előző kód segít megtalálni egy JSON-attribútumot a névvel apiVersion és az értékével *, ami lényegében az összes elnevezett apiVersionattribútumot jelenti . A következőhöz hasonló JSON-objektumnak felelne meg:

    {
       "apiVersion": "2021-01-01"
    }
    
  • Write-Error. Abban segít, hogy közölje a tesztfuttatóval, ha valami nem helyes a sablonban. Felhasználható egy hibaüzenet kifejezésére, és egy sztringkifejezés bármely szükséges változóval történő interpolálására. Ennek használatára példa a következő:

      Write-Error "Resource $($resource.Name) Location must be located in westeurope'" -TargetObject $resource
    

A teszt futtatása

Ezen a ponton elvégezte a tesztet. Ez az ebben a könyvtárban lévő összes többi fájllal együtt lesz futtatva.

Az előző példához hasonlóan úgy is dönthet, hogy csak az adott tesztfájlt futtatja a -Test paraméterrel. Paraméterként a fájlkiterjesztések tesztfájljának nevét kell megadnia. A Custom-Test.test.ps1 tehát a Test-AzTemplate -TemplatePath /path/to/template -Test Custom-Test argumentummal futtatható önmagában.