Exercício – Criar e executar testes personalizados com o kit de ferramentas de teste

Concluído

Como membro de uma equipe de produto, você sabe que é importante conseguir implementar algumas regras específicas do domínio ou da equipe. Uma forma de fazer isso é implementar as regras como testes. Em seguida, você pode executar esses testes usando o kit de ferramentas de teste.

Criar e executar um teste personalizado

Você criará um teste personalizado e usará a ferramenta kit de ferramentas de teste para executá-lo. Você também corrigirá o modelo de implantação para garantir que o teste seja aprovado. O teste personalizado buscará verificar se todos os parâmetros seguem uma regra de nomenclatura. Essa regra é um requisito específico de domínio para o produto no qual a equipe e você estão trabalhando.

Recomendamos que você tenha dois editores de texto abertos para este exercício:

  • Crie um teste personalizado. Localize o caminho do subdiretório arm-ttk/testcases/deploymentTemplate/ do diretório de instalação do kit de ferramentas de teste. Lá, você executará o Visual Studio Code, onde criará e editará um teste personalizado.
  • Crie um arquivo de modelo e execute testes. Selecione a localização desejada para esse caminho. Recomendamos que você inicie uma instância do Visual Studio Code nesse caminho para editar com facilidade o arquivo azuredeploy.json, quando solicitado. Inicie um terminal integrado com essa instância do Visual Studio Code para facilitar a execução de testes.

Criar o arquivo de modelo

Escolha um diretório e crie um arquivo chamado azuredeploy.json.

Aviso

Verifique se o diretório selecionado está vazio, sem subdiretórios.

Dê a ele o seguinte conteúdo:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Criar o teste personalizado

  1. Abra o Visual Studio Code e acesse o diretório de instalação do kit de ferramentas de teste. Coloque-se no subdiretório arm-ttk/testcases/deploymentTemplate. Execute o seguinte comando:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório se o Visual Studio Code não estiver no caminho.

  2. Crie um arquivo de teste personalizado chamado Custom-ParameterNaming. Test. ps1. Dê ao arquivo o seguinte conteúdo:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Deixe o editor de texto aberto. Você editará esse arquivo mais tarde.

Executar o teste personalizado

Execute o teste personalizado seguindo estas etapas:

  1. Abra uma nova janela de terminal ou reutilize a antiga.

  2. Acesse o diretório no qual você criou o azuredeploy.json. Execute o seguinte comando para iniciar o Visual Studio Code:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório do modelo se o Visual Studio Code não estiver no caminho.

  3. No Visual Studio Code, abra o terminal integrado selecionando Terminal>Novo Terminal no menu superior. Execute o seguinte comando no terminal para iniciar um shell do PowerShell:

    pwsh
    

    Você verá uma saída semelhante a esta:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. Execute Import-Module no terminal.

    Observação

    Antes de importar o módulo, substitua path/to/arm-ttk/arm-ttk.psd1 pelo caminho para o kit de ferramentas de teste baixado.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Dica

    Se você baixou ou clonou a ferramenta no diretório Downloads, o caminho é semelhante a: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Agora você está pronto para usar a ferramenta. Desde que você esteja na mesma sessão do PowerShell, não há necessidade de executar o comando de importação novamente.

  5. Execute Test-AzTemplate no terminal para iniciar uma execução de teste:

    Test-AzTemplate -TemplatePath .
    

    A saída é parecida com o exposto a seguir. Observe que as linhas realçadas mostram o teste:

    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
    

    Agora que você encontrou o teste, deixe essa janela do terminal aberta. Você a reutilizará mais tarde.

Refatorar o teste personalizado

Agora, você dará ao teste personalizado uma implementação adequada.

  1. Volte ao editor de texto que contém o arquivo Custom-ParameterNaming.test.ps1.

    Observação

    Se você tiver fechado o Visual Studio Code acidentalmente, acesse o subdiretório arm-ttk/testcases/deploymentTemplate e abra o Custom-ParameterNaming.test.ps1.

  2. Substitua o conteúdo do arquivo pelo seguinte código:

    <#
    .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
      }
    }
    

    O código anterior é iterado em todos os parâmetros. Ele inspeciona o atributo name e verifica se o nome começa com o prefixo tailwind. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdlet Write-Error com uma mensagem de erro adequada.

Atualizar o arquivo de modelo

Agora, você adicionará um parâmetro ao arquivo de modelo.

  1. Selecione o editor de texto que contém azuredeploy.json e altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O conteúdo do modelo anterior define um parâmetro chamado location que não atende à regra de nomenclatura, pois não tem o prefixo tailwind.

