Použití testovací sady nástrojů pro šablony ARM

Testovací Azure Resource Manager (šablona ARM) zkontroluje, jestli vaše šablona používá doporučené postupy. Pokud vaše šablona nedodržuje doporučené postupy, vrátí seznam upozornění s navrhovanými změnami. Pomocí testovací sady nástrojů se můžete naučit, jak se vyhnout běžným problémům při vývoji šablon. Tento článek popisuje, jak spustit testovací sadu nástrojů a jak přidat nebo odebrat testy. Další informace o tom, jak spouštět testy nebo jak spustit konkrétní test, najdete v tématu Parametry testu.

Sada nástrojů je sada skriptů PowerShellu, které je možné spustit z příkazu v PowerShellu nebo rozhraní příkazového řádku. Tyto testy jsou doporučení, ale ne požadavky. Můžete se rozhodnout, které testy jsou relevantní pro vaše cíle, a přizpůsobit, které testy se spustí.

Sada nástrojů obsahuje čtyři sady testů:

Microsoft Learn

Další informace o testovací sadě nástrojů pro šablony ARM a pokyny najdete v tématu Ověření prostředků Azure pomocí testovací sady šablon ARM Toolkit na Microsoft Learn.

Instalace v systému Windows

  1. Pokud ještě Nemáte PowerShell, nainstalujte PowerShell na Windows.

  2. Stáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.

  3. Spusťte PowerShell.

  4. Přejděte do složky, do které jste extraholi testovací sadu nástrojů. V této složce přejděte do složky arm-ttk.

  5. Pokud vaše zásady spouštění blokuje skripty z internetu, musíte soubory skriptu odblokovat. Ujistěte se, že jste ve složce arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Naimportujte modul.

    Import-Module .\arm-ttk.psd1
    
  7. Ke spuštění testů použijte následující příkaz:

    Test-AzTemplate -TemplatePath \path\to\template
    

Instalace v systému Linux

  1. Pokud ještě Nemáte PowerShell, nainstalujte PowerShell v Linuxu.

  2. Stáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.

  3. Spusťte PowerShell.

    pwsh
    
  4. Přejděte do složky, do které jste extraholi testovací sadu nástrojů. V této složce přejděte do složky arm-ttk.

  5. Pokud vaše zásady spouštění blokuje skripty z internetu, musíte soubory skriptu odblokovat. Ujistěte se, že jste ve složce arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Naimportujte modul.

    Import-Module ./arm-ttk.psd1
    
  7. Ke spuštění testů použijte následující příkaz:

    Test-AzTemplate -TemplatePath /path/to/template
    

Instalace v systému macOS

  1. Pokud ještě Nemáte PowerShell, nainstalujte PowerShell v systému macOS.

  2. Nainstalujte coreutils:

    brew install coreutils
    
  3. Stáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.

  4. Spusťte PowerShell.

    pwsh
    
  5. Přejděte do složky, do které jste extraholi testovací sadu nástrojů. V této složce přejděte do složky arm-ttk.

  6. Pokud vaše zásady spouštění blokuje skripty z internetu, musíte soubory skriptu odblokovat. Ujistěte se, že jste ve složce arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  7. Naimportujte modul.

    Import-Module ./arm-ttk.psd1
    
  8. Ke spuštění testů použijte následující příkaz:

    Test-AzTemplate -TemplatePath /path/to/template
    

Formát výsledku

Testy, které projdou, se zobrazí zeleně a jsou před ním [+] .

Testy, které selžou, se zobrazí červeně a jsou před ním [-] .

Testy s upozorněním se zobrazují žlutě a předchycují se [?] .

zobrazit výsledky testu.

Textové výsledky:

deploymentTemplate
[+] adminUsername Should Not Be A Literal (6 ms)
[+] apiVersions Should Be Recent In Reference Functions (9 ms)
[-] apiVersions Should Be Recent (6 ms)
    Api versions must be the latest or under 2 years old (730 days) - API version 2019-06-01 of
    Microsoft.Storage/storageAccounts is 760 days old
    Valid Api Versions:
    2021-04-01
    2021-02-01
    2021-01-01
    2020-08-01-preview

[+] artifacts parameter (4 ms)
[+] CommandToExecute Must Use ProtectedSettings For Secrets (9 ms)
[+] DependsOn Best Practices (5 ms)
[+] Deployment Resources Must Not Be Debug (6 ms)
[+] DeploymentTemplate Must Not Contain Hardcoded Uri (4 ms)
[?] DeploymentTemplate Schema Is Correct (6 ms)
    Template is using schema version '2015-01-01' which has been deprecated and is no longer
    maintained.

Parametry testu

