Cvičení – vytváření a spouštění vlastních testů pomocí testovací sady nástrojů

Dokončeno

Jako člen produktového týmu víte, že je důležité mít možnost implementovat některá pravidla specifická pro tým nebo doménu. To se dá provést implementací pravidel jako testů. Tyto testy pak můžete spouštět pomocí testovací sady nástrojů.

Vytvoření a spuštění vlastního testu

Vytvoříte vlastní test a k jeho spuštění použijete testovací sadu nástrojů. Kromě toho opravíte šablonu nasazení, abyste zajistili, že test bude úspěšný. Vlastní test bude zjišťovat, jestli všechny parametry dodržují pravidlo pojmenování. Toto pravidlo je specifickým požadavkem domény pro produkt, na kterém tým pracuje.

Doporučuje se, abyste pro toto cvičení otevřeli dva textové editory:

  • Vytvoření vlastního testu. Vyhledejte cestu k podadresáři arm-ttk/testcases/deploymentTemplate/ v instalačním adresáři testovací sady nástrojů. Zde spustíte Visual Studio Code, v němž budete vlastní test vytvářet nebo upravovat.
  • Vytvoření souboru šablony a spuštění testů. Vyberte umístění pro tuto cestu. Doporučujeme spustit instanci editoru Visual Studio Code právě z ní, abyste po zobrazení výzvy mohli snadno upravovat soubor azuredeploy.json. Pomocí této instance editoru Visual Studio Code také spusťte integrovaný terminál, aby se daly snadno spouštět testy.

Vytvoření souboru šablony

Vyberte adresář a vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Vytvoření vlastního testu

  1. Otevřete Visual Studio Code a přejděte do instalačního adresáře testovací sady nástrojů. Přejděte do podadresáře arm-ttk/testcases/deploymentTemplate. Spusťte následující příkaz:

    code .
    

    Poznámka:

    Pokud Visual Studio Code není v cestě, otevřete ho ručně a potom otevřete adresář.

  2. Vytvořte vlastní testovací soubor s názvem Custom-ParameterNaming.test.ps1. Zahrňte do souboru následující obsah:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Nechejte textový editor otevřený. Soubor budete upravovat později.

Spuštění vlastního testu

Vlastní test spusťte pomocí těchto kroků:

  1. Otevřete nové okno terminálu nebo znovu použijte staré okno.

  2. Přejděte do adresáře, kde jste vytvořili azuredeploy.json. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  3. Z editoru Visual Studio Code otevřete integrovaný terminál tak, že v horní nabídce vyberete Terminal>New Terminal (Terminál > Nový terminál). Spuštěním tohoto příkazu v terminálu spusťte prostředí PowerShellu:

    pwsh
    

    Zobrazený výstup by měl vypadat nějak takto:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. V terminálu spusťte Import-Module.

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

  5. Testování zahájíte spuštěním Test-AzTemplate v terminálu:

    Test-AzTemplate -TemplatePath .
    

    Výstup vypadá přibližně takto. Všimněte si zvýrazněných řádků, které ukazují váš test:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Když jste teď test našli, nechejte okno terminálu otevřené. Budete ho později potřebovat.

Refaktorování vlastního testu

Teď dáte vlastnímu testu správnou implementaci.

  1. Vraťte se do textového editoru se souborem Custom-ParameterNaming.test.ps1.

    Poznámka:

    Pokud jste Visual Studio Code omylem zavřeli, přejděte do podadresáře arm-ttk/testcases/deploymentTemplate a otevřete soubor Custom-ParameterNaming.test.ps1.

  2. Obsah souboru nahraďte tímto kódem:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Kód výše iteruje všemi parametry. Zkontroluje name atribut a zkontroluje, zda název začíná předponou tailwind. Pokud kontrolovaný parametr neodpovídá pravidlu pojmenování, kód pak vyvolá rutinu Write-Error s vhodnou chybovou zprávou.

Aktualizace souboru šablony

Teď do souboru šablony přidáte parametr.

  1. Vyberte textový editor obsahující azuredeploy.json a změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Předchozí obsah šablony definuje parametr s názvem location , který nesplňuje pravidlo pojmenování, protože nemá předponu tailwind .

Opětovné spuštění testovací sady nástrojů

V tuto chvíli máte napsaný vlastní test. Pojmenování souboru šablony ale nesplňuje požadavek. Očekáváte proto, že nadcházející test bude neúspěšný. Pomocí následujících kroků zajistíte, že tomu tak bude:

Použijte existující okno integrovaného terminálu Visual Studio Code, ve kterém jste spustili PowerShell a importovali testovací sadu nástrojů.

V editoru Visual Studio Code spusťte v integrovaném terminálu Test-AzTemplate:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Předchozí příkaz se spustí s parametrem -Test, který jako vstup vezme testovací název. Zadali jste Custom-ParameterNaming jako parametr, což znamená , že se spustí pouze nově vyvinutý test.