Executar novamente o kit de ferramentas de teste

Até agora, você escreveu um teste personalizado. No entanto, o nome do arquivo de modelo não atende ao requisito. Portanto, você espera uma falha da execução de teste futura. Verifique se isso acontece executando a etapa a seguir.

Use a janela do terminal integrado do Visual Studio Code existente na qual o PowerShell foi iniciado e o kit de ferramentas de teste foi importado.

No Visual Studio Code, execute Test-AzTemplate do terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

O comando acima é executado com o parâmetro -Test, que usa um nome de teste como entrada. Você forneceu Custom-ParameterNaming como um parâmetro, o que significa que apenas o teste recém-desenvolvido será executado.

Dica

O uso do parâmetro -Test é uma boa prática no desenvolvimento de um teste, pois limita o que está sendo executado e o tamanho da saída do terminal.

Esse comando resulta na seguinte saída:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

O resultado indica que o teste funciona. Vamos garantir que isso aconteça alterando o arquivo de implantação.

Corrigir o arquivo de modelo

Neste ponto, você deseja verificar a exatidão do teste personalizado alterando o arquivo de modelo para seguir as regras definidas pelo teste personalizado.

  1. Na mesma instância do Visual Studio Code que mostra o arquivo azuredeploy.json, altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O parâmetro chamado location foi renomeado para tailwindLocation. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.

  2. Continue com a mesma instância do Visual Studio Code e execute Test-AzTemplate no terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    A saída agora será semelhante ao seguinte:

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

Êxito! Você implementou e executou um teste personalizado. Você também corrigiu um modelo de implantação para corresponder à condição do teste.

Criar e executar um teste personalizado

Você criará um teste personalizado e usará a ferramenta kit de ferramentas de teste para executá-lo. Você também corrigirá o modelo de implantação para garantir que o teste seja aprovado. O teste personalizado buscará verificar se todos os parâmetros seguem uma regra de nomenclatura. Essa regra é um requisito específico de domínio para o produto no qual a equipe e você estão trabalhando.

Recomendamos que você tenha dois editores de texto abertos para este exercício:

  • Crie um teste personalizado. Localize o caminho do subdiretório arm-ttk/testcases/deploymentTemplate/ do diretório de instalação do kit de ferramentas de teste. Lá, você executará o Visual Studio Code, onde criará e editará um teste personalizado.
  • Crie um arquivo de modelo e execute testes. Selecione a localização desejada para esse caminho. Recomendamos que você inicie uma instância do Visual Studio Code nesse caminho para editar com facilidade o arquivo azuredeploy.json, quando solicitado. Inicie um terminal integrado com essa instância do Visual Studio Code para facilitar a execução de testes.

Criar o arquivo de modelo

Escolha um diretório e crie um arquivo chamado azuredeploy.json.

Aviso

Verifique se o diretório selecionado está vazio, sem subdiretórios.

Dê a ele o seguinte conteúdo:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Criar o teste personalizado

  1. Abra um terminal. Acesse o diretório de instalação do kit de ferramentas de teste. Coloque-se no subdiretório arm-ttk/testcases/deploymentTemplate. Execute o seguinte comando:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório se o Visual Studio Code não estiver no caminho.

  2. Crie um arquivo personalizado chamado de Custom-ParameterNaming.test.ps1. Dê ao arquivo o seguinte conteúdo:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Deixe o editor de texto aberto. Você editará esse arquivo mais tarde.

Executar o teste personalizado

Execute o teste personalizado seguindo estas etapas:

  1. Abra uma nova janela de terminal ou reutilize a antiga.

  2. Acesse o diretório no qual você criou o azuredeploy.json. Execute o seguinte comando para iniciar o Visual Studio Code:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório do modelo se o Visual Studio Code não estiver no caminho.

  3. No Visual Code, abra o terminal integrado selecionando Terminal>Novo Terminal no menu superior. Execute o seguinte comando no terminal para iniciar um shell do PowerShell:

    pwsh
    

    Você verá uma saída semelhante a esta:

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    
  4. Execute Import-Module no terminal.

    Observação

    Antes de importar o módulo, substitua path/to/arm-ttk/arm-ttk.psd1 pelo caminho para o kit de ferramentas de teste baixado.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Dica

    Se você baixou ou clonou a ferramenta no diretório Downloads, o caminho é semelhante a: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Agora você está pronto para usar a ferramenta. Desde que você esteja na mesma sessão do PowerShell, não há necessidade de executar o comando de importação novamente.

  5. Execute Test-AzTemplate no terminal:

    Test-AzTemplate -TemplatePath .
    

    A saída é parecida com o exposto a seguir. Observe que as linhas realçadas mostram o teste:

    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
    

    Agora que você encontrou o teste, deixe essa janela do terminal aberta. Você a reutilizará mais tarde.

