練習 - 使用測試工具組撰寫並執行自訂測試
身為產品小組的成員,您知道能夠實作一些小組或領域特定規則相當重要。 達成此目標的方法就是將規則實作為測試。 您接著可以使用測試工具組來執行這些測試。
撰寫並執行自訂測試
您將會撰寫自訂測試,並使用測試工具組工具加以執行。 您也會更正部署範本,以確保會通過測試。 自訂測試將會檢查所有參數,確認其皆遵循命名規則。 此規則正是您小組對產品的領域特定需求。
建議您針對此練習開啟兩個文字編輯器:
- 撰寫自訂測試。 找出測試工具組安裝目錄的子目錄 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 殼層:
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/<使用者>/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 殼層:
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/<使用者>/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\<使用者>\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)
成功! 您已實作並執行自訂測試。 您也已更正部署範本,使其符合測試的條件。