Tip

Použití parametru -Test je dobrým postupem při vývoji testu, protože omezuje to, co se spouští, a velikost výstupu terminálu.

Výsledkem tohoto příkazu je tento výstup:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Výsledek udává, že váš test funguje. Pojďme změnit soubor nasazení, abychom se ujistili, že tomu tak je.

Oprava souboru šablony

V tomto okamžiku chcete ověřit správnost vlastního testu změnou souboru šablony tak, aby splňoval pravidla, která tento test stanovuje.

  1. Ve stejné instanci editoru Visual Studio Code, která zobrazuje soubor azuredeploy.json, změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Parametr s názvem location byl přejmenován na tailwindLocation. Teoreticky by teď tento parametr měl testem projít. Pojďme to ověřit.

  2. Pokračujte ve stejné instanci editoru Visual Studio Code a v integrovaném terminálu spusťte Test-AzTemplate:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Váš výstup teď vypadá zhruba takto:

    Validating custom\azuredeploy.json
      deploymentTemplate
        [+] Custom ParameterNaming (2 ms)
    

Výborně! Provedli jste implementaci a spuštění vlastního testu. Také jste opravili šablonu nasazení, aby vyhovovala podmínkám testu.

Vytvoření a spuštění vlastního testu

Vytvoříte vlastní test a k jeho spuštění použijete testovací sadu nástrojů. Kromě toho opravíte šablonu nasazení, abyste zajistili, že test bude úspěšný. Vlastní test bude zjišťovat, jestli všechny parametry dodržují pravidlo pojmenování. Toto pravidlo je specifickým požadavkem domény pro produkt, na kterém tým pracuje.

Doporučuje se, abyste pro toto cvičení otevřeli dva textové editory:

  • Vytvoření vlastního testu. Vyhledejte cestu k podadresáři arm-ttk/testcases/deploymentTemplate/ v instalačním adresáři testovací sady nástrojů. Zde spustíte Visual Studio Code, v němž budete vlastní test vytvářet nebo upravovat.
  • Vytvoření souboru šablony a spuštění testů. Vyberte umístění pro tuto cestu. Doporučujeme spustit instanci editoru Visual Studio Code právě z ní, abyste po zobrazení výzvy mohli snadno upravovat soubor azuredeploy.json. Pomocí této instance editoru Visual Studio Code také spusťte integrovaný terminál, aby se daly snadno spouštět testy.

Vytvoření souboru šablony

Vyberte adresář a vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Vytvoření vlastního testu

  1. Otevřete terminál. Přejděte do instalačního adresáře testovací sady nástrojů. Přejděte do podadresáře arm-ttk/testcases/deploymentTemplate. Spusťte následující příkaz:

    code .
    

    Poznámka:

    Pokud Visual Studio Code není v cestě, otevřete ho ručně a potom otevřete adresář.

  2. Vytvořte vlastní testovací soubor s názvem Custom-ParameterNaming.test.ps1. Zahrňte do souboru následující obsah:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Nechejte textový editor otevřený. Soubor budete upravovat později.

Spuštění vlastního testu

Vlastní test spusťte pomocí těchto kroků:

  1. Otevřete nové okno terminálu nebo znovu použijte staré okno.

  2. Přejděte do adresáře, kde jste vytvořili azuredeploy.json. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  3. V editoru Visual Code otevřete integrovaný terminál tak, že v horní nabídce vyberete Terminal>New Terminal (Terminál > Nový terminál). Spuštěním tohoto příkazu v terminálu spusťte prostředí PowerShellu:

    pwsh
    

    Zobrazený výstup by měl vypadat nějak takto:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. V terminálu spusťte Import-Module.

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

  5. V terminálu spusťte Test-AzTemplate:

    Test-AzTemplate -TemplatePath .
    

    Výstup vypadá přibližně takto. Všimněte si zvýrazněných řádků, které ukazují váš test:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Když jste teď test našli, nechejte okno terminálu otevřené. Budete ho později potřebovat.

Refaktorování vlastního testu

Teď dáte vlastnímu testu správnou implementaci.

  1. Vraťte se do textového editoru se souborem Custom-ParameterNaming.test.ps1.

    Poznámka:

    Pokud jste Visual Studio Code omylem zavřeli, přejděte do podadresáře arm-ttk/testcases/deploymentTemplate a otevřete soubor Custom-ParameterNaming.test.ps1.

  2. Obsah souboru nahraďte tímto kódem:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Kód výše iteruje všemi parametry. Zkontroluje name atribut a zkontroluje, zda název začíná předponou tailwind. Pokud kontrolovaný parametr neodpovídá pravidlu pojmenování, kód pak vyvolá rutinu Write-Error s vhodnou chybovou zprávou.

