如何使用ARM-TTK测试无主模板的自定义命名ARM模板?
你完全可以正常使用ARM-TTK的单元测试能力,不需要调整现有模板的命名规则,也不需要设置主模板与关联模板的对应关系。
你之前遇到的误报问题,是因为直接将整个目录作为测试目标传入ARM-TTK时,工具会默认触发主模板+关联模板的校验逻辑,找不到指定命名的入口文件就会抛出异常,和模板本身的语法、规范正确性无关。
最优实现方案为:用脚本批量遍历指定目录下的目标模板文件,逐个调用ARM-TTK的单文件测试接口即可,完全不会触发关联模板校验逻辑。
具体实现步骤(AZDO流水线场景)
- 步骤1:在流水线中预先安装ARM-TTK PowerShell模块,确保测试环境可用
- 步骤2:添加PowerShell任务,执行批量测试逻辑,示例代码如下:
# 配置项:修改为你实际的模板存放目录 $templateRootPath = "$(Build.SourcesDirectory)/business-templates" # 配置项:填写你选定要运行的ARM-TTK测试用例ID $targetTestCases = @( "DeploymentTemplate-Schema-IsValid", "Parameters-Property-Must-Exist", "Resources-API-Versions-Should-Be-Recent", "Outputs-Must-Not-Contain-Secrets" ) # 配置项:需要排除的文件规则,例如参数文件、非ARM模板的json文件 $excludeFilePattern = "*parameters.json" # 遍历所有符合要求的ARM模板文件 $templateFiles = Get-ChildItem -Path $templateRootPath -Filter "*.json" -Recurse | Where-Object { $_.Name -notlike $excludeFilePattern } $testFailed = $false foreach ($file in $templateFiles) { Write-Host "开始测试模板:$($file.FullName)" # 单文件调用ARM-TTK测试,指定目标测试用例,不触发关联模板校验 $testResult = Test-AzTemplate -TemplateFile $file.FullName -Test $targetTestCases # 统计失败用例 $failedCases = $testResult | Where-Object { $_.Passed -eq $false } if ($failedCases.Count -gt 0) { $testFailed = $true Write-Host "模板 $($file.Name) 测试不通过,失败用例如下:" $failedCases | ForEach-Object { Write-Host " - $($_.TestName): $($_.ErrorMessage)" } } } # 有测试失败时终止流水线,阻止PR合并 if ($testFailed) { exit 1 }
- 步骤3:可以按需添加测试结果发布步骤,ARM-TTK支持通过
-OutputFormat NUnit参数输出标准化测试报告,在AZDO中发布后可直接在PR界面查看具体失败项。
可选优化
如果仓库模板数量多,全量测试耗时久,可以调整脚本仅测试本次PR变更的模板文件,大幅提升流水线运行效率,只需要在遍历文件前通过git diff命令获取变更文件列表过滤即可。
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

