练习 - 使用测试工具包创作和运行自定义测试
产品团队的成员知道必须能够实施一些团队规则或域特定的规则。 要实现此目的,一种方法是将规则作为测试来实施。 然后,可使用测试工具包运行这些测试。
创作和运行自定义测试
你将创作一个自定义测试,然后使用测试工具包工具来运行该测试。 此外,需要更正部署模板以确保测试通过。 自定义测试将寻求验证所有参数是否都遵循命名规则。 此规则是你正在工作的团队对产品的域专属要求。
建议为此练习打开两个文本编辑器:
- 创作自定义测试。 找到测试工具包安装目录的子目录 arm-ttk/testcases/deploymentTemplate/ 的路径。 你将从此处运行 Visual Studio Code,在其中创建和编辑自定义测试。
- 创作模板文件并运行测试。 选择要用于此路径的位置。 建议从此路径启动 Visual Studio Code 的实例,以便在系统询问你时,你可轻松编辑 azuredeploy.json 文件。 使用此 Visual Studio Code 实例启动集成终端,以便轻松运行测试。
创建模板文件
选择目录,然后创建一个名为 azuredeploy.json 的文件。
警告
确保所选目录为空,不包含任何子目录。
为该目录提供以下内容:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
创建自定义测试
打开 Visual Studio Code,然后转到测试工具包的安装目录。 转到子目录 arm-ttk/testcases/deploymentTemplate 中。 运行以下命令:
code .
注意
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开目录。
创建一个名为 Custom-ParameterNaming.test.ps1 的自定义测试文件。 为文件提供以下内容:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
使文本编辑器保持打开状态。 稍后会编辑此文件。
运行自定义测试
按照以下步骤运行自定义测试:
打开新的终端窗口或重用旧的终端窗口。
转到创建 azuredeploy.json 所在的目录。 运行以下命令来启动 Visual Studio Code:
code .
备注
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开模板目录。
在 Visual Studio Code 中,通过从顶部菜单中选择“终端”>“新终端”来打开集成终端。 在终端中运行以下命令,启动 PowerShell shell:
pwsh
应看到与以下内容类似的输出:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
在终端中运行
Import-Module
。备注
在导入模块之前,将 path/to/arm-ttk/arm-ttk.psd1 替换为已下载的测试工具包的路径。
Import-Module path/to/arm-ttk/arm-ttk.psd1
提示
如果将工具下载或克隆到“下载”目录,则路径将类似于 /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1。
现在可以使用该工具了。 只要处于同一 PowerShell 会话中,就无需再次运行导入命令。
在终端中运行
Test-AzTemplate
,启动测试运行:Test-AzTemplate -TemplatePath .
输出如下所示。 请注意,突出显示的行显示了测试:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
现已找到测试,将此终端窗口保持打开状态。 稍后会重复使用该窗口。
重构自定义测试
现在,将为该自定义测试提供适当的实现。
返回到包含文件 Custom-ParameterNaming.test.ps1 的文本编辑器。
备注
如果不小心关闭了 Visual Studio Code,请转到子目录 arm-ttk/testcases/deploymentTemplate,然后打开 Custom-ParameterNaming.test.ps1。
将文件内容替换为以下代码:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
前面的代码将循环访问所有参数。 它将检查
name
属性,并检查该名称是否以前缀tailwind
开头。 如果检查的参数与命名规则不匹配,则代码将调用Write-Error
cmdlet,并显示适当的错误消息。
更新模板文件
现在,将向模板文件添加参数。
选择包含 azuredeploy.json 的文本编辑器,然后将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
上述模板内容定义了一个不符合命名规则的参数
location
,因为其中缺少tailwind
前缀。
重新运行测试工具包
现在你已编写了一个自定义测试。 但模板文件命名不符合要求。 因此,即将进行的测试运行预计会失败。 请执行以下步骤来确保这一点。
使用现有的 Visual Studio Code 集成终端窗口,其中已启动 PowerShell 且已导入测试工具包。
在 Visual Studio Code 中,在集成终端运行 Test-AzTemplate
:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
上面的命令使用参数 -Test
运行,该参数以测试名称作为输入。 你已提供 Custom-ParameterNaming
作为参数,这意味着将仅运行新开发的测试。
提示
在开发测试时,一种很好的做法是使用 -Test
参数,因为它会限制运行的内容和终端输出的大小。
此命令会生成以下输出:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
该结果表明你的测试工作正常。 通过更改部署文件来确保这一点。
更正模板文件
此时,你需要更改模板文件以遵守自定义测试列出的规则,从而验证自定义测试是否正确。
还是在显示 azuredeploy.json 文件的 Visual Studio Code 实例中,将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
名为
location
的参数已重命名为tailwindLocation
。 理论上,此参数现在应该会通过测试。 让我们验证一下。继续使用相同的 Visual Studio Code 实例,并在集成终端中运行
Test-AzTemplate
:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
输出现在如下所示:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
成功! 你已实现并运行了自定义测试。 你还更正了部署模板以匹配测试条件。
创作和运行自定义测试
你将创作一个自定义测试,然后使用测试工具包工具来运行该测试。 此外,需要更正部署模板以确保测试通过。 自定义测试将寻求验证所有参数是否都遵循命名规则。 此规则是你正在工作的团队对产品的域专属要求。
建议为此练习打开两个文本编辑器:
- 创作自定义测试。 找到测试工具包安装目录的子目录 arm-ttk/testcases/deploymentTemplate/ 的路径。 你将从此处运行 Visual Studio Code,在其中创建和编辑自定义测试。
- 创作模板文件并运行测试。 选择要用于此路径的位置。 建议从此路径启动 Visual Studio Code 的实例,以便在系统询问你时,你可轻松编辑 azuredeploy.json 文件。 使用此 Visual Studio Code 实例启动集成终端,以便轻松运行测试。
创建模板文件
选择目录,然后创建一个名为 azuredeploy.json 的文件。
警告
确保所选目录为空,不包含任何子目录。
为该目录提供以下内容:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
创建自定义测试
打开终端。 转到测试工具包的安装目录。 转到子目录 arm-ttk/testcases/deploymentTemplate 中。 运行以下命令:
code .
注意
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开目录。
创建一个名为 Custom-ParameterNaming.test.ps1 的自定义文件。 为文件提供以下内容:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
使文本编辑器保持打开状态。 稍后会编辑此文件。
运行自定义测试
按照以下步骤运行自定义测试:
打开新的终端窗口或重用旧的终端窗口。
转到创建 azuredeploy.json 所在的目录。 运行以下命令来启动 Visual Studio Code:
code .
备注
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开模板目录。
在 Visual Code 中,通过从顶部菜单中选择“终端”>“新终端”来打开集成终端。 在终端中运行以下命令,启动 PowerShell shell:
pwsh
应看到与以下内容类似的输出:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
在终端中运行
Import-Module
。备注
在导入模块之前,将 path/to/arm-ttk/arm-ttk.psd1 替换为已下载的测试工具包的路径。
Import-Module path/to/arm-ttk/arm-ttk.psd1
提示
如果将工具下载或克隆到“下载”目录,则路径将类似于 /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1。
现在可以使用该工具了。 只要处于同一 PowerShell 会话中,就无需再次运行导入命令。
在终端中运行
Test-AzTemplate
:Test-AzTemplate -TemplatePath .
输出如下所示。 请注意,突出显示的行显示了测试:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
现已找到测试,将此终端窗口保持打开状态。 稍后会重复使用该窗口。
重构自定义测试
现在,将为该自定义测试提供适当的实现。
返回到包含文件 Custom-ParameterNaming.test.ps1 的文本编辑器。
备注
如果不小心关闭了 Visual Studio Code,请转到子目录 arm-ttk/testcases/deploymentTemplate,然后打开 Custom-ParameterNaming.test.ps1。
将文件内容替换为以下代码:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
前面的代码将循环访问所有参数。 它将检查
name
属性,并检查该名称是否以前缀tailwind
开头。 如果检查的参数与命名规则不匹配,则代码将调用Write-Error
cmdlet,并显示适当的错误消息。
更新模板文件
现在,将向模板文件添加参数。
选择包含 azuredeploy.json 的文本编辑器,然后将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
上述模板内容定义了一个不符合命名规则的参数
location
,因为其中缺少tailwind
前缀。
重新运行测试工具包
现在你已编写了一个自定义测试。 但模板文件命名不符合要求。 因此,即将进行的测试运行预计会失败。 请执行以下步骤来确保这一点。
备注
使用现有的 Visual Studio Code 集成终端窗口,其中已启动 PowerShell 且已导入测试工具包。
在 Visual Studio Code 中,在集成终端运行 Test-AzTemplate
:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
上面的命令使用参数 -Test
运行,该参数以测试名称作为输入。 你已提供 Custom-ParameterNaming
作为参数,这意味着将仅运行新开发的测试。
提示
在开发测试时,一种很好的做法是使用此参数,因为它会限制正在运行的内容和终端输出的大小。
此命令会生成以下输出:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
该结果表明你的测试工作正常。 通过更改部署文件来确保这一点。
更正模板文件
此时,你需要更改模板文件以遵守自定义测试列出的规则,从而验证自定义测试是否正确。
还是在显示 azuredeploy.json 文件的 Visual Studio Code 实例中,将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
名为
location
的参数已重命名为tailwindLocation
。 理论上,此参数现在应该会通过测试。 让我们验证一下。继续使用相同的 Visual Studio Code 实例,并在集成终端中运行
Test-AzTemplate
:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
输出现在如下所示:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
成功! 你已实现并运行了自定义测试。 你还更正了部署模板以匹配测试条件。
创作和运行自定义测试
你将创作一个自定义测试,然后使用测试工具包工具来运行该测试。 此外,需要更正部署模板以确保测试通过。 自定义测试将寻求验证所有参数是否都遵循命名规则。 此规则是你正在工作的团队对产品的域专属要求。
建议为此练习打开两个文本编辑器:
- 创作自定义测试。 找到测试工具包安装目录的子目录 arm-ttk\testcases\deploymentTemplate\ 的路径。 你将从此处运行 Visual Studio Code,在其中创建和编辑自定义测试。
- 创作模板文件并运行测试。 选择要用于此路径的位置。 建议从此路径启动 Visual Studio Code 的实例,以便在系统询问你时,你可轻松编辑 azuredeploy.json 文件。 使用此 Visual Studio Code 实例启动集成终端,以便轻松运行测试。
创建模板文件
选择目录,然后创建一个名为 azuredeploy.json 的文件。
警告
确保所选目录为空,不包含任何子目录。
为该目录提供以下内容:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
创建自定义测试
打开终端。
转到测试工具包的安装目录。
转到子目录 arm-ttk\testcases\deploymentTemplate 中。
运行以下命令:
code .
注意
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开目录。
创建一个名为 Custom-ParameterNaming.test.ps1 的文件,并为文件提供以下内容:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
使文本编辑器保持打开状态。 稍后会编辑此文件。
运行自定义测试
按照以下步骤运行自定义测试:
打开新的终端窗口或重用旧的终端窗口。
转到创建 azuredeploy.json 所在的目录。
运行以下命令来启动 Visual Studio Code:
code .
备注
如果路径中没有 Visual Studio Code,则手动打开 Visual Studio Code 并打开模板目录。
在 Visual Studio Code 中打开集成终端。 打开命令面板,键入 PowerShell,然后选择“显示集成终端”。
在终端中运行以下命令:
备注
在导入模块之前,将 path\to\arm-ttk\arm-ttk.psd1 替换为已下载的测试工具包的路径。
Import-Module path\to\arm-ttk\arm-ttk.psd1
提示
如果将工具下载或克隆到“下载”目录,则路径将类似于 C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1。
现在可以使用该工具了。 只要处于同一 PowerShell 会话中,就无需再次运行导入命令。
在终端中运行
Test-AzTemplate
:Test-AzTemplate -TemplatePath .
输出如下所示。 请注意,突出显示的行显示了测试:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
现已找到测试,将此终端窗口保持打开状态。 稍后会重复使用该窗口。
重构自定义测试
现在,将为该自定义测试提供适当的实现。
返回到包含文件 Custom-ParameterNaming.test.ps1 的文本编辑器。
备注
如果不小心关闭了 Visual Studio Code,请转到子目录 testcases/deploymentTemplate,然后打开文件 Custom-ParameterNaming.test.ps1。
将文件内容替换为以下代码:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
前面的代码将循环访问所有参数。 它将检查
name
属性,并检查该名称是否以前缀tailwind
开头。 如果检查的参数与命名规则不匹配,则代码将调用Write-Error
cmdlet,并显示适当的错误消息。
更新模板文件
现在,将向模板文件添加参数。
选择包含 azuredeploy.json 的文本编辑器,然后将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
上述模板内容定义了一个不符合命名规则的参数
location
,因为其中缺少tailwind
前缀。
重新运行测试工具包
现在你已编写了一个自定义测试。 但模板文件命名不符合要求。 因此,即将进行的测试运行预计会失败。 请执行以下步骤来确保这一点。
使用现有的 Visual Studio Code 集成终端窗口,其中已启动 PowerShell 且已导入测试工具包。
在 Visual Studio Code 中,在集成终端运行 Test-AzTemplate
:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
上面的命令使用参数 -Test
运行,该参数以测试名称作为输入。 你已提供 Custom-ParameterNaming
作为参数,这意味着将仅运行新开发的测试。
提示
在开发测试时,一种很好的做法是使用此参数,因为它会限制正在运行的内容和终端输出的大小。
此命令会生成以下输出:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
该结果表明你的测试工作正常。 通过更改部署文件来确保这一点。
更正模板文件
此时,你需要更改模板文件以遵守自定义测试列出的规则,从而验证自定义测试是否正确。
还是在显示 azuredeploy.json 文件的 Visual Studio Code 实例中,将文件内容更改为以下内容:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
名为
location
的参数已重命名为tailwindLocation
。 理论上,此参数现在应该会通过测试。 让我们验证一下。继续使用相同的 Visual Studio Code 实例,并在集成终端中运行
Test-AzTemplate
:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
输出现在如下所示:
Validating custom\azuredeploy.json Custom ParameterNaming [+] Custom ParameterNaming (9 ms)
成功! 你已实现并运行了自定义测试。 你还更正了部署模板以匹配测试条件。