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/