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ů:
- Testovací případy pro šablony ARM
- Testovací případy pro soubory parametrů
- Testovací případy pro createUiDefinition.json
- Testovací případy pro všechny soubory
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
Pokud ještě Nemáte PowerShell, nainstalujte PowerShell na Windows.
Stáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.
Spusťte PowerShell.
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.
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-FileNaimportujte modul.
Import-Module .\arm-ttk.psd1Ke spuštění testů použijte následující příkaz:
Test-AzTemplate -TemplatePath \path\to\template
Instalace v systému Linux
Pokud ještě Nemáte PowerShell, nainstalujte PowerShell v Linuxu.
Stáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.
Spusťte PowerShell.
pwshPř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.
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-FileNaimportujte modul.
Import-Module ./arm-ttk.psd1Ke spuštění testů použijte následující příkaz:
Test-AzTemplate -TemplatePath /path/to/template
Instalace v systému macOS
Pokud ještě Nemáte PowerShell, nainstalujte PowerShell v systému macOS.
Nainstalujte
coreutils:brew install coreutilsStáhněte si nejnovější .zip pro testovací sadu nástrojů a extrahujte ho.
Spusťte PowerShell.
pwshPř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.
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-FileNaimportujte modul.
Import-Module ./arm-ttk.psd1Ke 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 [?] .
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:
$schemacontentVersionparametersvariablesresourcesoutputs
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
- Další informace o testech šablon najdete v tématu Testovací případy pro šablony ARM.
- Pokud chcete testovat soubory parametrů, podívejte se na testovací případy pro soubory parametrů.
- Testy createUiDefinition najdete v souboru createUiDefinition.jsonv části Testovací případy.
- Další informace o testech pro všechny soubory najdete v tématu Testovací případy pro všechny soubory.
- Další modul Microsoft Learn, který se zabývá používáním testovací sady nástrojů, najdete v tématu Ověření prostředků Azure pomocí testovacího modulu Toolkit ARM.