Pester: pruebas automatizadas para scripts PowerShell e infraestructura
João Barros
12 de May de 2026
1 min de lectura
Pester es el framework de pruebas nativo de PowerShell, incluido en Windows por defecto y usado para validar scripts, módulos y configuración de infraestructura. Las pruebas con Pester hacen los scripts PowerShell production-ready.
Instalar y estructura básica
Install-Module Pester -Force -Scope CurrentUser
# Estructura de un archivo de pruebas (Get-UserInfo.Tests.ps1)
BeforeAll {
. "$PSScriptRoot/Get-UserInfo.ps1" # importar el script a probar
}
Describe "Get-UserInfo" {
Context "Usuario válido" {
It "Devuelve un objeto con DisplayName" {
$result = Get-UserInfo -UPN "admin@empresa.com"
$result.DisplayName | Should -Not -BeNullOrEmpty
}
It "Devuelve el email correcto" {
$result = Get-UserInfo -UPN "admin@empresa.com"
$result.Mail | Should -Be "admin@empresa.com"
}
}
Context "Usuario inválido" {
It "Lanza un error para un UPN inválido" {
{ Get-UserInfo -UPN "noexiste@empresa.com" } | Should -Throw
}
}
}
Mocking — aislar dependencias externas
BeforeAll { . "$PSScriptRoot/Send-Report.ps1" }
Describe "Send-Report" {
It "Llama a Send-MailMessage con el destinatario correcto" {
Mock Send-MailMessage { } # no envía un email real
Send-Report -To "gestor@empresa.com" -Subject "Informe"
Should -Invoke Send-MailMessage -Times 1 `
-ParameterFilter { $To -eq "gestor@empresa.com" }
}
}
Pruebas de infraestructura Azure
Describe "Infraestructura Azure — rg-analytics-prod" {
BeforeAll { Connect-AzAccount -Identity }
It "La Storage Account existe" {
Get-AzStorageAccount -ResourceGroupName "rg-analytics-prod" `
-Name "stadatalakeprod" | Should -Not -BeNullOrEmpty
}
It "El Key Vault tiene soft-delete activado" {
$kv = Get-AzKeyVault -VaultName "kv-bconcepts-prod"
$kv.EnableSoftDelete | Should -Be $true
}
}
Integrar en Azure DevOps
- task: PowerShell@2
inputs:
targetType: inline
script: |
Install-Module Pester -Force -Scope CurrentUser
$result = Invoke-Pester -Path ./tests -PassThru
if ($result.FailedCount -gt 0) { exit 1 }
Conclusión
Los scripts PowerShell sin pruebas son un riesgo en producción. Pester hace trivial escribir pruebas unitarias (con mocks para aislar APIs) y pruebas de infraestructura (para validar el estado post-deploy). Intégrelas en pipelines CI/CD para prevenir regresiones.