Exercice - Créer et exécuter des tests personnalisés avec le kit de ressources de test
En tant que membre d’une équipe produit, vous savez qu’il est important de pouvoir implémenter des règles spécifiques à l’équipe ou au domaine. Pour ce faire, vous pouvez implémenter les règles sous forme de tests. Vous pouvez ensuite exécuter ces tests à l’aide de la boîte à outils de test.
Créer et exécuter un test personnalisé
Vous allez créer un test personnalisé et utiliser l’outil Kit de ressources de test pour l’exécuter. Vous allez également corriger le modèle de déploiement pour que le test réussisse. Le test personnalisé va vérifier que tous les paramètres suivent une règle de nommage. Cette règle est une exigence spécifique au domaine sur le produit de l’équipe sur lequel vous travaillez.
Pour cet exercice, nous vous recommandons de disposer de deux éditeurs de texte ouverts :
- Créez un test personnalisé. Localisez le chemin du sous-répertoire arm-ttk/testcases/deploymentTemplate/ du répertoire d’installation du kit de ressources de test. À partir de là, vous exécuterez Visual Studio Code, où vous créerez et modifierez un test personnalisé.
- Créez un fichier de modèle et exécutez des tests. Vous sélectionnez l’emplacement de votre choix pour ce chemin d’accès. Nous vous recommandons de démarrer une instance de Visual Studio Code à partir de ce chemin afin de pouvoir modifier facilement le fichier azuredeploy.json quand vous y êtes invité. Démarrez un terminal intégré avec cette instance de Visual Studio Code pour faciliter l’exécution des tests.
Créer le fichier de modèle
Choisissez un répertoire et créez un fichier appelé azuredeploy.json.
Avertissement
Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.
Ajoutez-y le contenu suivant :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Créer le test personnalisé
Ouvrez Visual Studio Code et accédez au répertoire d’installation de la boîte à outils de test. Placez-vous dans le sous-répertoire arm-ttk/testcases/deploymentTemplate. Exécutez la commande suivante :
code .
Notes
Ouvrez VS Code manuellement et ouvrez le répertoire si Visual Studio Code ne se trouve pas sur le chemin.
Créez un fichier de test personnalisé nommé Custom-ParameterNaming.test.ps1. Donnez le contenu suivant au fichier :
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Laissez l’éditeur de texte ouvert. Vous modifierez ce fichier ultérieurement.
Exécuter le test personnalisé
Exécutez le test personnalisé en suivant ces étapes :
Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.
Accédez au répertoire où vous avez créé azuredeploy.json. Exécutez la commande suivante pour démarrer Visual Studio Code :
code .
Notes
Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.
Dans Visual Studio Code, ouvrez le terminal intégré en sélectionnant Terminal>Nouveau terminal dans le menu du haut. Exécutez la commande suivante dans le terminal pour démarrer un shell PowerShell :
pwsh
La sortie doit ressembler à ceci :
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Exécutez
Import-Module
dans le terminal.Notes
Avant d’importer le module, remplacez path/to/arm-ttk/arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Conseil
Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : /Users/<utilisateur>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.
Exécutez
Test-AzTemplate
dans le terminal pour démarrer une série de tests :Test-AzTemplate -TemplatePath .
La sortie ressemble à ce qui suit. Notez que les lignes en surbrillance mettent en évidence votre test :
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
Maintenant que vous avez trouvé le test, laissez cette fenêtre de terminal ouverte. Vous la réutiliserez ultérieurement.
Refactoriser le test personnalisé
À présent, vous allez modifier le test personnalisé pour que son implémentation soit correcte.
Revenez à l’éditeur de texte ouvert sur le fichier Custom-ParameterNaming.test.ps1.
Notes
Si vous avez accidentellement fermé Visual Studio Code, accédez au sous-répertoire arm-ttk/testcases/deploymentTemplate et ouvrez Custom-ParameterNaming.test.ps1.
Remplacez le contenu du fichier par le code suivant :
<# .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 } }
Le code précédent itère à travers tous les paramètres. Il inspecte l’attribut
name
et vérifie si le nom commence par le préfixetailwind
. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commandeWrite-Error
avec un message d’erreur approprié.
Mettre à jour le fichier de modèle
Vous allez maintenant ajouter un paramètre au fichier de modèle.
Sélectionnez l’éditeur de texte contenant azuredeploy.json et remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le contenu du modèle précédent définit un paramètre nommé
location
qui ne respecte pas la règle de nommage, car le préfixetailwind
est absent.
Réexécuter le kit de ressources de test
À ce stade, vous avez écrit un test personnalisé. Cependant, le nom de votre fichier de modèle ne satisfait pas à l’exigence. Ainsi, vous vous attendez à ce que l’exécution du test à venir échoue. Assurez-vous que c’est le cas en effectuant l’étape suivante.
Utilisez la fenêtre de terminal intégrée de Visual Studio Code existante où PowerShell a été démarré et où le kit de ressources de test a été importé.
Dans Visual Studio Code, exécutez Test-AzTemplate
dans le terminal intégré :
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La commande précédente est exécutée avec le paramètre -Test
, qui accepte en entrée un nom de test. Vous avez fourni Custom-ParameterNaming
en tant que paramètre, ce qui signifie que seul le test que vous venez de développer sera exécuté.
Conseil
L’utilisation du paramètre -Test
est une bonne pratique lors du développement d’un test, car il limite ce qui est exécuté ainsi que la taille de la sortie sur le terminal.
Cette commande produit la sortie suivante :
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Le résultat indique que votre test fonctionne. Vérifions que c’est le cas en modifiant le fichier de déploiement.
Corriger le fichier de modèle
À ce stade, vous voulez vérifier la correction de votre test personnalisé en modifiant le fichier de modèle de façon à respecter les règles définies par le test personnalisé.
Dans la même instance de Visual Studio Code qui montre le fichier azuredeploy.json, remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le paramètre nommé
location
a été renommétailwindLocation
. En théorie, ce paramètre doit maintenant réussir le test. Vérifions cela.Continuez avec la même instance de Visual Studio Code et exécutez
Test-AzTemplate
dans le terminal intégré :Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La sortie se présente maintenant comme suit :
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Opération réussie. Vous avez implémenté et exécuté un test personnalisé. Vous avez également corrigé un modèle de déploiement pour qu’il corresponde à la condition du test.
Créer et exécuter un test personnalisé
Vous allez créer un test personnalisé et utiliser l’outil Kit de ressources de test pour l’exécuter. Vous allez également corriger le modèle de déploiement pour que le test réussisse. Le test personnalisé va vérifier que tous les paramètres suivent une règle de nommage. Cette règle est une exigence spécifique au domaine sur le produit de l’équipe sur lequel vous travaillez.
Pour cet exercice, nous vous recommandons de disposer de deux éditeurs de texte ouverts :
- Créez un test personnalisé. Localisez le chemin du sous-répertoire arm-ttk/testcases/deploymentTemplate/ du répertoire d’installation du kit de ressources de test. À partir de là, vous exécuterez Visual Studio Code, où vous créerez et modifierez un test personnalisé.
- Créez un fichier de modèle et exécutez des tests. Vous sélectionnez l’emplacement de votre choix pour ce chemin d’accès. Nous vous recommandons de démarrer une instance de Visual Studio Code à partir de ce chemin afin de pouvoir modifier facilement le fichier azuredeploy.json quand vous y êtes invité. Démarrez un terminal intégré avec cette instance de Visual Studio Code pour faciliter l’exécution des tests.
Créer le fichier de modèle
Choisissez un répertoire et créez un fichier appelé azuredeploy.json.
Avertissement
Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.
Ajoutez-y le contenu suivant :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Créer le test personnalisé
Ouvrez un terminal. Accédez à votre répertoire d’installation du Kit de ressources de test. Placez-vous dans le sous-répertoire arm-ttk/testcases/deploymentTemplate. Exécutez la commande suivante :
code .
Notes
Ouvrez VS Code manuellement et ouvrez le répertoire si Visual Studio Code ne se trouve pas sur le chemin.
Créez un fichier personnalisé nommé Custom-ParameterNaming.test.ps1. Donnez le contenu suivant au fichier :
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Laissez l’éditeur de texte ouvert. Vous modifierez ce fichier ultérieurement.
Exécuter le test personnalisé
Exécutez le test personnalisé en suivant ces étapes :
Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.
Accédez au répertoire où vous avez créé azuredeploy.json. Exécutez la commande suivante pour démarrer Visual Studio Code :
code .
Notes
Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.
Dans Visual code, ouvrez le terminal intégré en sélectionnant Terminal>Nouveau terminal dans le menu du haut. Exécutez la commande suivante dans le terminal pour démarrer un shell PowerShell :
pwsh
La sortie doit ressembler à ceci :
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Exécutez
Import-Module
dans le terminal.Notes
Avant d’importer le module, remplacez path/to/arm-ttk/arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Conseil
Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : /Users/<utilisateur>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.
Exécutez
Test-AzTemplate
dans le terminal :Test-AzTemplate -TemplatePath .
La sortie ressemble à ce qui suit. Notez que les lignes en surbrillance mettent en évidence votre test :
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
Maintenant que vous avez trouvé le test, laissez cette fenêtre de terminal ouverte. Vous la réutiliserez ultérieurement.
Refactoriser le test personnalisé
À présent, vous allez modifier le test personnalisé pour que son implémentation soit correcte.
Revenez à l’éditeur de texte ouvert sur le fichier Custom-ParameterNaming.test.ps1.
Notes
Si vous avez accidentellement fermé Visual Studio Code, accédez au sous-répertoire arm-ttk/testcases/deploymentTemplate et ouvrez Custom-ParameterNaming.test.ps1.
Remplacez le contenu du fichier par le code suivant :
<# .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 } }
Le code précédent itère à travers tous les paramètres. Il inspecte l’attribut
name
et vérifie si le nom commence par le préfixetailwind
. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commandeWrite-Error
avec un message d’erreur approprié.
Mettre à jour le fichier de modèle
Vous allez maintenant ajouter un paramètre au fichier de modèle.
Sélectionnez l’éditeur de texte contenant azuredeploy.json et remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le contenu du modèle précédent définit un paramètre nommé
location
qui ne respecte pas la règle de nommage, car le préfixetailwind
est absent.
Réexécuter le kit de ressources de test
À ce stade, vous avez écrit un test personnalisé. Cependant, le nom de votre fichier de modèle ne satisfait pas à l’exigence. Ainsi, vous vous attendez à ce que l’exécution du test à venir échoue. Assurez-vous que c’est le cas en effectuant l’étape suivante.
Notes
Utilisez la fenêtre de terminal intégrée de Visual Studio Code existante où PowerShell a été démarré et où le kit de ressources de test a été importé.
Dans Visual Studio Code, exécutez Test-AzTemplate
dans le terminal intégré :
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La commande précédente est exécutée avec le paramètre -Test
, qui prend en entrée un nom de test. Vous avez fourni Custom-ParameterNaming
en tant que paramètre, ce qui signifie que seul le test que vous venez de développer sera exécuté.
Conseil
L’utilisation de ce paramètre est une bonne pratique lors du développement d’un test, car il limite ce qui est exécuté et la taille de la sortie sur le terminal.
Cette commande produit la sortie suivante :
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Le résultat indique que votre test fonctionne. Vérifions que c’est le cas en modifiant le fichier de déploiement.
Corriger le fichier de modèle
À ce stade, vous voulez vérifier la correction de votre test personnalisé en modifiant le fichier de modèle de façon à respecter les règles définies par le test personnalisé.
Dans la même instance de Visual Studio Code qui montre le fichier azuredeploy.json, remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le paramètre nommé
location
a été renommétailwindLocation
. En théorie, ce paramètre doit maintenant réussir le test. Vérifions cela.Continuez avec la même instance de Visual Studio Code et exécutez
Test-AzTemplate
dans le terminal intégré :Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La sortie se présente maintenant comme suit :
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Opération réussie. Vous avez implémenté et exécuté un test personnalisé. Vous avez également corrigé un modèle de déploiement pour qu’il corresponde à la condition du test.
Créer et exécuter un test personnalisé
Vous allez créer un test personnalisé et utiliser l’outil Kit de ressources de test pour l’exécuter. Vous allez également corriger le modèle de déploiement pour que le test réussisse. Le test personnalisé va vérifier que tous les paramètres suivent une règle de nommage. Cette règle est une exigence spécifique au domaine sur le produit de l’équipe sur lequel vous travaillez.
Pour cet exercice, nous vous recommandons de disposer de deux éditeurs de texte ouverts :
- Créez un test personnalisé. Localisez le chemin du sous-répertoire arm-ttk\testcases\deploymentTemplate\ du répertoire d’installation du kit de ressources de test. À partir de là, vous exécuterez Visual Studio Code, où vous créerez et modifierez un test personnalisé.
- Créez un fichier de modèle et exécutez des tests. Vous sélectionnez l’emplacement de votre choix pour ce chemin d’accès. Nous vous recommandons de démarrer une instance de Visual Studio Code à partir de ce chemin afin de pouvoir modifier facilement le fichier azuredeploy.json quand vous y êtes invité. Démarrez un terminal intégré avec cette instance de Visual Studio Code pour faciliter l’exécution des tests.
Créer le fichier de modèle
Choisissez un répertoire et créez un fichier appelé azuredeploy.json.
Avertissement
Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.
Ajoutez-y le contenu suivant :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Créer le test personnalisé
Ouvrez un terminal.
Accédez à votre répertoire d’installation du Kit de ressources de test.
Placez-vous dans le sous-répertoire arm-ttk\testcases\deploymentTemplate.
Exécutez la commande suivante :
code .
Notes
Ouvrez VS Code manuellement et ouvrez le répertoire si Visual Studio Code ne se trouve pas sur le chemin.
Créez un fichier appelé Custom-ParameterNaming.test.ps1 et placez le contenu suivant dans le fichier :
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Laissez l’éditeur de texte ouvert. Vous modifierez ce fichier ultérieurement.
Exécuter le test personnalisé
Exécutez le test personnalisé en suivant ces étapes :
Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.
Accédez au répertoire où vous avez créé azuredeploy.json.
Exécutez la commande suivante pour démarrer Visual Studio Code :
code .
Notes
Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.
Dans Visual Studio Code, ouvrez le terminal intégré. Affichez la palette de commandes, entrez PowerShell, puis sélectionnez Afficher le terminal intégré.
Exécutez la commande suivante dans le terminal :
Notes
Avant d’importer le module, remplacez path\to\arm-ttk\arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Conseil
Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : C:\Users\<utilisateur>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.
Exécutez
Test-AzTemplate
dans le terminal :Test-AzTemplate -TemplatePath .
La sortie ressemble à ce qui suit. Notez que les lignes en surbrillance mettent en évidence votre test :
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
Maintenant que vous avez trouvé le test, laissez cette fenêtre de terminal ouverte. Vous la réutiliserez ultérieurement.
Refactoriser le test personnalisé
À présent, vous allez modifier le test personnalisé pour que son implémentation soit correcte.
Revenez à l’éditeur de texte ouvert sur le fichier Custom-ParameterNaming.test.ps1.
Notes
Si vous avez accidentellement fermé Visual Studio Code, accédez au sous-répertoire testcases/deploymentTemplate et ouvrez le fichier Custom-ParameterNaming.test.ps1.
Remplacez le contenu du fichier par le code suivant :
<# .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 } }
Le code précédent itère à travers tous les paramètres. Il inspecte l’attribut
name
et vérifie si le nom commence par le préfixetailwind
. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commandeWrite-Error
avec un message d’erreur approprié.
Mettre à jour le fichier de modèle
Vous allez maintenant ajouter un paramètre au fichier de modèle.
Sélectionnez l’éditeur de texte contenant azuredeploy.json et remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le contenu du modèle précédent définit un paramètre nommé
location
qui ne respecte pas la règle de nommage, car le préfixetailwind
est absent.
Réexécuter le kit de ressources de test
À ce stade, vous avez écrit un test personnalisé. Cependant, le nom de votre fichier de modèle ne satisfait pas à l’exigence. Ainsi, vous vous attendez à ce que l’exécution du test à venir échoue. Assurez-vous que c’est le cas en effectuant l’étape suivante.
Utilisez la fenêtre de terminal intégrée de Visual Studio Code existante où PowerShell a été démarré et où le kit de ressources de test a été importé.
Dans Visual Studio Code, exécutez Test-AzTemplate
dans le terminal intégré :
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La commande précédente est exécutée avec le paramètre -Test
, qui accepte en entrée un nom de test. Vous avez fourni Custom-ParameterNaming
en tant que paramètre, ce qui signifie que seul le test que vous venez de développer sera exécuté.
Conseil
L’utilisation de ce paramètre est une bonne pratique lors du développement d’un test, car il limite ce qui est exécuté et la taille de la sortie sur le terminal.
Cette commande produit la sortie suivante :
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Le résultat indique que votre test fonctionne. Vérifions que c’est le cas en modifiant le fichier de déploiement.
Corriger le fichier de modèle
À ce stade, vous voulez vérifier la correction de votre test personnalisé en modifiant le fichier de modèle de façon à respecter les règles définies par le test personnalisé.
Dans la même instance de Visual Studio Code qui montre le fichier azuredeploy.json, remplacez le contenu du fichier par le contenu suivant :
{ "$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": [] }
Le paramètre nommé
location
a été renommétailwindLocation
. En théorie, ce paramètre doit maintenant réussir le test. Vérifions cela.Continuez avec la même instance de Visual Studio Code et exécutez
Test-AzTemplate
dans le terminal intégré :Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
La sortie se présente maintenant comme suit :
Validating custom\azuredeploy.json Custom ParameterNaming [+] Custom ParameterNaming (9 ms)
Opération réussie. Vous avez implémenté et exécuté un test personnalisé. Vous avez également corrigé un modèle de déploiement pour qu’il corresponde à la condition du test.