練習 - 使用測試工具組撰寫並執行自訂測試

已完成

身為產品小組的成員,您知道能夠實作一些小組或領域特定規則相當重要。 達成此目標的方法就是將規則實作為測試。 您接著可以使用測試工具組來執行這些測試。

撰寫並執行自訂測試

您將會撰寫自訂測試,並使用測試工具組工具加以執行。 您也會更正部署範本,以確保會通過測試。 自訂測試將會檢查所有參數,確認其皆遵循命名規則。 此規則正是您小組對產品的領域特定需求。

建議您針對此練習開啟兩個文字編輯器:

  • 撰寫自訂測試。 找出測試工具組安裝目錄的子目錄 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": []
}

建立自訂測試

  1. 開啟 Visual Studio Code 並移至測試工具組的安裝目錄。 前往 arm-ttk/testcases/deploymentTemplate 子目錄。 執行下列命令:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟該目錄。

  2. 建立名為 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"
    

    將文字編輯器保持開啟。 您稍後會編輯此檔案。

執行自訂測試

遵循下列步驟執行自訂測試:

  1. 開啟新的終端視窗,或重複使用舊的。

  2. 移至至您建立 azuredeploy.json 的目錄。 執行下列命令以啟動 Visual Studio Code:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟範本目錄。

  3. 從 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.
    
  4. 在終端中執行 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 工作階段中,就無須再次執行匯入命令。

  5. 在終端機中執行 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
    

    既然您已找到該測試,請將此終端視窗保持開啟。 稍後您將會加以重複使用。

重構自訂測試

現在,您將以適當的方式實作自訂測試。

  1. 返回包含 Custom-ParameterNaming.test.ps1 檔案的文字編輯器。

    注意

    如果不小心關閉 Visual Studio Code,請移至 arm-ttk/testcases/deploymentTemplate 子目錄,然後開啟 Custom-ParameterNaming.test.ps1

  2. 將檔案內容取代為下列程式碼:

    <#
    .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,並顯示適當的錯誤訊息。

更新範本檔案

您現在要將參數新增至範本檔案。

  1. 選取包含 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'

結果指出您的測試可正常運作。 讓我們變更部署檔案以確保是這種情況。

更正範本檔案

此時,您想要透過變更範本檔案,使其遵循自訂測試所配置的規則,來驗證您自訂測試的正確性。

  1. 在顯示 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。 理論上,此參數現在應該會通過測試。 讓我們來加以驗證。

  2. 繼續使用相同的 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": []
}

建立自訂測試

  1. 開啟終端機。 移至您的測試工具組安裝目錄。 前往 arm-ttk/testcases/deploymentTemplate 子目錄。 執行下列命令:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟該目錄。

  2. 建立名為 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"
    

    將文字編輯器保持開啟。 您稍後會編輯此檔案。

執行自訂測試

遵循下列步驟執行自訂測試:

  1. 開啟新的終端視窗,或重複使用舊的。

  2. 移至至您建立 azuredeploy.json 的目錄。 執行下列命令以啟動 Visual Studio Code:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟範本目錄。

  3. 從 Visual Code,選取頂端功能表中的 [終端]>[新增終端],以開啟整合式終端。 在終端機中執行下列命令,以啟動 PowerShell 殼層:

    pwsh
    

    您會看到如下所示的輸出:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. 在終端中執行 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 工作階段中,就無須再次執行匯入命令。

  5. 在終端機中執行 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
    

    既然您已找到該測試,請將此終端視窗保持開啟。 稍後您將會加以重複使用。

重構自訂測試

現在,您將以適當的方式實作自訂測試。

  1. 返回包含 Custom-ParameterNaming.test.ps1 檔案的文字編輯器。

    注意

    如果不小心關閉 Visual Studio Code,請移至 arm-ttk/testcases/deploymentTemplate 子目錄,然後開啟 Custom-ParameterNaming.test.ps1

  2. 將檔案內容取代為下列程式碼:

    <#
    .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,並顯示適當的錯誤訊息。

更新範本檔案

您現在要將參數新增至範本檔案。

  1. 選取包含 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'

結果指出您的測試可正常運作。 讓我們變更部署檔案以確保是這種情況。

更正範本檔案

此時,您想要透過變更範本檔案,使其遵循自訂測試所配置的規則,來驗證您自訂測試的正確性。

  1. 在顯示 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。 理論上,此參數現在應該會通過測試。 讓我們來加以驗證。

  2. 繼續使用相同的 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": []
}

建立自訂測試

  1. 開啟終端機。

  2. 移至您的測試工具組安裝目錄。

  3. 前往 arm-ttk\testcases\deploymentTemplate 子目錄。

  4. 執行下列命令:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟該目錄。

  5. 建立名為 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"
    

    將文字編輯器保持開啟。 您稍後會編輯此檔案。

執行自訂測試

遵循下列步驟執行自訂測試:

  1. 開啟新的終端視窗,或重複使用舊的。

  2. 移至您建立 azuredeploy.json 的目錄。

  3. 執行下列命令以啟動 Visual Studio Code:

    code .
    

    注意

    手動開啟 Visual Studio Code,若 Visual Studio Code 不在路徑上,請開啟範本目錄。

  4. 從 Visual Studio Code 開啟整合式終端機。 啟動命令選擇區,輸入 PowerShell,然後選取 [顯示整合式終端]

  5. 在終端中執行下列命令:

    注意

    在匯入模組之前,請將 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 工作階段中,就無須再次執行匯入命令。

  6. 在終端機中執行 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
    

    既然您已找到該測試,請將此終端視窗保持開啟。 稍後您將會加以重複使用。

重構自訂測試

現在,您將以適當的方式實作自訂測試。

  1. 返回包含 Custom-ParameterNaming.test.ps1 檔案的文字編輯器。

    注意

    如果不小心關閉 Visual Studio Code,請移至 testcases/deploymentTemplate 子目錄,然後開啟 Custom-ParameterNaming.test.ps1 檔案。

  2. 將檔案內容取代為下列程式碼:

    <#
    .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,並顯示適當的錯誤訊息。

更新範本檔案

您現在要將參數新增至範本檔案。

  1. 選取包含 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'

結果指出您的測試可正常運作。 讓我們變更部署檔案以確保是這種情況。

更正範本檔案

此時,您想要透過變更範本檔案,使其遵循自訂測試所配置的規則,來驗證您自訂測試的正確性。

  1. 在顯示 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。 理論上,此參數現在應該會通過測試。 讓我們來加以驗證。

  2. 繼續使用相同的 Visual Studio Code 執行個體,並在整合式終端中執行 Test-AzTemplate

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    輸出現在看起來如下:

    Validating custom\azuredeploy.json
      Custom ParameterNaming
        [+] Custom ParameterNaming (9 ms)
    

成功! 您已實作並執行自訂測試。 您也已更正部署範本,使其符合測試的條件。