PowerShell Pester 101: Um Guia Prático para Iniciantes

Quando você executa um script, como pode ter certeza de que ele fez exatamente o que você pretendia? Talvez tenha removido um arquivo ou parado um serviço. Mas será que fez isso perfeitamente em todos os ambientes, sessões de usuário ou máquinas em que tocou? Se o seu script impacta dezenas, testar com o Pester é a sua melhor aposta.

O Pester, o poderoso módulo do PowerShell, ajuda você a escrever testes automatizados usando uma linguagem específica de domínio (DSL). Neste tutorial, você aprenderá a eliminar as suposições e criar um processo sólido para validar seus scripts.

Prepare-se e deixe o Pester aumentar sua confiança em scripts!

Instalando e Configurando o Pester

O Pester garante que as ações do seu script correspondam às suas expectativas em qualquer ambiente. Testar com o Pester é uma habilidade essencial para gerenciar infraestrutura com o PowerShell.

Mas primeiro, precisamos instalar o Pester para criar alguns testes em torno de um script que provisiona um servidor para ver como os testes do Pester funcionam.

Você pode baixar o módulo Pester da Galeria do PowerShell:

Install-Module Pester

Se você encontrar um aviso, pode ser porque os clientes do Windows 10 (e posteriores) têm uma versão mais antiga do Pester instalada por padrão. Por exemplo, a versão 3.4.0 é frequentemente pré-instalada.

Certifique-se de remover a versão antiga para evitar conflitos:

$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 assume a propriedade da pasta do Pester 3.4.0, atualiza as permissões e a remove.

Instale a versão mais recente do Pester acrescentando o parâmetro -Force:

Install-Module Pester -Force

Pode ver outro aviso relacionado com a assinatura da nova versão. A Microsoft assinou a versão pré-instalada, enquanto o mantenedor do Pester, Jakub, assinou a versão mais recente.

Verifique a versão instalada com o seguinte comando:

Get-Module -Name Pester -ListAvailable

Criando um Arquivo de Teste Pester

Agora que o Pester está instalado, vamos criar alguns testes. Para fins de demonstração, suponha que um script tem a tarefa de instalar o recurso do Windows IIS.

Crie um script do PowerShell chamado ServerProvisioning.Tests.ps1 no diretório desejado; digamos que esteja na sua pasta ~\Documentos.

Em seguida, execute os testes do Pester com o cmdlet Invoke-Pester:

cd ~\Documents
Invoke-Pester

A execução deste comando sem testes disponíveis resulta em nenhum teste sendo executado.

Vamos adicionar alguns testes usando a estrutura de blocos hierárquicos do Pester, onde:

  • describe representa uma categoria de testes, como a funcionalidade principal de um script.
  • contextorganiza opcionalmente testes em subcategorias.
  • itdefine testes individuais.
describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {

        }
    }
}

describe 'RegistryTweaks' {

}

describe 'SoftwareInstalls' {

}

Adicionando e Executando um Teste

Imagine um script que provisiona um servidor, mas esquece um passo crucial, como habilitar um recurso necessário. Se não for verificado, essa omissão pode causar problemas em cascata na produção.

Suponha que o script de provisionamento do servidor tenha sido executado e a tarefa seja confirmar se o recurso Web-Server está instalado. Se sim, faça uma verificação manual.

Execute o seguinte comando para verificar manualmente se o recurso Web-Server (IIS) está instalado no servidor remoto.

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

Este comando retorna True se o recurso estiver instalado e False caso contrário.

Agora, adicione o seguinte ao bloco it para automatizar este teste. O operador should com a condição -BeTrue afirma que o recurso está instalado.

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
        }
    }
}

Por fim, execute o teste novamente:

cd ~\documents
Invoke-Pester

Como esperado, o teste falhará se o recurso não estiver instalado.


O VS Code também possui uma ótima integração com o Pester. Em vez de executar Invoke-Pester, você pode clicar no item Run Tests em testes individuais diretamente no VS Code. Esta ação invoca testes específicos.


Conclusão

Neste tutorial, você aprendeu como usar o Pester para automatizar testes para seus scripts PowerShell. Você cobriu os passos fundamentais para validar seus scripts de forma eficaz. Esses passos incluem instalar e configurar o Pester, criar um arquivo de teste e escrever seu primeiro teste automatizado.

Construa sobre esta base explorando como o Pester pode lidar com cenários mais avançados, como testar APIs, simular comandos ou executar validações de pré e pós-implantação.

À medida que você integra o Pester em seu fluxo de trabalho, você melhorará seus scripts e ganhará confiança em sua confiabilidade—escalando suas iniciativas de automação com confiança!

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