Ejercicio: Creación y ejecución de pruebas personalizadas con el kit de herramientas para pruebas

Completado

Como miembro de un equipo de productos, sabe que es importante poder implementar algunas reglas específicas del equipo o del dominio. Una manera de hacerlo consiste en implementar las reglas como pruebas. Después, puede ejecutar estas pruebas con el kit de herramientas para pruebas.

Creación y ejecución de una prueba personalizada

Creará una prueba personalizada y usará la herramienta Kit de herramientas para pruebas para ejecutarla. Tendrá que corregir la plantilla de implementación para asegurarse de que la prueba se supere. La prueba personalizada comprobará que todos los parámetros siguen una regla de nomenclatura. Esta regla es un requisito específico de dominio para el producto en el que trabaja el equipo.

Para este ejercicio recomendamos tener dos editores de texto abiertos:

  • Cree una prueba personalizada. Busque la ruta de acceso del subdirectorio arm-ttk/testcases/deploymentTemplate/ del directorio de instalación del kit de herramientas para pruebas. Desde aquí, ejecutará Visual Studio Code, donde creará y editará una prueba personalizada.
  • Cree un archivo de plantilla y ejecute las pruebas. Seleccione la ubicación que desea para esta ruta de acceso. Recomendamos iniciar una instancia de Visual Studio Code desde esta ruta de acceso para poder editar fácilmente el archivo azuredeploy.json cuando se le solicite. Inicie un terminal integrado con esta instancia de Visual Studio Code para facilitar la ejecución de las pruebas.

Cree el archivo de plantilla

Elija un directorio y cree un archivo llamado azuredeploy.json.

Advertencia

Asegúrese de que el directorio seleccionado está vacío y no contiene subdirectorios

Asígnele el siguiente contenido:

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

Creación de la prueba personalizada

  1. Abra Visual Studio Code y vaya al directorio de instalación del kit de herramientas para pruebas. Colóquese en el subdirectorio arm-ttk/testcases/deploymentTemplate. Ejecute el comando siguiente:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio si Visual Studio Code no está en la ruta de acceso.

  2. Cree un archivo de prueba personalizado denominado Custom-ParameterNaming.test.ps1. Asigne el contenido siguiente al archivo:

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

    Deje abierto el editor de texto. Editará este archivo más adelante.

Ejecución de la prueba personalizada

Siga estos pasos para ejecutar la prueba personalizada:

  1. Abra una nueva ventana de terminal o reutilice la antigua.

  2. Vaya al directorio donde haya creado azuredeploy.json. Ejecute el comando siguiente para iniciar Visual Studio Code:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio de plantillas si Visual Studio Code no está en la ruta de acceso.

  3. Abra el terminal integrado desde Visual Studio Code; para ello, seleccione Terminal>Nuevo terminal en el menú principal. Ejecute el comando siguiente en el terminal para iniciar un shell de PowerShell:

    pwsh
    

    Verá una salida similar a esta:

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

    Nota:

    Antes de importar el módulo, reemplace ruta de acceso\a\arm-ttk\arm-ttk.psd1 con la ruta de acceso al kit de herramientas para pruebas descargado.

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

    Sugerencia

    Si ha descargado o clonado la herramienta en el directorio Descargas, la ruta será similar a esta: /Usuarios/<usuario>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Ahora está listo para usar la herramienta. Mientras se encuentre en la misma sesión de PowerShell, no es necesario volver a ejecutar el comando de importación.

  5. Ejecute Test-AzTemplate en el terminal para iniciar una serie de pruebas:

    Test-AzTemplate -TemplatePath .
    

    La salida será similar a lo que se indica a continuación. Fíjese en que las líneas resaltadas muestran la prueba:

    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
    

    Ahora que ha encontrado la prueba, deje abierta esta ventana de terminal. La usará más adelante.

Refactorización de la prueba personalizada

