PowerShell Pester 101: Een Praktische Gids voor Beginners

Wanneer je een script uitvoert, hoe weet je zeker dat het precies heeft gedaan wat je bedoelde? Misschien heeft het een bestand verwijderd of een service gestopt. Maar heeft het dit foutloos gedaan in elke omgeving, gebruikerssessie of machine die het heeft aangeraakt? Als je script invloed heeft op tientallen – testen met Pester is je beste gok.

Pester, de krachtige PowerShell-module, helpt je geautomatiseerde tests te schrijven met behulp van een domeinspecifieke taal (DSL). In deze tutorial leer je het giswerk uit te schakelen en een ijzersterk proces te creëren om je scripts te valideren.

Riem vast en laat Pester je scriptvertrouwen versterken!

Installeren en configureren van Pester

Pester zorgt ervoor dat de acties van je script overeenkomen met je verwachtingen in elke omgeving. Testen met Pester is een essentiële vaardigheid voor het beheren van infrastructuur met PowerShell.

Maar eerst moeten we Pester installeren om wat tests op te bouwen rond een script dat een server voorziet om te zien hoe Pester-tests werken.

Je kunt de Pester-module downloaden van de PowerShell Gallery:

Install-Module Pester

Als je een waarschuwing tegenkomt, kan dat zijn omdat Windows 10 (en latere) clients standaard een oudere versie van Pester geïnstalleerd hebben. Bijvoorbeeld, versie 3.4.0 is vaak vooraf geïnstalleerd.

Zorg ervoor dat je de oude versie verwijdert om conflicten te voorkomen:

$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

Deze script neemt eigenaarschap van de Pester 3.4.0 map, werkt machtigingen bij en verwijdert het.

Installeer de nieuwste versie van Pester door de parameter -Force toe te voegen:

Install-Module Pester -Force

Je kunt een andere waarschuwing zien met betrekking tot de handtekening van de nieuwe versie. Microsoft heeft de vooraf geïnstalleerde versie ondertekend, terwijl de beheerder van Pester, Jakub, de nieuwste versie heeft ondertekend.

Controleer de geïnstalleerde versie met het volgende commando:

Get-Module -Name Pester -ListAvailable

Het maken van een Pester-testbestand

Nu Pester is geïnstalleerd, laten we wat tests maken. Stel voor demonstratiedoeleinden dat een script is belast met het installeren van de IIS Windows-functie.

Maak een PowerShell-script met de naam ServerProvisioning.Tests.ps1 in de gewenste map; laten we zeggen dat het in je ~\Documenten map staat.

Vervolgens voer Pester-tests uit met het Invoke-Pester cmdlet:

cd ~\Documents
Invoke-Pester

Als je dit commando uitvoert zonder tests beschikbaar, worden er geen tests uitgevoerd.

Laten we wat tests toevoegen met behulp van de hiërarchische blokstructuur van Pester, waar:

  • describe een categorie tests vertegenwoordigt, zoals de belangrijkste functionaliteit van een script.
  • context optioneel tests in subcategorieën organiseert.
  • it individuele tests definieert.
describe 'IIS' {
    context 'Windows features' {
        it 'installs the Web-Server Windows feature' {

        }
    }
}

describe 'RegistryTweaks' {

}

describe 'SoftwareInstalls' {

}

Een test toevoegen en uitvoeren

Stel je een script voor dat een server voorziet maar een cruciale stap mist, zoals het inschakelen van een vereiste functie. Als dit niet wordt gecontroleerd, kan deze fout ernstige gevolgen hebben in productie.

Stel dat het serverprovisioning-script is uitgevoerd en de taak is om te bevestigen dat de Web-Server-functie is geïnstalleerd. Als dat zo is, voer dan een handmatige controle uit.

Voer de volgende opdracht uit om handmatig te controleren of de Web-Server-functie (IIS) is geïnstalleerd op de externe server.

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

Deze opdracht geeft True terug als de functie is geïnstalleerd en anders False.

Voeg nu het volgende toe aan het it-blok om deze test te automatiseren. De should-operator met de voorwaarde -BeTrue bevestigt dat de functie is geïnstalleerd.

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

Rerun tot slot de test:

cd ~\documents
Invoke-Pester

Zoals verwacht zal de test mislukken als de functie niet is geïnstalleerd.


VS Code heeft ook een geweldige Pester-integratie. In plaats van Invoke-Pester uit te voeren, kunt u in VS Code rechtstreeks op de item Run Tests klikken bij individuele tests. Deze actie roept specifieke tests op.


Conclusie

In deze tutorial heb je geleerd hoe je Pester kunt gebruiken om het testen van je PowerShell-scripts te automatiseren. Je hebt de basisstappen behandeld om je scripts effectief te valideren. Deze stappen omvatten het installeren en configureren van Pester, het maken van een testbestand en het schrijven van je eerste geautomatiseerde test.

Bouw voort op deze basis door te onderzoeken hoe Pester meer geavanceerde scenario’s kan behandelen, zoals het testen van API’s, het belachelijk maken van opdrachten of het uitvoeren van validaties vóór en na implementatie.

Naarmate je Pester integreert in je workflow, zul je je scripts verbeteren en vertrouwen krijgen in hun betrouwbaarheid—schakel met vertrouwen op naar het schalen van je automatiseringsinspanningen!

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