Exercício – Criar e executar testes personalizados com o kit de ferramentas de teste
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
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.
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:
Abra uma nova janela de terminal ou reutilize a antiga.
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.
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.
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.
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.
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.
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 prefixotailwind
. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdletWrite-Error
com uma mensagem de erro adequada.
Atualizar o arquivo de modelo
Agora, você adicionará um parâmetro ao arquivo de modelo.
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 prefixotailwind
.
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.
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 paratailwindLocation
. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.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
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.
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:
Abra uma nova janela de terminal ou reutilize a antiga.
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.
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.
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.
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.
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.
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 prefixotailwind
. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdletWrite-Error
com uma mensagem de erro adequada.
Atualizar o arquivo de modelo
Agora, você adicionará um parâmetro ao arquivo de modelo.
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 prefixotailwind
.
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.
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 paratailwindLocation
. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.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
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 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.
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:
Abra uma nova janela de terminal ou reutilize a antiga.
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.
No Visual Studio Code, abra o terminal integrado. Abra a paleta de comandos, digite PowerShell e selecione Mostrar terminal integrado.
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.
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.
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.
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 prefixotailwind
. Se o parâmetro inspecionado não corresponder à regra de nomenclatura, o código invocará o cmdletWrite-Error
com uma mensagem de erro adequada.
Atualizar o arquivo de modelo
Agora, você adicionará um parâmetro ao arquivo de modelo.
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 prefixotailwind
.
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.
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 paratailwindLocation
. Em teoria, esse parâmetro agora deverá ser aprovado no teste. Vamos verificar isso.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.