Pester: testes automatizados para scripts PowerShell e infraestrutura
João Barros
12 de May de 2026
1 min de leitura
O Pester é o framework de testes nativo do PowerShell, incluído no Windows por defeito e usado para validar scripts, módulos e configuração de infraestrutura. Testes com Pester tornam scripts PowerShell production-ready.
Instalar e estrutura básica
Install-Module Pester -Force -Scope CurrentUser
# Estrutura de um ficheiro de testes (Get-UserInfo.Tests.ps1)
BeforeAll {
. "$PSScriptRoot/Get-UserInfo.ps1" # importar o script a testar
}
Describe "Get-UserInfo" {
Context "Utilizador válido" {
It "Retorna objecto com DisplayName" {
$result = Get-UserInfo -UPN "admin@empresa.pt"
$result.DisplayName | Should -Not -BeNullOrEmpty
}
It "Retorna email correcto" {
$result = Get-UserInfo -UPN "admin@empresa.pt"
$result.Mail | Should -Be "admin@empresa.pt"
}
}
Context "Utilizador inválido" {
It "Lança erro para UPN inválido" {
{ Get-UserInfo -UPN "naoexiste@empresa.pt" } | Should -Throw
}
}
}
Mocking — isolar dependências externas
BeforeAll { . "$PSScriptRoot/Send-Report.ps1" }
Describe "Send-Report" {
It "Chama Send-MailMessage com destinatário correcto" {
Mock Send-MailMessage { } # não envia email real
Send-Report -To "gestor@empresa.pt" -Subject "Relatório"
Should -Invoke Send-MailMessage -Times 1 `
-ParameterFilter { $To -eq "gestor@empresa.pt" }
}
}
Testes de infraestrutura Azure
Describe "Infraestrutura Azure — rg-analytics-prod" {
BeforeAll { Connect-AzAccount -Identity }
It "Storage Account existe" {
Get-AzStorageAccount -ResourceGroupName "rg-analytics-prod" `
-Name "stadatalakeprod" | Should -Not -BeNullOrEmpty
}
It "Key Vault tem soft-delete activado" {
$kv = Get-AzKeyVault -VaultName "kv-bconcepts-prod"
$kv.EnableSoftDelete | Should -Be $true
}
}
Integrar no 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 }
Conclusão
Scripts PowerShell sem testes são um risco em produção. Pester torna trivial escrever testes unitários (com mocks para isolar APIs) e testes de infraestrutura (para validar estado pós-deploy). Integre-os em pipelines CI/CD para prevenir regressões.