Když zadáte parametr , sada nástrojů v této složce vyhledá šablonu -TemplatePath s názvem azuredeploy.json nebo maintemplate.json. Nejprve tuto šablonu otestuje a pak otestuje všechny ostatní šablony ve složce a jejích podsložkách. Ostatní šablony se testují jako propojené šablony. Pokud cesta obsahuje soubor s názvem createUiDefinition.json, spustí testy, které jsou relevantní pro definici uživatelského rozhraní. Testy se také schová pro soubory parametrů a všechny soubory JSON ve složce.

Test-AzTemplate -TemplatePath $TemplateFolder

Pokud chcete otestovat jeden soubor v této složce, přidejte -File parametr . Složka ale stále musí mít hlavní šablonu s názvem azuredeploy.json nebo maintemplate.json.

Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json

Ve výchozím nastavení se spustí všechny testy. Pokud chcete určit jednotlivé testy, které se mají spustit, -Test použijte parametr a zadejte název testu. Názvy testů najdete v tématu Šablony ARM, soubory parametrů, createUiDefinition.jsona všechny soubory.

Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"

Přizpůsobení testů

Můžete přizpůsobit výchozí testy nebo vytvořit vlastní testy. Pokud chcete trvale odebrat test, odstraňte soubor .test.ps1 ze složky .

Sada nástrojů obsahuje čtyři složky, které obsahují výchozí testy, které jsou spouštěné pro konkrétní typy souborů:

  • Šablony ARM: \arm-ttk\testcases\deploymentTemplate
  • Soubory parametrů: \arm-ttk\testcases\deploymentParameters
  • createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
  • Všechny soubory: \arm-ttk\testcases\AllFiles

Přidání vlastního testu

Pokud chcete přidat vlastní test, vytvořte soubor se konvencí pro vytváření názvů: Your-Custom-Test-Name.test.ps1.

Test může získat šablonu jako parametr objektu nebo parametr řetězce. Obvykle používáte jeden nebo druhý, ale můžete použít obojí.

Parametr objektu použijte, když potřebujete získat část šablony a iterovat jejími vlastnostmi. Test, který používá parametr objektu, má následující formát:

param(
  [Parameter(Mandatory=$true,Position=0)]
  [PSObject]
  $TemplateObject
)

# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message

Objekt šablony má následující vlastnosti:

  • $schema
  • contentVersion
  • parameters
  • variables
  • resources
  • outputs

Kolekci parametrů můžete získat například pomocí $TemplateObject.parameters .

Parametr řetězce použijte, když potřebujete provést řetězcovou operaci s celou šablonou. Test, který používá parametr řetězce, má následující formát:

param(
  [Parameter(Mandatory)]
  [string]
  $TemplateText
)

# Implement test logic that performs string operations.
# Output error with: Write-Error -Message

Můžete například spustit regulární výraz parametru řetězce a zjistit, jestli se používá konkrétní syntaxe.

Další informace o implementaci testu najdete v dalších testech v této složce.

Integrace s Azure Pipelines

Testovací sadu nástrojů můžete přidat do kanálu Azure Pipelines. Pomocí kanálu můžete test spustit pokaždé, když je šablona aktualizována, nebo ji spustit jako součást procesu nasazení.

Nejjednodušší způsob, jak přidat testovací sadu nástrojů do kanálu, je pomocí rozšíření třetích stran. K dispozici jsou následující dvě rozšíření:

Nebo můžete implementovat vlastní úlohy. Následující příklad ukazuje, jak stáhnout testovací sadu nástrojů.

{
  "environment": {},
  "enabled": true,
  "continueOnError": false,
  "alwaysRun": false,
  "displayName": "Download TTK",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "New-Item '$(ttk.folder)' -ItemType Directory\nInvoke-WebRequest -uri '$(ttk.uri)' -OutFile \"$(ttk.folder)/$(ttk.asset.filename)\" -Verbose\nGet-ChildItem '$(ttk.folder)' -Recurse\n\nWrite-Host \"Expanding files...\"\nExpand-Archive -Path '$(ttk.folder)/*.zip' -DestinationPath '$(ttk.folder)' -Verbose\n\nWrite-Host \"Expanded files found:\"\nGet-ChildItem '$(ttk.folder)' -Recurse",
    "errorActionPreference": "stop",
    "failOnStderr": "false",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

Další příklad ukazuje, jak spustit testy.

{
  "environment": {},
  "enabled": true,
  "continueOnError": true,
  "alwaysRun": false,
  "displayName": "Run Best Practices Tests",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "Import-Module $(ttk.folder)/arm-ttk/arm-ttk.psd1 -Verbose\n$testOutput = @(Test-AzTemplate -TemplatePath \"$(sample.folder)\")\n$testOutput\n\nif ($testOutput | ? {$_.Errors }) {\n   exit 1 \n} else {\n    Write-Host \"##vso[task.setvariable variable=result.best.practice]$true\"\n    exit 0\n} \n",
    "errorActionPreference": "continue",
    "failOnStderr": "true",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

Další kroky