PowerShell Pester 101: Una guía práctica para principiantes

Cuando ejecutas un script, ¿cómo puedes estar seguro de que hizo exactamente lo que pretendías? Tal vez eliminó un archivo o detuvo un servicio. Pero, ¿lo hizo sin errores en cada entorno, sesión de usuario o máquina que tocó? Si tu script afecta a docenas, probar con Pester es tu mejor opción.

Pester, el potente módulo de PowerShell, te ayuda a escribir pruebas automatizadas utilizando un lenguaje específico de dominio (DSL). En este tutorial, aprenderás a eliminar las conjeturas y crear un proceso sólido para validar tus scripts.

¡Prepárate y deja que Pester aumente tu confianza en la escritura de scripts!

Instalación y configuración de Pester

Pester asegura que las acciones de tu script coincidan con tus expectativas en cualquier entorno. Probar con Pester es una habilidad esencial para gestionar infraestructuras con PowerShell.

Pero primero, necesitamos instalar Pester para crear algunas pruebas alrededor de un script que provisiona un servidor para ver cómo funcionan las pruebas de Pester.

Puedes descargar el módulo Pester desde la Galería de PowerShell:

Install-Module Pester

Si encuentras una advertencia, podría ser porque los clientes de Windows 10 (y posteriores) tienen instalada por defecto una versión antigua de Pester. Por ejemplo, la versión 3.4.0 suele estar preinstalada.

Asegúrate de eliminar la versión antigua para evitar conflictos:

$module = "C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0"
takeown /F $module /A /R
icacls $module /reset
icacls $module /grant "*S-1-5-32-544:F" /inheritance:d /T
Remove-Item -Path $module -Recurse -Force -Confirm:$false

Este script toma posesión de la carpeta de Pester 3.4.0, actualiza los permisos y la elimina.

Instala la última versión de Pester añadiendo el parámetro -Force:

Install-Module Pester -Force

Es posible que veas otra advertencia sobre la firma de la nueva versión. Microsoft firmó la versión preinstalada, mientras que el mantenedor de Pester, Jakub, firmó la última versión.

Verifica la versión instalada con el siguiente comando:

Get-Module -Name Pester -ListAvailable

Creando un archivo de prueba de Pester

Ahora que Pester está instalado, creemos algunas pruebas. Para efectos de demostración, supongamos que un script tiene la tarea de instalar la característica de Windows IIS.

Crea un script de PowerShell llamado ServerProvisioning.Tests.ps1 en el directorio deseado; digamos que está en tu carpeta ~\Documentos.

A continuación, ejecuta las pruebas de Pester con el cmdlet Invoke-Pester:

cd ~\Documents
Invoke-Pester

Si ejecutas este comando sin pruebas disponibles, no se ejecutarán pruebas.

Agreguemos algunas pruebas utilizando la estructura jerárquica de bloques de Pester, donde:

  • describe representa una categoría de pruebas, como la funcionalidad principal de un script.
  • context organiza opcionalmente las pruebas en subcategorías.
  • it define pruebas individuales.
describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {

        }
    }
}

describe 'RegistryTweaks' {

}

describe 'SoftwareInstalls' {

}

Agregando y Ejecutando una Prueba

Imagina un script que provisiona un servidor pero omite un paso crucial, como habilitar una característica requerida. Si no se verifica, este descuido puede causar problemas en cascada en producción.

Supongamos que el script de aprovisionamiento del servidor se ha ejecutado, y la tarea es confirmar que la característica Web-Server está instalada. Si es así, realiza una verificación manual.

Ejecuta el siguiente comando para comprobar manualmente si la característica Web-Server (IIS) está instalada en el servidor remoto.

Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed }

Este comando devuelve True si la característica está instalada y False en caso contrario.

Ahora, agrega lo siguiente al bloque it para automatizar esta prueba. El operador should con la condición -BeTrue establece que la característica está instalada.

describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {
            Invoke-Command -ComputerName SRV1 -ScriptBlock { (Get-WindowsFeature -ComputerName SRV1 -Name Web-Server).Installed } | should -BeTrue
        }
    }
}

Finalmente, vuelve a ejecutar la prueba:

cd ~\documents
Invoke-Pester

Como se esperaba, la prueba fallará si la característica no está instalada.


VS Code también tiene una excelente integración con Pester. En lugar de ejecutar Invoke-Pester, puedes hacer clic en el elemento Run Tests en pruebas individuales directamente en VS Code. Esta acción invoca pruebas específicas.


Conclusión

En este tutorial, aprendiste cómo utilizar Pester para automatizar pruebas en tus scripts de PowerShell. Has cubierto los pasos fundamentales para validar tus scripts de manera efectiva. Estos pasos incluyen instalar y configurar Pester, crear un archivo de prueba y escribir tu primera prueba automatizada.

Continúa construyendo sobre esta base explorando cómo Pester puede manejar escenarios más avanzados, como probar APIs, simular comandos o ejecutar validaciones previas y posteriores al despliegue.

A medida que integres Pester en tu flujo de trabajo, mejorarás tus scripts y ganarás confianza en su fiabilidad. ¡Escala tus esfuerzos de automatización con confianza!

Source:
https://adamtheautomator.com/powershell-pester-testing-guide/