Refatorar o teste personalizado

Agora, você dará ao teste personalizado uma implementação adequada.

  1. Volte ao editor de texto que contém o arquivo Custom-ParameterNaming.test.ps1.

    Observação

    Se você tiver fechado o Visual Studio Code acidentalmente, acesse o subdiretório arm-ttk/testcases/deploymentTemplate e abra o Custom-ParameterNaming.test.ps1.

  2. Substitua o conteúdo do arquivo pelo seguinte código:

    <#
    .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
      }
    }
    

    O código anterior é iterado em todos os parâmetros. Ele inspeciona o atributo name e verifica se o nome começa com o prefixo tailwind. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdlet Write-Error com uma mensagem de erro adequada.

Atualizar o arquivo de modelo

Agora, você adicionará um parâmetro ao arquivo de modelo.

  1. Selecione o editor de texto que contém azuredeploy.json e altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O conteúdo do modelo anterior define um parâmetro chamado location que não atende à regra de nomenclatura, pois não tem o prefixo tailwind.

Executar novamente o kit de ferramentas de teste

Até agora, você escreveu um teste personalizado. No entanto, o nome do arquivo de modelo não atende ao requisito. Portanto, você espera uma falha da execução de teste futura. Verifique se isso acontece executando a etapa a seguir.

Observação

Use a janela do terminal integrado do Visual Studio Code existente na qual o PowerShell foi iniciado e o kit de ferramentas de teste foi importado.

No Visual Studio Code, execute Test-AzTemplate do terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

O comando anterior é executado com o parâmetro -Test, que usa um nome de teste como entrada. Você forneceu Custom-ParameterNaming como um parâmetro, o que significa que apenas o teste recém-desenvolvido será executado.

Dica

O uso desse parâmetro é uma boa prática ao desenvolver um teste, pois limita o que está sendo executado e o tamanho da saída do terminal.

Esse comando resulta na seguinte saída:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

O resultado indica que o teste funciona. Vamos garantir que isso aconteça alterando o arquivo de implantação.

Corrigir o arquivo de modelo

Neste ponto, você deseja verificar a exatidão do teste personalizado alterando o arquivo de modelo para seguir as regras definidas pelo teste personalizado.

  1. Na mesma instância do Visual Studio Code que mostra o arquivo azuredeploy.json, altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O parâmetro chamado location foi renomeado para tailwindLocation. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.

  2. Continue com a mesma instância do Visual Studio Code e execute Test-AzTemplate no terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    A saída agora será semelhante ao seguinte:

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

Êxito! Você implementou e executou um teste personalizado. Você também corrigiu um modelo de implantação para corresponder à condição do teste.

Criar e executar um teste personalizado

Você criará um teste personalizado e usará a ferramenta kit de ferramentas de teste para executá-lo. Você também corrigirá o modelo de implantação para garantir que o teste seja aprovado. O teste personalizado buscará verificar se todos os parâmetros seguem uma regra de nomenclatura. Essa regra é um requisito específico de domínio para o produto no qual a equipe e você estão trabalhando.

Recomendamos que você tenha dois editores de texto abertos para este exercício:

  • Crie um teste personalizado. Localize o caminho do subdiretório arm-ttk\testcases\deploymentTemplate\ do diretório de instalação do kit de ferramentas de teste. Lá, você executará o Visual Studio Code, onde criará e editará um teste personalizado.
  • Crie um arquivo de modelo e execute testes. Selecione a localização desejada para esse caminho. Recomendamos que você inicie uma instância do Visual Studio Code nesse caminho para editar com facilidade o arquivo azuredeploy.json, quando solicitado. Inicie um terminal integrado com essa instância do Visual Studio Code para facilitar a execução de testes.

Criar o arquivo de modelo

Escolha um diretório e crie um arquivo chamado azuredeploy.json.

Aviso

Verifique se o diretório selecionado está vazio, sem subdiretórios.

Dê a ele o seguinte conteúdo:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

