PowerShell Pester 101: Guida pratica per principianti

Quando esegui uno script, come puoi essere sicuro che abbia fatto esattamente ciò che intendevi? Forse ha rimosso un file o fermato un servizio. Ma lo ha fatto in modo impeccabile in ogni ambiente, sessione utente o macchina interessata? Se il tuo script influisce su decine di elementi, testare con Pester è la scelta migliore.

Pester, il potente modulo PowerShell, ti aiuta a scrivere test automatizzati utilizzando un linguaggio di dominio specifico (DSL). In questo tutorial, imparerai ad eliminare le congetture e creare un processo robusto per convalidare i tuoi script.

Preparati e lascia che Pester aumenti la tua fiducia nello scripting!

Installazione e Configurazione di Pester

Pester garantisce che le azioni dello script corrispondano alle tue aspettative in qualsiasi ambiente. Testare con Pester è una competenza essenziale per gestire l’infrastruttura con PowerShell.

Ma prima, è necessario installare Pester per creare alcuni test attorno a uno script che provvede a un server per vedere come funzionano i test di Pester.

Puoi scaricare il modulo Pester dalla PowerShell Gallery:

Install-Module Pester

Se incontri un avviso, potrebbe essere perché i client Windows 10 (e successivi) hanno installata per impostazione predefinita una versione precedente di Pester. Ad esempio, la versione 3.4.0 è spesso preinstallata.

Assicurati di rimuovere la vecchia versione per evitare conflitti:

$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

Questo script assume la proprietà della cartella di Pester 3.4.0, aggiorna le autorizzazioni e la rimuove.

Installa l’ultima versione di Pester aggiungendo il parametro -Force:

Install-Module Pester -Force

Potresti vedere un altro avviso riguardante la firma della nuova versione. Microsoft ha firmato la versione pre-installata, mentre il responsabile di Pester, Jakub, ha firmato l’ultima versione.

Verifica la versione installata con il seguente comando:

Get-Module -Name Pester -ListAvailable

Creazione di un File di Test Pester

Ora che Pester è installato, creiamo alcuni test. Per scopi dimostrativi, supponiamo che uno script sia incaricato di installare la funzionalità Windows IIS.

Crea uno script PowerShell chiamato ServerProvisioning.Tests.ps1 nella directory desiderata; diciamo che si trova nella cartella ~\Documenti.

Successivamente, esegui i test Pester con il cmdlet Invoke-Pester:

cd ~\Documents
Invoke-Pester

Eseguire questo comando senza test disponibili comporta l’assenza di esecuzione di test.

Aggiungiamo alcuni test utilizzando la struttura a blocchi gerarchici di Pester, dove:

  • describe rappresenta una categoria di test, come ad esempio la funzionalità principale di uno script.
  • contextorganizza facoltativamente i test in sottocategorie.
  • itdefinisce singoli test.
describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {

        }
    }
}

describe 'RegistryTweaks' {

}

describe 'SoftwareInstalls' {

}

Aggiunta ed Esecuzione di un Test

Immagina uno script che provvede a un server ma trascura un passaggio cruciale, come ad esempio abilitare una funzionalità richiesta. Se non controllato, tale omissione può causare problemi a cascata in produzione.

Supponiamo che lo script di provisioning del server sia stato eseguito e il compito è confermare che la funzionalità Web-Server sia installata. In tal caso, esegui un controllo manuale.

Esegui il seguente comando per controllare manualmente se la funzionalità Web-Server (IIS) è installata sul server remoto.

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

Questo comando restituisce True se la funzionalità è installata e False in caso contrario.

Ora, aggiungi il seguente blocco it per automatizzare questo test. L’operatore should con la condizione -BeTrue afferma che la funzionalità è installata.

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

Infine, riesegui il test:

cd ~\documents
Invoke-Pester

Come previsto, il test fallirà se la funzionalità non è installata.


VS Code ha anche una grande integrazione con Pester. Invece di eseguire Invoke-Pester, puoi fare clic sull’elemento Run Tests sui singoli test direttamente in VS Code. Questa azione invoca test specifici.


Conclusione

In questo tutorial, hai imparato come utilizzare Pester per automatizzare il testing dei tuoi script PowerShell. Hai coperto i passi fondamentali per convalidare i tuoi script in modo efficace. Questi passaggi includono l’installazione e la configurazione di Pester, la creazione di un file di test e la scrittura del tuo primo test automatizzato.

Costruisci su questa base esplorando come Pester possa gestire scenari più avanzati, come testare API, simulare comandi o eseguire validazioni pre e post-deployment.

Man mano che integri Pester nel tuo flusso di lavoro, migliorerai i tuoi script e guadagnerai fiducia nella loro affidabilità—scala con sicurezza i tuoi sforzi di automazione!

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