Aktualizace souboru šablony

Teď do souboru šablony přidáte parametr.

  1. Vyberte textový editor obsahující azuredeploy.json a změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Předchozí obsah šablony definuje parametr s názvem location , který nesplňuje pravidlo pojmenování, protože nemá předponu tailwind .

Opětovné spuštění testovací sady nástrojů

V tuto chvíli máte napsaný vlastní test. Pojmenování souboru šablony ale nesplňuje požadavek. Očekáváte proto, že nadcházející test bude neúspěšný. Pomocí následujících kroků zajistíte, že tomu tak bude:

Poznámka:

Použijte existující okno integrovaného terminálu Visual Studio Code, ve kterém jste spustili PowerShell a importovali testovací sadu nástrojů.

V editoru Visual Studio Code spusťte v integrovaném terminálu Test-AzTemplate:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Předchozí příkaz se spustí s parametrem s názvem -Test, který jako vstup vezme testovací název. Zadali jste Custom-ParameterNaming jako parametr, což znamená, že se spustí pouze nově vyvinutý test.

Tip

Použití tohoto parametru je při vývoji testu vhodný postup, protože omezuje, co se spustí, a také velikost výstupu terminálu.

Výsledkem tohoto příkazu je tento výstup:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Výsledek udává, že váš test funguje. Pojďme změnit soubor nasazení, abychom se ujistili, že tomu tak je.

Oprava souboru šablony

V tomto okamžiku chcete ověřit správnost vlastního testu změnou souboru šablony tak, aby splňoval pravidla, která tento test stanovuje.

  1. Ve stejné instanci editoru Visual Studio Code, která zobrazuje soubor azuredeploy.json, změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Parametr s názvem location byl přejmenován na tailwindLocation. Teoreticky by teď tento parametr měl testem projít. Pojďme to ověřit.

  2. Pokračujte ve stejné instanci editoru Visual Studio Code a v integrovaném terminálu spusťte Test-AzTemplate:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Váš výstup teď vypadá zhruba takto:

    Validating custom\azuredeploy.json
      deploymentTemplate
        [+] Custom ParameterNaming (2 ms)
    

Výborně! Provedli jste implementaci a spuštění vlastního testu. Také jste opravili šablonu nasazení, aby vyhovovala podmínkám testu.

Vytvoření a spuštění vlastního testu

Vytvoříte vlastní test a k jeho spuštění použijete testovací sadu nástrojů. Kromě toho opravíte šablonu nasazení, abyste zajistili, že test bude úspěšný. Vlastní test bude zjišťovat, jestli všechny parametry dodržují pravidlo pojmenování. Toto pravidlo je specifickým požadavkem domény pro produkt, na kterém tým pracuje.

Doporučuje se, abyste pro toto cvičení otevřeli dva textové editory:

  • Vytvoření vlastního testu. Vyhledejte cestu podadresáře arm-ttk\testcases\deploymentTemplate\ instalačního adresáře testovací sady nástrojů. Zde spustíte Visual Studio Code, v němž budete vlastní test vytvářet nebo upravovat.
  • Vytvoření souboru šablony a spuštění testů. Vyberte umístění pro tuto cestu. Doporučujeme spustit instanci editoru Visual Studio Code právě z ní, abyste po zobrazení výzvy mohli snadno upravovat soubor azuredeploy.json. Pomocí této instance editoru Visual Studio Code také spusťte integrovaný terminál, aby se daly snadno spouštět testy.

Vytvoření souboru šablony

Vyberte adresář a vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Vytvoření vlastního testu

  1. Otevřete terminál.

  2. Přejděte do instalačního adresáře testovací sady nástrojů.

  3. Umístěte se do podadresáře arm-ttk\testcases\deploymentTemplate.

  4. Spusťte následující příkaz:

    code .
    

    Poznámka:

    Pokud Visual Studio Code není v cestě, otevřete ho ručně a potom otevřete adresář.

  5. Vytvořte soubor s názvem Custom-ParameterNaming.test.ps1 a přidejte do souboru tento obsah:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Nechejte textový editor otevřený. Soubor budete upravovat později.

Spuštění vlastního testu