Ahora asignará una implementación adecuada a la prueba personalizada.

  1. Vuelva al editor de texto que contiene el archivo Custom-ParameterNaming.test.ps1.

    Nota:

    Si ha cerrado Visual Studio Code accidentalmente, vaya al subdirectorio arm-ttk/testcases/deploymentTemplate y abra Custom-ParameterNaming.test.ps1.

  2. Reemplace el contenido del archivo por el código siguiente:

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

    El código anterior procesa una iteración en todos los parámetros. Inspecciona el atributo name y comprueba si el nombre empieza por el prefijo tailwind. Si el parámetro inspeccionado no coincide con la regla de nomenclatura, el código invoca el cmdlet Write-Error con un mensaje de error adecuado.

Actualice el archivo de plantilla

Ahora, agregará un parámetro al archivo de plantilla.

  1. Seleccione el editor de texto que contiene azuredeploy.json y cambie el contenido del archivo por el siguiente:

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

    El contenido de la plantilla anterior define un parámetro denominado location que no cumple la regla de nomenclatura, ya que carece del prefijo tailwind.

Nueva ejecución del kit de herramientas para pruebas

En este momento tiene una prueba personalizada escrita. Pero la nomenclatura del archivo de plantilla no cumple el requisito. Así pues, espera que se produzca un error en la próxima ejecución de prueba. Para asegurarse de que es así, siga el paso siguiente.

Use la ventana de terminal integrada de Visual Studio Code existente donde se ha iniciado PowerShell y se ha importado el kit de herramientas para pruebas.

En Visual Studio Code, ejecute Test-AzTemplate desde el terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

El comando anterior se ejecuta con el parámetro -Test, que toma un nombre de prueba como entrada. Ha indicado Custom-ParameterNaming como parámetro, lo que significa que solo se ejecutará la prueba recién desarrollada.

Sugerencia

El uso del parámetro -Test es un procedimiento recomendado al desarrollar una prueba, ya que limita lo que se ejecuta y el tamaño de la salida del terminal.

Este comando genera la salida siguiente:

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

El resultado indica que la prueba funciona. Ahora, para asegurarse de que es cierto, modificará el archivo de implementación.

Corrección del archivo de plantilla

En este momento, le interesa comprobar la exactitud de la prueba personalizada; para ello, cambie el archivo de plantilla para que se adhiera a las reglas establecidas por la prueba personalizada.

  1. En la misma instancia de Visual Studio Code en la que se muestra el archivo azuredeploy.json, cambie el contenido del archivo por el siguiente:

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

    El nombre del parámetro location se ha cambiado a tailwindLocation. En teoría, ahora este parámetro debe pasar la prueba. Se comprobará a continuación.

  2. Continúe en la misma instancia de Visual Studio Code y ejecute Test-AzTemplate en el terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Ahora la salida es similar a la siguiente:

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

¡Hecho! Ha implementado y ejecutado una prueba personalizada. También ha corregido una plantilla de implementación para que coincida con la condición de la prueba.

Creación y ejecución de una prueba personalizada

Creará una prueba personalizada y usará la herramienta Kit de herramientas para pruebas para ejecutarla. Tendrá que corregir la plantilla de implementación para asegurarse de que la prueba se supere. La prueba personalizada comprobará que todos los parámetros siguen una regla de nomenclatura. Esta regla es un requisito específico de dominio para el producto en el que trabaja el equipo.

Para este ejercicio recomendamos tener dos editores de texto abiertos:

  • Cree una prueba personalizada. Busque la ruta de acceso del subdirectorio arm-ttk/testcases/deploymentTemplate/ del directorio de instalación del kit de herramientas para pruebas. Desde aquí, ejecutará Visual Studio Code, donde creará y editará una prueba personalizada.
  • Cree un archivo de plantilla y ejecute las pruebas. Seleccione la ubicación que desea para esta ruta de acceso. Recomendamos iniciar una instancia de Visual Studio Code desde esta ruta de acceso para poder editar fácilmente el archivo azuredeploy.json cuando se le solicite. Inicie un terminal integrado con esta instancia de Visual Studio Code para facilitar la ejecución de las pruebas.

