JarnoVogelzang

Hoe test je PHP webapplicaties? Deel 1: acceptance testing.

In een van mijn vorige artikelen schreef ik over het feit dat alleen geteste software werkt. Waarom is dat? Simpel, je weet alleen dat iets werkt, wanneer je het getest hebt. En je kunt alleen testen door automatisch te testen. Waarom? Omdat niemand zin heeft om altijd dezelfde tests handmatig uit te voeren. De vraagt blijft echter wel: hoe test je die geschreven software? Dat leg ik je in dit artikel uit.

Jargon

Toen ik voor het eerst in aanraking kwam met het testen van software, kwam ik allemaal jargon tegen waar ik maar weinig van begreep. Acceptance testing, unit testing, penetration testing, object mocking, stubs, noem maar op. Daardoor was het lastig om te beginnen: ik zag door de bomen het bos niet meer.

Totdat ik de video’s van Jeffrey Way (Laracasts) ging volgen. In de videoserie ‘PHP Testing Jargon’ legt Jeffrey exact uit wat de verschillende termen betekenen. Vervolgens gaat hij verder in op het testen van specifieke code. Ik heb er 2 specifieke testvormen uitgehaald die ik vandaag de dag nog altijd gebruik: acceptance testing en unit testing. In dit artikel ga ik specifiek in op acceptance testing.

Acceptance testing

Acceptance testing is niets anders dan testen of jouw geschreven software voldoet aan de vereisten. Welke vereisten zijn dan? Dat zijn de vereisten van de feature die je op dit moment aan het implementeren bent. Deze vereisten komen meestal van degene voor wie je de applicatie bouwt. Voorbeeldje: stel je bouwt een loginpagina waarop een eindgebruik moet kunnen inloggen. Vereisten zouden dan kunnen zijn:

  • Een gebruiker moet doorgaan naar de dashboardpagina wanneer deze inlogt met valide gegevens.
  • Een gebruiker moet niet kunnen inloggen met invalide gegevens.
  • Een gebruiker moet een notificatie krijgen op het moment dat hij probeert in te loggen met invalide gegevens.

Deze vereisten moet je zien te implementeren in de code. Daarmee zijn ze direct ook de tests zelf. Normaal gezien, zou je niet gebruik maken van automatisch testen, dan ga je handmatig naar de loginpagina, vul je valide gegevens in en check je of je doorgaat naar het dashboard. Op die manier ’test’ je of de software op een juiste manier hebt gebouwd. Dit is handmatig testen. Nu blijkt dat je deze vereisten gemakkelijk om kunt zetten naar acceptance tests. Hierdoor voert de computer zelf de tests uit en hoef jij dat niet meer te doen. Dit doe ik zelf via Codeception + Behat.

Behat werkt met zogeheten scenario’s: dit zijn voorbeelden die aangeven hoe de webapplicatie zou moeten werken. Bovenstaande vereisten zijn eigenlijk 3 scenario’s: 3 voorbeelden van hoe het loginsysteem moeten werken. Deze scenario’s behoren samen tot 1 feature. Een webapplicatie heeft vaak meerdere features: mogelijkheid tot inloggen, mogelijkheid tot registreren, het kunnen opslaan van items, het kunnen verwijderen van items, etc.

Bovenstaande feature wordt vervolgens beschreven in een Behat feature bestand. Dat ziet er dan zo uit:

De verschillende regels zijn de verschillende stappen die jouw eindgebruiker doorloopt wanneer deze de applicatie gebruikt. Het mooie is dat deze ‘code’ automatisch uitgevoerd kan worden waardoor je kunt valideren of het systeem nog werkt of niet. Hoe werkt dat? Simpel, neem nu bijvoorbeeld de eerste regel ‘Given I am on the login page’. Deze regel kun je uitvoerbaar maken door hem in een zogeheten PHP Context class te zetten. Dat doe je op de volgende manier:

De parent class ‘AcceptanceTester’ bevat methods die je kunt gebruiker om een zogeheten WebDriver aan te sturen. Een Webdriver is niets anders dan een programmaatje die een webbrowser aanstuurt. Je kunt via een Webdriver bijvoorbeeld klikken op een bepaald element in de webpagina. Wanneer je nu de test uitvoert, ‘ziet’ het systeem dat hij de functie iAmOnTheLoginPage van de class ‘LoginContext’ uit moet voeren. Deze functie navigeert vervolgens naar de URL ‘/auth/login’ (de login pagina). Vervolgens worden de andere regels uitgevoerd die ongeveer het volgende uitvoeren:

  • And I have a user ‘[email protected]’ with password ‘RandomPa55’: maak een gebruiker aan in de database met bovenstaande gegevens.
  • I log in with ‘[email protected]’ and ‘RandomPa55’: vul het inlogformulier in met bovenstaande gegevens en druk op de submit knop.
  • I should be on the dashboard page: check of je op de dashboard pagina bent.

De laatste regel checkt daadwerkelijk of de functionaliteit klopt. Ofwel: is de feature correct geimplementeerd of niet? Als je deze test vervolgens automatisch uitvoert wanneer je nieuwe code toevoegd, kun je in enkele seconden weten of de applicatie nog werkt of niet. En dat is de kracht van testen. Je hoeft niet handmatig de applicatie telkens opnieuw te testen. Dat kost veel tijd en geld. En dat moet de computer voor je doen.

In dit artikel heb ik je een korte introductie gegeven tot acceptance testing via Codeception. Wil je nu meer weten over software testen? Dan raad ik je sterk aan zowel mijn volgende artikel te lezen als de documentatie van Codeception te bekijken. Mijn volgende artikel zal gaan over Unit Testing in PHP. Tot volgende week!

Leave a Comment