Implementación de reglas específicas de dominio mediante la creación de pruebas personalizadas

Completado

Hasta ahora ha visto cómo ejecutar algunas pruebas en las plantillas. Sin embargo, es posible que trabaje como una empresa o un equipo que tenga un conjunto de reglas propio. Estas reglas podrían significar que le interesa personalizar la experiencia de prueba. Podría tener los escenarios siguientes:

  • Ejecución de un conjunto de pruebas específico. Tras la instalación del kit de herramientas para pruebas, se le proporciona un conjunto de pruebas para ejecutarlas. Estas pruebas se encuentran en el directorio siguiente: <directorio_de_instalación>/arm-ttk/testcases/deploymentTemplate.

    Esta experiencia de serie de pruebas se puede personalizar. Una forma de hacerlo, como ha visto en la unidad anterior, consiste en usar el parámetro -Test. También puede editar las pruebas que se ejecutan si quita archivos del directorio. Puede omitir pruebas específicas mediante el parámetro -Skip.

  • Creación y ejecución de pruebas específicas de dominio. Es posible crear un archivo de prueba para aplicar reglas específicas del dominio. Esta unidad se centrará principalmente en este escenario.

Creación y ejecución de pruebas propias

Ha decidido crear una prueba propia específica de dominio. Existe un flujo para crear y ejecutar esta prueba:

  1. Cree un archivo en el directorio <directorio_de_instalación>/arm-ttk/testcases/deploymentTemplate.
  2. Cree el archivo en PowerShell.
  3. Ejecute el archivo e inspeccione los resultados.

Creación de una prueba personalizada

Una prueba personalizada se debe colocar en el directorio correcto: <directorio_de_instalación>/arm-ttk/testcases/deploymentTemplate. También debe seguir un estándar de nomenclatura con guiones, un postfijo de .test y un final en .ps1. Un archivo de prueba típico tiene este aspecto:

Domain-Specific.test.ps1

Creación

Para crear un nombre de archivo de prueba, debe escribirlo en PowerShell. Las tres partes de un archivo de prueba son:

  • Documentación Esta parte es opcional, pero es muy recomendable agregarla. Se sitúa en la parte superior del archivo y suele constar de un conjunto de comentarios que describen la prueba, lo que hace y cómo llamarla. Los comentarios pueden tener un aspecto similar al ejemplo siguiente:

    <#
    .Synopsis
         Ensures that all IDs use the resourceID() function.
    .Description
         Ensures that all IDs use the resourceID() function, or resolve to parameters or variables that use the ResourceID() function.
    .Example
         Test-AzTemplate -TemplatePath .\100-marketplace-sample\ -Test IDs-Should-Be-Derived-From-ResourceIDs
    #>
    

    En el ejemplo anterior se describe de forma breve lo que hace la prueba en una sección denominada .Synopsis. También hay una descripción más larga en una sección denominada .Description. Por último, hay una sección denominada .Example en la que se muestran diferentes formas de ejecutar la prueba.

  • Parámetros de entrada. El archivo de prueba puede tener un conjunto de parámetros de entrada. La palabra clave param y los paréntesis definen esta sección. Normalmente, puede tener este aspecto:

    param(
       [Parameter(Mandatory=$true)]
       [PSObject]$TemplateObject,
    
       [Parameter(Mandatory=$true)]
       [string]$TemplateFileName,
    
       [string]$SampleName = "$ENV:SAMPLE_NAME"
    )
    

    En el ejemplo anterior se muestran tres parámetros: $TemplateObject, $TemplateFileName y $SampleName. Los dos primeros parámetros son obligatorios, como se muestra en la decoración Parameter[(Mandatory = $true)]. A los parámetros se les asigna un nombre según su significado. $TemplateObject contiene una representación de objeto del archivo de plantilla y TemplateFileName contiene el nombre del archivo que se va a probar.

    Sugerencia

    Hay más información sobre los parámetros en el artículo Kit de herramientas de pruebas de plantillas de ARM.

  • Lógica de prueba. La última parte de una prueba es la lógica de prueba. Normalmente, la mayoría de las pruebas realizan estos pasos:

    1. Iterar por la plantilla.
    2. Comprobar una o varias condiciones.
    3. Genere un error si hay algo incorrecto.

Aplicaciones auxiliares de código

Hay muchas aplicaciones auxiliares que le ayudarán a encontrar el contenido que necesita y a notificar los errores. Aquí tiene dos ejemplos de aplicaciones auxiliares de código:

  • Find-JsonContent. Ayuda a localizar un elemento específico con un valor específico. Este es un ejemplo:

    Find-JsonContent -Key apiVersion -Value * -Like
    

    El código anterior ayuda a encontrar un atributo JSON con el nombre apiVersion y un valor de *, que básicamente significa todos los atributos denominados apiVersion. Coincidiría con un objeto JSON similar a este:

    {
       "apiVersion": "2021-01-01"
    }
    
  • Write-Error. Ayuda a notificar al ejecutor de la prueba que hay algo incorrecto en la plantilla. Se puede usar para expresar un mensaje de error e interpolar una expresión de cadena con las variables que necesite. Este es un ejemplo de cómo se usa:

      Write-Error "Resource $($resource.Name) Location must be located in westeurope'" -TargetObject $resource
    

Ejecutar la prueba

En este punto, ha creado la prueba. Se ejecutará junto con todos los demás archivos del mismo directorio.

Como sucede con el ejemplo anterior, puede optar por ejecutar solo el archivo de prueba específico mediante el parámetro -Test. Como parámetro, le daría el nombre de archivo de prueba sin las extensiones de archivo. A continuación, Custom-Test.test.ps1 se ejecutaría por su cuenta a través de Test-AzTemplate -TemplatePath /path/to/template -Test Custom-Test.