Pester – Het test framework voor PowerShell
In de wereld van ontwikkelaars wordt al jaren gebruik gemaakt van het geautomatiseerd testen van de geschreven code. Het automatisch testen zorgt ervoor dat er over de geschreven code beter wordt nagedacht en bugs sneller ontdekt worden, de code kwaliteit wordt verhoogd en daardoor de code veiliger wordt. Voor PowerShell bestaat ook zo’n framework genaamd Pester. Dit is een framework gebaseerd op Behaviour Driven Development (BDD). Met BDD geef je in simpele leesbare termen aan wat je verwacht dat de uitkomst is van de test. Pester is standaard beschikbaar in Windows 10, maar om de laatste versie te kunnen gebruiken, is het aan te raden om het volgende commando uit te voeren:
Install-Module Pester -Force –SkipPublisherCheck
De –Force flag wordt gebruikt om Pester te updaten van versie 3 naar de laatste versie. Zonder de flag –SkipPublisherCheck kan de nieuwe versie niet geïnstalleerd worden, omdat Pester geen Microsoft product is, maar de standaardversie wel met een Microsoft certificaat is geplaatst.
Een aantal voorbeelden
Als eerste voorbeeld hebben we een eenvoudige PowerShell calculator functie geschreven. Met de functie kunnen we basis calculaties doen op basis van 2 getallen. Deze functie is opgeslagen in Demo.ps1.
Om de functie te testen is de volgende Pester test geschreven. Deze test is opgeslagen in Demo.tests.ps1.
Omdat het script en het testscript dezelfde naam hebben, koppelt Pester de bestanden automatisch aan elkaar. Om Pester aan te roepen gebruiken we het volgende commando:
Invoke-Pester
Als je 1 specifieke test uit het testscript wilt runnen, kan je een filter opgeven. In dit geval wordt het als volgt opgegeven
Invoke-Pester -FullNameFilter “Start-Calc”
Pester 5 laat standaard alleen de tests zien die mislukt zijn. Omdat we alle resultaten willen zien, voegen we er nog 1 commando aan toe
Invoke-Pester -FullNameFilter “Start-Calc” -Show all
Wat je in deze test ziet gebeuren, is dat we alle manieren van calculeren aanroepen en de juiste uitkomst verwachten. Ook wordt er gecontroleerd of een foutieve invoer netjes wordt afgehandeld. Deze test geeft het volgende resultaat:
Pester laat zien welke test fout is gegaan en waarom. Ook worden de regelnummers uit het testscript en het script meegegeven zodat het vinden van de regel waar de test fout is gegaan eenvoudig is.
Als tweede voorbeeld gaan we een string omzetten naar een array. Vervolgens controleren we met Pester of de waardes aanwezig zijn.
Na het draaien van het volgende commando hebben we resultaat.
invoke-pester -FullNameFilter "Add-ValueToArray" -Show All
Nu we weten welke testen er fout gaan, kunnen we deze oplossen en alle tests in één keer draaien.
Invoke-Pester -Show All
Conclusie
Met Pester is het mogelijk om de functionaliteit van PowerShell scripts te testen. Hiermee is te valideren dat de scripts werken zoals verwacht. Fouten worden sneller ontdekt en toekomstige wijzigingen in het script hebben de validatie dat de oudere code nog steeds naar behoren functioneert. Met deze twee voorbeelden is er maar een klein gedeelte van de mogelijkheden getoond. Ga voor meer informatie en voorbeelden naar https://pester.dev.
Peter Barendse, DevOps Engineer