Cree el archivo de plantilla

Elija un directorio y cree un archivo llamado azuredeploy.json.

Advertencia

Asegúrese de que el directorio seleccionado está vacío y no contiene subdirectorios

Asígnele el siguiente contenido:

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

Creación de la prueba personalizada

  1. Abra un terminal. Vaya al directorio de instalación del kit de herramientas para pruebas. Colóquese en el subdirectorio arm-ttk/testcases/deploymentTemplate. Ejecute el comando siguiente:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio si Visual Studio Code no está en la ruta de acceso.

  2. Cree un archivo personalizado denominado Custom-ParameterNaming.test.ps1. Asigne el contenido siguiente al archivo:

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

    Deje abierto el editor de texto. Editará este archivo más adelante.

Ejecución de la prueba personalizada

Siga estos pasos para ejecutar la prueba personalizada:

  1. Abra una nueva ventana de terminal o reutilice la antigua.

  2. Vaya al directorio donde haya creado azuredeploy.json. Ejecute el comando siguiente para iniciar Visual Studio Code:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio de plantillas si Visual Studio Code no está en la ruta de acceso.

  3. Abra el terminal integrado desde Visual Code; para ello, seleccione Terminal>Nuevo terminal en el menú principal. Ejecute el comando siguiente en el terminal para iniciar un shell de PowerShell:

    pwsh
    

    Verá una salida similar a esta:

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

    Nota:

    Antes de importar el módulo, reemplace ruta de acceso\a\arm-ttk\arm-ttk.psd1 con la ruta de acceso al kit de herramientas para pruebas descargado.

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

    Sugerencia

    Si ha descargado o clonado la herramienta en el directorio Descargas, la ruta será similar a esta: /Usuarios/<usuario>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Ahora está listo para usar la herramienta. Mientras se encuentre en la misma sesión de PowerShell, no es necesario volver a ejecutar el comando de importación.

  5. Ejecute Test-AzTemplate en el terminal:

    Test-AzTemplate -TemplatePath .
    

    La salida será similar a lo que se indica a continuación. Fíjese en que las líneas resaltadas muestran la prueba:

    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
    

    Ahora que ha encontrado la prueba, deje abierta esta ventana de terminal. La usará más adelante.

Refactorización de la prueba personalizada

Ahora asignará una implementación adecuada a la prueba personalizada.

  1. Vuelva al editor de texto que contiene el archivo Custom-ParameterNaming.test.ps1.

    Nota:

    Si ha cerrado Visual Studio Code accidentalmente, vaya al subdirectorio arm-ttk/testcases/deploymentTemplate y abra Custom-ParameterNaming.test.ps1.

  2. Reemplace el contenido del archivo por el código siguiente:

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

    El código anterior procesa una iteración en todos los parámetros. Inspecciona el atributo name y comprueba si el nombre empieza por el prefijo tailwind. Si el parámetro inspeccionado no coincide con la regla de nomenclatura, el código invoca el cmdlet Write-Error con un mensaje de error adecuado.

Actualice el archivo de plantilla

Ahora, agregará un parámetro al archivo de plantilla.

  1. Seleccione el editor de texto que contiene azuredeploy.json y cambie el contenido del archivo por el siguiente:

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

    El contenido de la plantilla anterior define un parámetro denominado location que no cumple la regla de nomenclatura, ya que carece del prefijo tailwind.

Nueva ejecución del kit de herramientas para pruebas

En este momento tiene una prueba personalizada escrita. Pero la nomenclatura del archivo de plantilla no cumple el requisito. Así pues, espera que se produzca un error en la próxima ejecución de prueba. Para asegurarse de que es así, siga el paso siguiente.

Nota:

Use la ventana de terminal integrada de Visual Studio Code existente donde se ha iniciado PowerShell y se ha importado el kit de herramientas para pruebas.

En Visual Studio Code, ejecute Test-AzTemplate desde el terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

