Exercício – Criar e executar testes personalizados com o toolkit de testes
Como membro de uma equipa do produto, sabe que é importante conseguir implementar algumas regras específicas do domínio ou da equipa. Uma forma de o fazer é ao implementar as regras como testes. Em seguida, pode executar estes testes com o toolkit de testes.
Cria e executar um teste personalizado
Irá criar um teste personalizado e utilizar a ferramenta do toolkit de testes para o executar. Também irá corrigir o modelo de implementação para garantir que passa o teste. O teste personalizado irá procurar verificar se todos os parâmetros seguem uma regra de nomenclatura. Esta regra é um requisito específico do domínio no produto em que a equipa está a trabalhar.
Recomendamos que 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 toolkit de testes. A partir daqui, irá executar o Visual Studio Code, onde irá criar e editar um teste personalizado.
- Crie um ficheiro de modelo e execute testes. Selecione a localização desejada para este caminho. Recomendamos que inicie uma instância do Visual Studio Code a partir deste caminho, para que possa editar facilmente o ficheiro azuredeploy.json quando lhe for pedido. Inicie um terminal integrado com esta instância do Visual Studio Code para que seja mais fácil executar testes.
Criar o ficheiro de modelo
Escolha um diretório e crie um ficheiro chamado azuredeploy.json.
Aviso
Verifique se o diretório selecionado está vazio e não tem subdiretórios.
Adicione os seguintes conteúdos ao mesmo:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Crie o teste personalizado
Abra o Visual Studio Code e aceda ao seu diretório de instalação do toolkit de testes. Aceda ao subdiretório arm-ttk/testcases/deploymentTemplate. Execute o seguinte comando:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório, se o Visual Studio Code não estiver no caminho.
Crie um ficheiro de teste personalizado chamado Custom-ParameterNaming.test.ps1. Atribua o seguinte conteúdo ao ficheiro:
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. Irá editar este ficheiro mais tarde.
Executar o teste personalizado
Execute o teste personalizado ao seguir estes passos:
Abra uma nova janela do terminal ou reutilize uma antiga.
Aceda ao diretório onde criou azuredeploy.json. Execute o seguinte comando para iniciar o Visual Studio Code:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório de modelo, se o Visual Studio Code não estiver no caminho.
No Visual Studio Code, abra o terminal integrado ao selecionar Terminal>New Terminal (Terminal > Novo Terminal) no menu superior. Execute o seguinte comando no terminal para iniciar um shell do PowerShell:
pwsh
Vê um resultado semelhante a este:
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.Nota
Antes de importar o módulo, substitua path/to/arm-ttk/arm-ttk.psd1 pelo caminho para o toolkit de testes transferido.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Gorjeta
Se você baixou ou clonou a ferramenta para o diretório Downloads , o caminho ficaria assim: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Agora, está pronto para utilizar a ferramenta. Desde que esteja na mesma sessão do PowerShell, não terá de voltar a executar o comando de importação.
Execute
Test-AzTemplate
no terminal, para iniciar uma execução de testes:Test-AzTemplate -TemplatePath .
Sua saída é semelhante à seguinte. Observe que as linhas destacadas mostram seu 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 encontrou o teste, deixe esta janela do terminal aberta. Irá reutilizá-la mais tarde.
Refatorizar o teste personalizado
Agora, irá dar ao teste personalizado uma implementação adequada.
Volte ao editor de texto que tem o ficheiro Custom-ParameterNaming.test.ps1.
Nota
Se fechou acidentalmente o Visual Studio Code, aceda ao subdiretório arm-ttk/testcases/deploymentTemplate e abra Custom-ParameterNaming.test.ps1.
Substitua os conteúdos do ficheiro 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 itera através de todos os parâmetros. Ele inspeciona o
name
atributo 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á oWrite-Error
cmdlet com uma mensagem de erro adequada.
Atualizar o ficheiro de modelo
Agora, irá adicionar um parâmetro ao ficheiro de modelo.
Selecione o editor de texto que contém azuredeploy.json e altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
que não cumpre a regra de nomenclatura, porque não tem o prefixotailwind
.
Executar novamente o toolkit de testes
Neste momento, tem um teste personalizado escrito. No entanto, a nomenclatura do seu ficheiro de modelo não cumpre o requisito. Sendo assim, está à espera que a próxima execução de teste falhe. Certifique-se de que é esse o caso ao seguir o passo seguinte.
Utilize a janela do terminal integrado do Visual Studio Code existente em que o PowerShell foi iniciado e para a qual o toolkit de testes foi importado.
No Visual Studio Code, execute Test-AzTemplate
a partir 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 parâmetro, o que significa que apenas seu teste recém-desenvolvido será executado.
Gorjeta
Usar o -Test
parâmetro é uma boa prática quando você está desenvolvendo um teste, pois ele limita o que está sendo executado e o tamanho da saída do terminal.
Este comando dá o seguinte resultado:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
O resultado indica que o seu teste funciona. Vamos garantir que é esse o caso ao alterar o ficheiro de implementação.
Corrigir o ficheiro de modelo
Neste momento, irá querer verificar se o seu teste personalizado está correto, ao alterar o ficheiro de modelo para que esteja em conformidade com as regras estabelecidas pelo teste personalizado.
Na mesma instância do Visual Studio Code que mostra o ficheiro azuredeploy.json, altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
foi renomeado paratailwindLocation
. Teoricamente, este parâmetro deverá agora passar o teste. Vamos verificar.Continue com a mesma instância do Visual Studio Code e execute
Test-AzTemplate
no terminal integrado:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
O seu resultado agora tem o seguinte aspeto:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Êxito! Implementou e executou um teste personalizado. Também corrigiu um modelo de implementação para corresponder à condição do teste.
Cria e executar um teste personalizado
Irá criar um teste personalizado e utilizar a ferramenta do toolkit de testes para o executar. Também irá corrigir o modelo de implementação para garantir que passa o teste. O teste personalizado irá procurar verificar se todos os parâmetros seguem uma regra de nomenclatura. Esta regra é um requisito específico do domínio no produto em que a equipa está a trabalhar.
Recomendamos que 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 toolkit de testes. A partir daqui, irá executar o Visual Studio Code, onde irá criar e editar um teste personalizado.
- Crie um ficheiro de modelo e execute testes. Selecione a localização desejada para este caminho. Recomendamos que inicie uma instância do Visual Studio Code a partir deste caminho, para que possa editar facilmente o ficheiro azuredeploy.json quando lhe for pedido. Inicie um terminal integrado com esta instância do Visual Studio Code para que seja mais fácil executar testes.
Criar o ficheiro de modelo
Escolha um diretório e crie um ficheiro chamado azuredeploy.json.
Aviso
Verifique se o diretório selecionado está vazio e não tem subdiretórios.
Adicione os seguintes conteúdos ao mesmo:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Crie o teste personalizado
Abra um terminal. Aceda ao seu diretório de instalação do toolkit de testes. Aceda ao subdiretório arm-ttk/testcases/deploymentTemplate. Execute o seguinte comando:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório, se o Visual Studio Code não estiver no caminho.
Crie um ficheiro personalizado chamado Custom-ParameterNaming.test.ps1. Atribua o seguinte conteúdo ao ficheiro:
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. Irá editar este ficheiro mais tarde.
Executar o teste personalizado
Execute o teste personalizado ao seguir estes passos:
Abra uma nova janela do terminal ou reutilize uma antiga.
Aceda ao diretório onde criou azuredeploy.json. Execute o seguinte comando para iniciar o Visual Studio Code:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório de modelo, se o Visual Studio Code não estiver no caminho.
No Visual Code, abra o terminal integrado ao selecionar Terminal>New Terminal (Terminal > Novo Terminal) no menu superior. Execute o seguinte comando no terminal para iniciar um shell do PowerShell:
pwsh
Vê um resultado semelhante a este:
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.Nota
Antes de importar o módulo, substitua path/to/arm-ttk/arm-ttk.psd1 pelo caminho para o toolkit de testes transferido.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Gorjeta
Se você baixou ou clonou a ferramenta para o diretório Downloads , o caminho ficaria assim: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Agora, está pronto para utilizar a ferramenta. Desde que esteja na mesma sessão do PowerShell, não terá de voltar a executar o comando de importação.
Execute
Test-AzTemplate
no terminal:Test-AzTemplate -TemplatePath .
Sua saída é semelhante à seguinte. Observe que as linhas destacadas mostram seu 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 encontrou o teste, deixe esta janela do terminal aberta. Irá reutilizá-la mais tarde.
Refatorizar o teste personalizado
Agora, irá dar ao teste personalizado uma implementação adequada.
Volte ao editor de texto que tem o ficheiro Custom-ParameterNaming.test.ps1.
Nota
Se fechou acidentalmente o Visual Studio Code, aceda ao subdiretório arm-ttk/testcases/deploymentTemplate e abra Custom-ParameterNaming.test.ps1.
Substitua os conteúdos do ficheiro 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 itera através de todos os parâmetros. Ele inspeciona o
name
atributo 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á oWrite-Error
cmdlet com uma mensagem de erro adequada.
Atualizar o ficheiro de modelo
Agora, irá adicionar um parâmetro ao ficheiro de modelo.
Selecione o editor de texto que contém azuredeploy.json e altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
que não cumpre a regra de nomenclatura, porque não tem o prefixotailwind
.
Executar novamente o toolkit de testes
Neste momento, tem um teste personalizado escrito. No entanto, a nomenclatura do seu ficheiro de modelo não cumpre o requisito. Sendo assim, está à espera que a próxima execução de teste falhe. Certifique-se de que é esse o caso ao seguir o passo seguinte.
Nota
Utilize a janela do terminal integrado do Visual Studio Code existente em que o PowerShell foi iniciado e para a qual o toolkit de testes foi importado.
No Visual Studio Code, execute Test-AzTemplate
a partir do terminal integrado:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
O comando anterior é executado com o parâmetro chamado -Test
, que usa um nome de teste como entrada. Você forneceu Custom-ParameterNaming
como parâmetro, o que significa que apenas seu teste recém-desenvolvido será executado.
Gorjeta
Utilizar este parâmetro é uma boa prática ao desenvolver um teste, uma vez que limita o que está a ser executado e o tamanho do resultado do terminal.
Este comando dá o seguinte resultado:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
O resultado indica que o seu teste funciona. Vamos garantir que é esse o caso ao alterar o ficheiro de implementação.
Corrigir o ficheiro de modelo
Neste momento, irá querer verificar se o seu teste personalizado está correto, ao alterar o ficheiro de modelo para que esteja em conformidade com as regras estabelecidas pelo teste personalizado.
Na mesma instância do Visual Studio Code que mostra o ficheiro azuredeploy.json, altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
foi renomeado paratailwindLocation
. Teoricamente, este parâmetro deverá agora passar o teste. Vamos verificar.Continue com a mesma instância do Visual Studio Code e execute
Test-AzTemplate
no terminal integrado:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
O seu resultado agora tem o seguinte aspeto:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Êxito! Implementou e executou um teste personalizado. Também corrigiu um modelo de implementação para corresponder à condição do teste.
Cria e executar um teste personalizado
Irá criar um teste personalizado e utilizar a ferramenta do toolkit de testes para o executar. Também irá corrigir o modelo de implementação para garantir que passa o teste. O teste personalizado irá procurar verificar se todos os parâmetros seguem uma regra de nomenclatura. Esta regra é um requisito específico do domínio no produto em que a equipa está a trabalhar.
Recomendamos que 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. A partir daqui, irá executar o Visual Studio Code, onde irá criar e editar um teste personalizado.
- Crie um ficheiro de modelo e execute testes. Selecione a localização desejada para este caminho. Recomendamos que inicie uma instância do Visual Studio Code a partir deste caminho, para que possa editar facilmente o ficheiro azuredeploy.json quando lhe for pedido. Inicie um terminal integrado com esta instância do Visual Studio Code para que seja mais fácil executar testes.
Criar o ficheiro de modelo
Escolha um diretório e crie um ficheiro chamado azuredeploy.json.
Aviso
Verifique se o diretório selecionado está vazio e não tem subdiretórios.
Adicione os seguintes conteúdos ao mesmo:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Crie o teste personalizado
Abra um terminal.
Aceda ao seu diretório de instalação do toolkit de testes.
Coloque-se no subdiretório arm-ttk\testcases\deploymentTemplate.
Execute o seguinte comando:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório, se o Visual Studio Code não estiver no caminho.
Crie um ficheiro chamado Custom-ParameterNaming.test.ps1 e atribua-lhe 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. Irá editar este ficheiro mais tarde.
Executar o teste personalizado
Execute o teste personalizado ao seguir estes passos:
Abra uma nova janela do terminal ou reutilize uma antiga.
Aceda ao diretório onde criou azuredeploy.json.
Execute o seguinte comando para iniciar o Visual Studio Code:
code .
Nota
Abra o Visual Studio Code manualmente e abra o diretório de modelo, se o Visual Studio Code não estiver no caminho.
No Visual Studio Code, abra o terminal integrado. Abra a paleta de comandos, escreva PowerShell e selecione Show integrated terminal (Mostrar terminal integrado).
Execute o seguinte comando no terminal:
Nota
Antes de importar o módulo, substitua path\to\arm-ttk\arm-ttk.psd1 pelo caminho para o toolkit de testes transferido.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Gorjeta
Se você baixou ou clonou a ferramenta para o diretório Downloads , o caminho seria parecido com este: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Agora, está pronto para utilizar a ferramenta. Desde que esteja na mesma sessão do PowerShell, não terá de voltar a executar o comando de importação.
Execute
Test-AzTemplate
no terminal:Test-AzTemplate -TemplatePath .
Sua saída é semelhante à seguinte. Observe que as linhas destacadas mostram seu 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 encontrou o teste, deixe esta janela do terminal aberta. Irá reutilizá-la mais tarde.
Refatorizar o teste personalizado
Agora, irá dar ao teste personalizado uma implementação adequada.
Volte ao editor de texto que tem o ficheiro Custom-ParameterNaming.test.ps1.
Nota
Se fechou acidentalmente o Visual Studio Code, aceda ao subdiretório testcases/deploymentTemplate e abra o ficheiro Custom-ParameterNaming.test.ps1.
Substitua os conteúdos do ficheiro 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 itera através de todos os parâmetros. Ele inspeciona o
name
atributo 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á oWrite-Error
cmdlet com uma mensagem de erro adequada.
Atualizar o ficheiro de modelo
Agora, irá adicionar um parâmetro ao ficheiro de modelo.
Selecione o editor de texto que contém azuredeploy.json e altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
que não cumpre a regra de nomenclatura, porque não tem o prefixotailwind
.
Executar novamente o toolkit de testes
Neste momento, tem um teste personalizado escrito. No entanto, a nomenclatura do seu ficheiro de modelo não cumpre o requisito. Sendo assim, está à espera que a próxima execução de teste falhe. Certifique-se de que é esse o caso ao seguir o passo seguinte.
Utilize a janela do terminal integrado do Visual Studio Code existente em que o PowerShell foi iniciado e para a qual o toolkit de testes foi importado.
No Visual Studio Code, execute Test-AzTemplate
a partir 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 parâmetro, o que significa que apenas seu teste recém-desenvolvido será executado.
Gorjeta
Utilizar este parâmetro é uma boa prática ao desenvolver um teste, uma vez que limita o que está a ser executado e o tamanho do resultado do terminal.
Este comando dá o seguinte resultado:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
O resultado indica que o seu teste funciona. Vamos garantir que é esse o caso ao alterar o ficheiro de implementação.
Corrigir o ficheiro de modelo
Neste momento, irá querer verificar se o seu teste personalizado está correto, ao alterar o ficheiro de modelo para que esteja em conformidade com as regras estabelecidas pelo teste personalizado.
Na mesma instância do Visual Studio Code que mostra o ficheiro azuredeploy.json, altere os conteúdos do ficheiro para o seguinte:
{ "$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 nomeado
location
foi renomeado paratailwindLocation
. Teoricamente, este parâmetro deverá agora passar o teste. Vamos verificar.Continue com a mesma instância do Visual Studio Code e execute
Test-AzTemplate
no terminal integrado:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
O seu resultado agora tem o seguinte aspeto:
Validating custom\azuredeploy.json Custom ParameterNaming [+] Custom ParameterNaming (9 ms)
Êxito! Implementou e executou um teste personalizado. Também corrigiu um modelo de implementação para corresponder à condição do teste.