Exercice - Créer et exécuter des tests personnalisés avec le kit de ressources de test

Effectué

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é

  1. 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.

  2. 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 :

  1. Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.

  2. 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.

  3. 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.
    
  4. 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.

  5. 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.

  1. 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.

  2. 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éfixe tailwind. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commande Write-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.

  1. 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éfixe tailwind 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é.

  1. 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.

  2. 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é

  1. 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.

  2. 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 :

  1. Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.

  2. 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.

  3. 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.
    
  4. 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.

  5. 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.

  1. 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.

  2. 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éfixe tailwind. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commande Write-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.

  1. 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éfixe tailwind 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é.

  1. 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.

  2. 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é

  1. Ouvrez un terminal.

  2. Accédez à votre répertoire d’installation du Kit de ressources de test.

  3. Placez-vous dans le sous-répertoire arm-ttk\testcases\deploymentTemplate.

  4. 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.

  5. 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 :

  1. Ouvrez une nouvelle fenêtre de terminal ou réutilisez l’ancienne.

  2. Accédez au répertoire où vous avez créé azuredeploy.json.

  3. 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.

  4. Dans Visual Studio Code, ouvrez le terminal intégré. Affichez la palette de commandes, entrez PowerShell, puis sélectionnez Afficher le terminal intégré.

  5. 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.

  6. 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.

  1. 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.

  2. 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éfixe tailwind. Si le paramètre inspecté ne respecte pas la règle de nommage, le code appelle l’applet de commande Write-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.

  1. 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éfixe tailwind 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é.

  1. 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.

  2. 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.