Buscar

PowerShell: Pester – Bloques “Before” y “After” (Parte 4)

Como vimos en los posts anteriores, Pester es una herramienta escrita en PowerShell que nos ayuda a verificar nuestros scripts. 

En este post vamos a introducir dos conceptos muy sencillos que nos ayudarán a exprimir un poco más la potencia de Pester.

Por defecto Pester ejecuta sus tests (o scripts de test) de forma secuencial. Es decir empieza por el principio y conforme va interpretando el código lo va ejecutando, esto es: todo el script se ejecuta de principio a fin.

A veces habrá situaciones en las que necesitaremos que cierto código se ejecute antes (o después) que otro. 

Para estos casos podemos utilizar un(os) bloque(s) específico(s) llamado(s): BeforeAll,BeforeEach, AfterAll, o AfterEach.

Estos bloques pueden contener cualquier tipo de código, pueden hacer cualquier cosa y deben establecerse en un bloque de contexto (context block) o en un bloque de descripción (describe block).

El código dentro de estos bloques se ejecuta en modo dot sourcing de forma que por ejemplo una variable definida en estos bloques será visible en todos los bloques dentro del mismo bloque de contexto o bloque de descripción.

Ejemplo:

Siguiendo el ejemplo de posts anteriores:

PowerShell: Pester – Bloques “Before” y “After” (Parte 4)

Así podremos usar, variables y recursos establecidos en el mismo contexto.

Normalmente los bloques BeforeAll / BeforeEach se suelen utilizar para crear conexiones, iniciar el registro de logs y cualquier otra cosa que necesitemos.

Por otra parte los bloques AfterAll / AfterEach se suelen utilizar para cerrar conexiones, archivos abiertos, liberar espacio….

Aún que podemos establecer estos bloques en cualquier parte del bloque (Descripción o Contexto) pero la convención es usar los bloques Before* al principio y los bloques After* al final.

BeforeAll: Se ejecuta solo una vez por bloque así que suele utilizarse en tests que no modifiquen nada, así con una sola ejecución es suficiente.

AfterAll: Se ejecuta después de ejecutar el último bloque It. Suele utilizarse para limpieza de variables, cierre de conexiones…

BeforeEach: Se ejecuta una vez por cada bloque It, si hay diez bloque It se va a ejecutar diez veces. Normalmente se usa para situaciones en que hay variaciones en el entorno conforme se va, ejecutando los tests.

AfterEach: Se ejecuta después de todos y cada uno de los bloques It. Si hay diez bloques It se ejecutará diez veces.

Si definimos un bloque BeforeEach/AfterEach en un bloque de Descripción que contenga u bloque de Contexto se ejecutaran primero los que estén en el bloque de Descripción y luego se ejecutarán los del bloque de Contexto.

Orden de ejecución:

1.    Bloque de Descripción
2.    Bloque de Contexto

Nota final: 

Con estos posts habremos visto ya todos los posibles bloques de ejecución de Pester, ahora ya no tendremos excusa para empezar a realizar pruebas unitarias en nuestros scripts de PowerShell. Por fin podremos controlar en qué orden se ejecutan nuestros tests y casi garantizar que nuestras herramientas escritas en PowerShell hacen aquello que deberían hacer.

Nota final para usuarios avanzados:

Todos estos bloques mencionados en el post utilizan en realidad bloques de powershell de try/catch/finally. Por ejemplo todas las AfterAll/AfterEach suceden realmente en un bloque “finally” de PowerShell.

El autor de este post es: Pol Padrisa

Posts de la serie PowerShell - Pester:

PowerShell: Pester - Introducción - (Parte 1) - (SYSADMIT.com)

PowerShell: Pester - Instalación - (Parte 2) - (SYSADMIT.com)

PowerShell: Pester - Verificar un script simple (Parte 3) - (SYSADMIT.com) 

PowerShell: Pester – Bloques "Before" y "After" (Parte 4) - (SYSADMIT.com)

PowerShell: Pester - Unidades virtuales (Parte 5) - (SYSADMIT.com)

No hay comentarios:

Publicar un comentario