Vlastní test spusťte pomocí těchto kroků:

  1. Otevřete nové okno terminálu nebo znovu použijte staré okno.

  2. Přejděte do adresáře, kde jste vytvořili soubor azuredeploy.json.

  3. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  4. V editoru Visual Studio Code otevřete integrovaný terminál. Otevřete paletu příkazů, zadejte PowerShell a vyberte Show integrated terminal (Zobrazit integrovaný terminál).

  5. V terminálu spusťte následující příkaz:

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

    Import-Module path\to\arm-ttk\arm-ttk.psd1
    

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk\arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

  6. V terminálu spusťte Test-AzTemplate:

    Test-AzTemplate -TemplatePath .
    

    Výstup vypadá přibližně takto. Všimněte si zvýrazněných řádků, které ukazují váš test:

    Validating custom\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (56 ms)
    Pass  : 1
    Fail  : 0
    Total : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (68 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (203 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (137 ms)
      artifacts parameter
        [+] artifacts parameter (145 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms)
      deploymentTemplate
        [-] Custom ParameterNaming (354 ms)
            To be implemented
    
      DependsOn Best Practices
        [+] DependsOn Best Practices (152 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (152 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (197 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (157 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (69 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (260 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (70 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (213 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (76 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (68 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (93 ms)
      Password params must be secure
        [+] Password params must be secure (111 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (68 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (210 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (113 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (147 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (242 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (129 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (201 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (180 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (132 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (91 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (114 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (130 ms)
    Pass  : 31
    Fail  : 1
    Total : 32
    

    Když jste teď test našli, nechejte okno terminálu otevřené. Budete ho později potřebovat.

Refaktorování vlastního testu

Teď dáte vlastnímu testu správnou implementaci.

  1. Vraťte se do textového editoru se souborem Custom-ParameterNaming.test.ps1.

    Poznámka:

    Pokud jste Visual Studio Code omylem zavřeli, přejděte do podadresáře testcases/deploymentTemplate a otevřete soubor Custom-ParameterNaming.test.ps1.

  2. Obsah souboru nahraďte tímto kódem:

    <#
    .Synopsis
     Ensures that all parameters adheres to a naming standard
    .Description
     All parameters should start with the company specific prefix 'tailwind'
    #>
    param(
       # The Template Object
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateObject,
    
       # The Template JSON Text
       [Parameter(Mandatory = $true, Position = 0)]
       [PSObject]
       $TemplateText
    )
    
    foreach ($parameter in $TemplateObject.parameters.psobject.properties) {
      # If the parameter name starts with tailwind, then the parameter is correctly named
      if ($parameter.Name -notmatch 'tailwind*') {
         Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter
      }
    }
    

    Kód výše iteruje všemi parametry. Zkontroluje name atribut a zkontroluje, zda název začíná předponou tailwind. Pokud kontrolovaný parametr neodpovídá pravidlu pojmenování, kód pak vyvolá rutinu Write-Error s vhodnou chybovou zprávou.

Aktualizace souboru šablony

Teď do souboru šablony přidáte parametr.

  1. Vyberte textový editor obsahující azuredeploy.json a změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Předchozí obsah šablony definuje parametr s názvem location , který nesplňuje pravidlo pojmenování, protože nemá předponu tailwind .

Opětovné spuštění testovací sady nástrojů

V tuto chvíli máte napsaný vlastní test. Pojmenování souboru šablony ale nesplňuje požadavek. Očekáváte proto, že nadcházející test bude neúspěšný. Pomocí následujících kroků zajistíte, že tomu tak bude:

Použijte existující okno integrovaného terminálu Visual Studio Code, ve kterém jste spustili PowerShell a importovali testovací sadu nástrojů.

V editoru Visual Studio Code spusťte v integrovaném terminálu Test-AzTemplate:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

Předchozí příkaz se spustí s parametrem -Test, který jako vstup vezme testovací název. Zadali jste Custom-ParameterNaming jako parametr, což znamená, že se spustí pouze nově vyvinutý test.

Tip

Použití tohoto parametru je při vývoji testu vhodný postup, protože omezuje, co se spustí, a také velikost výstupu terminálu.

Výsledkem tohoto příkazu je tento výstup:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

Výsledek udává, že váš test funguje. Pojďme změnit soubor nasazení, abychom se ujistili, že tomu tak je.

Oprava souboru šablony

V tomto okamžiku chcete ověřit správnost vlastního testu změnou souboru šablony tak, aby splňoval pravidla, která tento test stanovuje.

  1. Ve stejné instanci editoru Visual Studio Code, která zobrazuje soubor azuredeploy.json, změňte obsah souboru na tento obsah:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "tailwindLocation": {
          "type": "string",
          "metadata": {
            "description": "a deployment location"
          }
        }
      },
      "resources": []
    }
    

    Parametr s názvem location byl přejmenován na tailwindLocation. Teoreticky by teď tento parametr měl testem projít. Pojďme to ověřit.

  2. Pokračujte ve stejné instanci editoru Visual Studio Code a v integrovaném terminálu spusťte Test-AzTemplate:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Váš výstup teď vypadá zhruba takto:

    Validating custom\azuredeploy.json
      Custom ParameterNaming
        [+] Custom ParameterNaming (9 ms)
    

Výborně! Provedli jste implementaci a spuštění vlastního testu. Také jste opravili šablonu nasazení, aby vyhovovala podmínkám testu.