You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:27:02