Använda ARM-malltestverktyg
Testverktyget Azure Resource Manager (ARM-mall) kontrollerar om mallen använder rekommenderade metoder. När mallen inte är kompatibel med rekommenderade metoder returneras en lista med varningar med de föreslagna ändringarna. Med hjälp av testverktygen kan du lära dig hur du undviker vanliga problem vid mallutveckling. Den här artikeln beskriver hur du kör testverktygslådan och hur du lägger till eller tar bort tester. Mer information om hur du kör tester eller hur du kör ett specifikt test finns i Testparametrar.
Verktygsuppsättningen är en uppsättning PowerShell-skript som kan köras från ett kommando i PowerShell eller CLI. Dessa tester är rekommendationer men inte krav. Du kan bestämma vilka tester som är relevanta för dina mål och anpassa vilka tester som körs.
Verktygslådan innehåller fyra uppsättningar tester:
- Testfall för ARM-mallar
- Testfall för parameterfiler
- Testfall för createUiDefinition.json
- Testfall för alla filer
Microsoft Learn
Mer information om ARM-mallens testverktyg och praktisk vägledning finns i Validate Azure resources by using the ARM Template Test Toolkit on Microsoft Learn.
Installera i Windows
Om du inte redan har PowerShell installerar du PowerShell på Windows.
Hämta den senaste .zip för testverktygslådan och extrahera den.
Starta PowerShell.
Navigera till mappen där du extraherade testverktygslådan. I den mappen navigerar du till mappen arm-ttk.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-FileImportera modulen.
Import-Module .\arm-ttk.psd1Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath \path\to\template
Installera på Linux
Om du inte redan har PowerShell installerar du PowerShell på Linux.
Hämta den senaste .zip för testverktygslådan och extrahera den.
Starta PowerShell.
pwshNavigera till mappen där du extraherade testverktygslådan. I den mappen navigerar du till mappen arm-ttk.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-FileImportera modulen.
Import-Module ./arm-ttk.psd1Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath /path/to/template
Installera på macOS
Om du inte redan har PowerShell installerar du PowerShell på macOS.
Installera
coreutils:brew install coreutilsHämta den senaste .zip för testverktygslådan och extrahera den.
Starta PowerShell.
pwshNavigera till mappen där du extraherade testverktygslådan. I den mappen navigerar du till mappen arm-ttk.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-FileImportera modulen.
Import-Module ./arm-ttk.psd1Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath /path/to/template
Resultatformat
Tester som klarar visas i grönt och föregås av [+] .
Tester som misslyckas visas i rött och föregås av [-] .
Tester med en varning visas i gult och föregås av [?] .
Textresultaten är:
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.
Testparametrar
När du anger parametern söker toolkiten i mappen efter en mall med namnet -TemplatePath azuredeploy.json eller maintemplate.json. Den testar den här mallen först och testar sedan alla andra mallar i mappen och dess undermappar. De andra mallarna testas som länkade mallar. Om sökvägen innehåller en fil med namnet createUiDefinition.jsonkörs tester som är relevanta för UI-definitionen. Tester körs också för parameterfiler och alla JSON-filer i mappen.
Test-AzTemplate -TemplatePath $TemplateFolder
Om du vill testa en fil i mappen lägger du till -File parametern . Mappen måste dock fortfarande ha en huvudmall med namnet azuredeploy.json eller maintemplate.json.
Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json
Som standard körs alla tester. Om du vill ange enskilda tester som ska köras använder -Test du parametern och anger testnamnet. Testnamnen finns i ARM-mallar, parameterfiler, createUiDefinition.jsonoch alla filer.
Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"
Anpassa tester
Du kan anpassa standardtesterna eller skapa egna tester. Om du vill ta bort ett test permanent tar du bort .test.ps1-filen från mappen .
Verktygslådan har fyra mappar som innehåller standardtesterna som körs för specifika filtyper:
- ARM-mallar: \arm-ttk\testcases\deploymentTemplate
- Parameterfiler: \arm-ttk\testcases\deploymentParameters
- createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
- Alla filer: \arm-ttk\testcases\AllFiles
Lägga till ett anpassat test
Om du vill lägga till ett eget test skapar du en fil med namngivningskonventionen: Your-Custom-Test-Name.test.ps1.
Testet kan hämta mallen som en objektparameter eller en strängparameter. Vanligtvis använder du den ena eller den andra, men du kan använda båda.
Använd objektparametern när du behöver hämta ett avsnitt av mallen och iterera genom dess egenskaper. Ett test som använder objektparametern har följande format:
param(
[Parameter(Mandatory=$true,Position=0)]
[PSObject]
$TemplateObject
)
# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message
Mallobjektet har följande egenskaper:
$schemacontentVersionparametersvariablesresourcesoutputs
Du kan till exempel hämta parametersamlingen med $TemplateObject.parameters .
Använd strängparametern när du behöver göra en strängåtgärd på hela mallen. Ett test som använder strängparametern har följande format:
param(
[Parameter(Mandatory)]
[string]
$TemplateText
)
# Implement test logic that performs string operations.
# Output error with: Write-Error -Message
Du kan till exempel köra ett reguljärt uttryck av strängparametern för att se om en specifik syntax används.
Mer information om hur du implementerar testet finns i de andra testerna i den mappen.
Integrera med Azure Pipelines
Du kan lägga till testverktygslådan i azure-pipelinen. Med en pipeline kan du köra testet varje gång mallen uppdateras eller köra den som en del av distributionsprocessen.
Det enklaste sättet att lägga till testverktygssatsen i din pipeline är med tillägg från tredje part. Följande två tillägg är tillgängliga:
Eller så kan du implementera egna uppgifter. I följande exempel visas hur du laddar ned testverktygslådan.
{
"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": ""
}
}
I nästa exempel visas hur du kör testerna.
{
"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": ""
}
}
Nästa steg
- Mer information om malltesterna finns i Testfall för ARM-mallar.
- Information om hur du testar parameterfiler finns i Testfall för parameterfiler.
- För createUiDefinition-tester, se Testfall för createUiDefinition.json.
- Mer information om tester för alla filer finns i Testfall för alla filer.
- En Microsoft Learn som beskriver hur du använder testverktygen finns i Verifiera Azure-resurser med arm-mallens testverktyg.