El comando anterior se ejecuta con el parámetro denominado -Test, que toma un nombre de prueba como entrada. Ha indicado Custom-ParameterNaming como parámetro, lo que significa que solo se ejecutará la prueba recién desarrollada.

Sugerencia

El uso de este parámetro es un procedimiento recomendado al desarrollar una prueba, ya que limita lo que se ejecuta y el tamaño de la salida del terminal.

Este comando genera la salida siguiente:

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

El resultado indica que la prueba funciona. Ahora, para asegurarse de que es cierto, modificará el archivo de implementación.

Corrección del archivo de plantilla

En este momento, le interesa comprobar la exactitud de la prueba personalizada; para ello, cambie el archivo de plantilla para que se adhiera a las reglas establecidas por la prueba personalizada.

  1. En la misma instancia de Visual Studio Code en la que se muestra el archivo azuredeploy.json, cambie el contenido del archivo por el siguiente:

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

    El nombre del parámetro location se ha cambiado a tailwindLocation. En teoría, ahora este parámetro debe pasar la prueba. Se comprobará a continuación.

  2. Continúe en la misma instancia de Visual Studio Code y ejecute Test-AzTemplate en el terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Ahora la salida es similar a la siguiente:

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

¡Hecho! Ha implementado y ejecutado una prueba personalizada. También ha corregido una plantilla de implementación para que coincida con la condición de la prueba.

Creación y ejecución de una prueba personalizada

Creará una prueba personalizada y usará la herramienta Kit de herramientas para pruebas para ejecutarla. Tendrá que corregir la plantilla de implementación para asegurarse de que la prueba se supere. La prueba personalizada comprobará que todos los parámetros siguen una regla de nomenclatura. Esta regla es un requisito específico de dominio para el producto en el que trabaja el equipo.

Para este ejercicio recomendamos tener dos editores de texto abiertos:

  • Cree una prueba personalizada. Busque la ruta del subdirectorio arm-ttk\testcases\deploymentTemplate\ del directorio de instalación del kit de herramientas para pruebas. Desde aquí, ejecutará Visual Studio Code, donde creará y editará una prueba personalizada.
  • Cree un archivo de plantilla y ejecute las pruebas. Seleccione la ubicación que desea para esta ruta de acceso. Recomendamos iniciar una instancia de Visual Studio Code desde esta ruta de acceso para poder editar fácilmente el archivo azuredeploy.json cuando se le solicite. Inicie un terminal integrado con esta instancia de Visual Studio Code para facilitar la ejecución de las pruebas.

Cree el archivo de plantilla

Elija un directorio y cree un archivo llamado azuredeploy.json.

Advertencia

Asegúrese de que el directorio seleccionado está vacío y no contiene subdirectorios

Asígnele el siguiente contenido:

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

Creación de la prueba personalizada

  1. Abra un terminal.

  2. Vaya al directorio de instalación del kit de herramientas para pruebas.

  3. Colóquese en el subdirectorio arm-ttk\testcases\deploymentTemplate.

  4. Ejecute el siguiente comando:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio si Visual Studio Code no está en la ruta de acceso.

  5. Cree un archivo llamado Custom-ParameterNaming.test.ps1 y asígnele el contenido siguiente:

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

    Deje abierto el editor de texto. Editará este archivo más adelante.

Ejecución de la prueba personalizada

