使用测试工具包模块应用最佳做法

已完成

开发 Azure 资源管理器模板(ARM 模板)时,可通过多种方法更轻松地创建有效模板并提供建议,以提高这些模板的质量。 这些建议是什么?为什么遵从这些建议对模板有帮助?

存在针对不同级别的建议:从参数和变量到应用于资源的建议。 让我们大致了解一下这些建议,看看遵循这些建议有哪些好处:

  • 可维护性。 在开发模板时(从首次创作模板到更新模板等各项操作),随着时间的流逝,保持模板整洁有序成为了一项挑战。 模板不断增长,参数和变量也是如此。 了解各个项有哪些用途以及如何适当地使用它们非常重要。

    想象一下这样的场景:参数的名称对你不友好,难以理解它的用途。 或者你正在使用不该使用的硬编码值,然后发生了更改,Azure 服务中断。 所有这些问题造成了负担,你必须理解你正在查看的内容,稍后还要忽略这些内容。 严格约束命名方式和清理方式可帮助减轻这些场景造成的影响。

  • 正确性。 你可能会尝试以正确的方式进行命名,但要跟踪的规则太多。 在这种情况下,需要一种工具来提醒强制实施所有这些规则和规定。

  • 灵活性。 确保模板足够灵活,可在任何环境中使用。 如果未正确地将模板参数化,则可能无法重用。

  • 扩展性。 有时,你想要添加自己的建议。 公司或团队可能有自己的规则要强制实施。

注意

根据这些建议检查代码有时称为 Lint 分析。

ARM 模板测试工具包

使用测试工具是一个不错的主意,这样就可以专注于创作,同时知道工具将发现任何问题并改进模板。 存在此类工具:ARM 模板测试工具包,有时也称为 ARM-TTK。 该工具通过运行一系列测试来解决上述问题。 测试可分为以下几类:

  • 验证用户的意向。 此类别查看声明的变量和参数是否均使用;如果未全部使用,则发出警告。
  • 遵循安全做法。 另一个重要方面是确保模板不返回任何可能敏感的内容,例如 API 机密。
  • 使用适当的语言构造。 应使用一些语言构造或帮助程序函数,以便不依赖硬编码的值。

注意

这些是建议,而不是要求。 但我们强烈建议你遵循这些建议。

安装工具

该工具是 PowerShell 模块。 为能够运行该工具,需执行以下步骤:

  1. 安装 PowerShell。 根据使用的是 Linux、Mac 还是 Windows,此任务的执行方式有所不同。
  2. 下载模块。 模块托管在 GitHub 存储库中。 可从此处下载或通过 git clone 命令获取。
  3. 导入模块。 此步骤只是在 PowerShell 会话中输入的一行指令,这将使 ARM-TTK 命令可用。

下一个单元将介绍如何执行此操作。 安装工具后,即可在模板上运行测试了。

运行测试

运行测试涉及到使用适当的参数调用模块。 -TemplatePath 是必要参数,它需要指向部署模板文件位置的字符串。 该模板文件名必须是 azuredeploy.json 或 maintemplate.json。 因此,典型的测试运行可能类似于以下命令:

Test-AzTemplate -TemplatePath path/to/template

该工具测试模板文件,然后测试同一目录及其子文件夹中的所有模板文件。

测试运行的典型输出如下所示:

[+] adminUsername Should Not Be A Literal (24 ms)
[+] apiVersions Should Be Recent (18 ms)
[+] artifacts parameter (16 ms)
[+] DeploymentTemplate Schema Is Correct (17 ms)
[+] IDs Should Be Derived From ResourceIDs (15 ms)
[-] Location Should Not Be Hardcoded (41 ms)
     azuredeploy.json must use the location parameter, not resourceGroup().location (except when used as a default value in the main template)

成功的测试是用绿色编码的,并用 [+] 作为前缀。 失败的测试是用红色编码的,并带有前缀 [-]

使用测试参数配置测试运行

到目前为止,你了解了参数 -TemplatePath 是运行该工具时的必要参数。 该工具还接受可选参数。 通过可选参数,可运行特定文件或特定测试。 通过这些参数,可在创作或调试模板时进行更精细的控制。

参数 -File 用于运行特定文件。 参数 -Test 用于指定要运行的测试方案。

可通过以下方式使用参数:

  • 对单个文件运行测试。 你可能只想对当前正在处理的单个文件运行测试。 这样做的原因是,更容易集中精力创作特定模板文件。 另一个好处是,输出将包含更少的干扰项,仅显示你感兴趣的内容。 通过使用带有文件路径(包括文件名)的参数 -File,可以仅对相应文件运行测试。

    重要

    该参数仍然希望 azuredeploy.json 或 maintemplate.json 存在于指定位置。

  • 对所有文件运行一种类型的测试。 有时,你可能想要运行一种类型的测试,以确保仅满足该方案的条件。 可使用参数 -Test 来完成此任务。 此参数需要测试的全名(用括号括起来),例如“资源应具有位置”。