Criar o teste personalizado

  1. Abra um terminal.

  2. Acesse o diretório de instalação do kit de ferramentas de teste.

  3. Coloque-se no subdiretório arm-ttk\testcases\deploymentTemplate.

  4. Execute o comando a seguir:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório se o Visual Studio Code não estiver no caminho.

  5. Crie um arquivo chamado de Custom-ParameterNaming.test.ps1 e forneça ao arquivo o seguinte conteúdo:

    param(
    [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array
    [PSObject]
    $MainTemplateResources
    )
    
    Write-Error "To be implemented"
    

    Deixe o editor de texto aberto. Você editará esse arquivo mais tarde.

Executar o teste personalizado

Execute o teste personalizado seguindo estas etapas:

  1. Abra uma nova janela de terminal ou reutilize a antiga.

  2. Acesse o diretório no qual você criou o azuredeploy.json.

  3. Execute o seguinte comando para iniciar o Visual Studio Code:

    code .
    

    Observação

    Abra o Visual Studio Code manualmente e o diretório do modelo se o Visual Studio Code não estiver no caminho.

  4. No Visual Studio Code, abra o terminal integrado. Abra a paleta de comandos, digite PowerShell e selecione Mostrar terminal integrado.

  5. Execute o seguinte comando no terminal:

    Observação

    Antes de importar o módulo, substitua path\to\arm-ttk\arm-ttk.psd1 pelo caminho para o kit de ferramentas de teste baixado.

    Import-Module path\to\arm-ttk\arm-ttk.psd1
    

    Dica

    Se você baixou ou clonou a ferramenta no diretório Downloads, o caminho é semelhante a: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Agora você está pronto para usar a ferramenta. Desde que você esteja na mesma sessão do PowerShell, não há necessidade de executar o comando de importação novamente.

  6. Execute Test-AzTemplate no terminal:

    Test-AzTemplate -TemplatePath .
    

    A saída é parecida com o exposto a seguir. Observe que as linhas realçadas mostram o teste:

    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
    

    Agora que você encontrou o teste, deixe essa janela do terminal aberta. Você a reutilizará mais tarde.

Refatorar o teste personalizado

Agora, você dará ao teste personalizado uma implementação adequada.

  1. Volte ao editor de texto que contém o arquivo Custom-ParameterNaming.test.ps1.

    Observação

    Se você tiver fechado o Visual Studio Code acidentalmente, acesse o subdiretório testcases/deploymentTemplate e abra o arquivo Custom-ParameterNaming.test.ps1.

  2. Substitua o conteúdo do arquivo pelo seguinte código:

    <#
    .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
      }
    }
    

    O código anterior é iterado em todos os parâmetros. Ele inspeciona o atributo name e verifica se o nome começa com o prefixo tailwind. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdlet Write-Error com uma mensagem de erro adequada.

Atualizar o arquivo de modelo

Agora, você adicionará um parâmetro ao arquivo de modelo.

  1. Selecione o editor de texto que contém azuredeploy.json e altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O conteúdo do modelo anterior define um parâmetro chamado location que não atende à regra de nomenclatura, pois não tem o prefixo tailwind.

Executar novamente o kit de ferramentas de teste

Até agora, você escreveu um teste personalizado. No entanto, o nome do arquivo de modelo não atende ao requisito. Portanto, você espera uma falha da execução de teste futura. Verifique se isso acontece executando a etapa a seguir.

Use a janela do terminal integrado do Visual Studio Code existente na qual o PowerShell foi iniciado e o kit de ferramentas de teste foi importado.

No Visual Studio Code, execute Test-AzTemplate do terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

O comando acima é executado com o parâmetro -Test, que usa um nome de teste como entrada. Você forneceu Custom-ParameterNaming como um parâmetro, o que significa que apenas o teste recém-desenvolvido será executado.

Dica

O uso desse parâmetro é uma boa prática ao desenvolver um teste, pois limita o que está sendo executado e o tamanho da saída do terminal.

Esse comando resulta na seguinte saída:

Validating custom\azuredeploy.json
 deploymentTemplate
   [-] Custom ParameterNaming (2ms)
       Parameter 'location' must start with prefix 'tailwind'

O resultado indica que o teste funciona. Vamos garantir que isso aconteça alterando o arquivo de implantação.

Corrigir o arquivo de modelo

Neste ponto, você deseja verificar a exatidão do teste personalizado alterando o arquivo de modelo para seguir as regras definidas pelo teste personalizado.

  1. Na mesma instância do Visual Studio Code que mostra o arquivo azuredeploy.json, altere o conteúdo do arquivo para o seguinte conteúdo:

    {
      "$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": []
    }
    

    O parâmetro chamado location foi renomeado para tailwindLocation. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.

  2. Continue com a mesma instância do Visual Studio Code e execute Test-AzTemplate no terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    A saída agora será semelhante ao seguinte:

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

Êxito! Você implementou e executou um teste personalizado. Você também corrigiu um modelo de implantação para corresponder à condição do teste.