Siga estos pasos para ejecutar la prueba personalizada:

  1. Abra una nueva ventana de terminal o reutilice la antigua.

  2. Vaya al directorio donde haya creado azuredeploy.json.

  3. Ejecute el comando siguiente para iniciar Visual Studio Code:

    code .
    

    Nota:

    Abra Visual Studio Code de forma manual y abra el directorio de plantillas si Visual Studio Code no está en la ruta de acceso.

  4. Desde Visual Studio Code, abra el terminal integrado. Abra la paleta de comandos, escriba PowerShell y seleccione Mostrar terminal integrado.

  5. Ejecute el siguiente comando en el terminal:

    Nota:

    Antes de importar el módulo, reemplace ruta de acceso\a\arm-ttk\arm-ttk.psd1 con la ruta de acceso al kit de herramientas para pruebas descargado.

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

    Sugerencia

    Si ha descargado o clonado la herramienta en el directorio Descargas, la ruta será similar a esta: C:\Usuarios\<usuario>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Ahora está listo para usar la herramienta. Mientras se encuentre en la misma sesión de PowerShell, no es necesario volver a ejecutar el comando de importación.

  6. Ejecute Test-AzTemplate en el terminal:

    Test-AzTemplate -TemplatePath .
    

    La salida será similar a lo que se indica a continuación. Fíjese en que las líneas resaltadas muestran la prueba:

    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
    

    Ahora que ha encontrado la prueba, deje abierta esta ventana de terminal. La usará más adelante.

Refactorización de la prueba personalizada

Ahora asignará una implementación adecuada a la prueba personalizada.

  1. Vuelva al editor de texto que contiene el archivo Custom-ParameterNaming.test.ps1.

    Nota:

    Si ha cerrado Visual Studio Code accidentalmente, vaya al subdirectorio testcases/deploymentTemplate y abra el archivo Custom-ParameterNaming.test.ps1.

  2. Reemplace el contenido del archivo por el código siguiente:

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

    El código anterior procesa una iteración en todos los parámetros. Inspecciona el atributo name y comprueba si el nombre empieza por el prefijo tailwind. Si el parámetro inspeccionado no coincide con la regla de nomenclatura, el código invoca el cmdlet Write-Error con un mensaje de error adecuado.

Actualice el archivo de plantilla

Ahora, agregará un parámetro al archivo de plantilla.

  1. Seleccione el editor de texto que contiene azuredeploy.json y cambie el contenido del archivo por el siguiente:

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

    El contenido de la plantilla anterior define un parámetro denominado location que no cumple la regla de nomenclatura, ya que carece del prefijo tailwind.

Nueva ejecución del kit de herramientas para pruebas

En este momento tiene una prueba personalizada escrita. Pero la nomenclatura del archivo de plantilla no cumple el requisito. Así pues, espera que se produzca un error en la próxima ejecución de prueba. Para asegurarse de que es así, siga el paso siguiente.

Use la ventana de terminal integrada de Visual Studio Code existente donde se ha iniciado PowerShell y se ha importado el kit de herramientas para pruebas.

En Visual Studio Code, ejecute Test-AzTemplate desde el terminal integrado:

Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming

El comando anterior se ejecuta con el parámetro -Test, que toma un nombre de prueba como entrada. Ha indicado Custom-ParameterNaming como parámetro, lo que significa que solo se ejecutará la prueba recién desarrollada.

Sugerencia

El uso de este parámetro es un procedimiento recomendado al desarrollar una prueba, ya que limita lo que se ejecuta y el tamaño de la salida del terminal.

Este comando genera la salida siguiente:

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

El resultado indica que la prueba funciona. Ahora, para asegurarse de que es cierto, modificará el archivo de implementación.

Corrección del archivo de plantilla

En este momento, le interesa comprobar la exactitud de la prueba personalizada; para ello, cambie el archivo de plantilla para que se adhiera a las reglas establecidas por la prueba personalizada.

  1. En la misma instancia de Visual Studio Code en la que se muestra el archivo azuredeploy.json, cambie el contenido del archivo por el siguiente:

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

    El nombre del parámetro location se ha cambiado a tailwindLocation. En teoría, ahora este parámetro debe pasar la prueba. Se comprobará a continuación.

  2. Continúe en la misma instancia de Visual Studio Code y ejecute Test-AzTemplate en el terminal integrado:

    Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
    

    Ahora la salida es similar a la siguiente:

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

¡Hecho! Ha implementado y ejecutado una prueba personalizada. También ha corregido una plantilla de implementación para que coincida con la condición de la prueba.