MENU

Automatisch testen kan nóg intelligenter

Reply

Automatisch testen kan nóg intelligenter

Een softwareproject wordt leuker en interessanter om te bouwen naarmate je als team dichter bij het beoogde resultaat komt. Bij het opleveren van nieuwe features wordt echter ook de controle van de bestaande functionaliteit een steeds belangrijker aandachtspunt.  Wil je het omvallen van oude functionaliteit snel kunnen detecteren dan is het noodzakelijk om steeds opnieuw alle mogelijke paden in je applicatie te bewandelen. Dit proces is een tijdrovende en eentonige bezigheid terwijl je als programmeur meestal liever bezig bent met het bedenken van nieuwe oplossingen.

Test frameworks

Is dat end-to-end-proces niet te automatiseren? Ja dat kan en er zijn frameworks die je daarbij kunnen helpen, zoals Protractor in combinatie met Jasmine dat zijn voor een applicatie met een AngularJS front-end. Ook het uitschrijven van testscenario’s kan een tijdrovende klus worden. Een veelvoud aan schermen en entiteiten maken dit een eentonig proces en bovendien is het lastig om bij refactoring de code consistent te houden. Bij MetaFactory gaan we daarom een stapje verder en automatiseren we de generatie van de tests met behulp van patterns en onze eigen MetaFactory tool.

Test scenario’s

Bij end-to-end-tests gaat het om het simuleren van gebruikersinteractie, op basis waarvan vervolgens een bepaalde feedback van de server en weergave in de userinterface verwacht wordt. We schrijven hiervoor met behulp van Protractor/Jasmine verschillende scenario’s die een gebruiker kan bewandelen. Aangezien dat voor iedere entiteit opnieuw moet kan MetaFactory hier veel repetitief werk besparen. Een veelvoorkomend voorbeeld van een generiek pad wat de gebruiker kan volgen is het volgende:

  1. Succesvol inloggen
  2. Weergeven van een opgeslagen lijst met entiteiten
  3. Het kunnen toevoegen van een entiteit
  4. Deze vervolgens terugzien in een overzicht met opgeslagen data en
  5. Deze tot slot via dit overzichtsscherm verwijderen.

Automatisch genereren van test-scenario’s

We hebben hier entiteiten met verschillende data types. De informatie die je verwacht op het scherm, alsmede de informatie die moet worden ingevoerd in de ‘create/edit’-dialogen verschilt dus ook. De patterns die we binnen MetaFactory gebruiken voor de te genereren tests moeten dus in ieder geval kijken naar de datatypen van de entiteit en in staat zijn zowel de invoer als het verwachte eindresultaat hierop af te stemmen. Dit kan door in de gebruikte Freemarker templates via if-else-constructies afhandeling te creëren voor alle typen die voorkomen in het model. Heb je vóór het schrijven van deze tests ook de applicatie zelf al gebouwd met MetaFactory, dan zal dit je bekend voorkomen en kun je de logica voor de opbouw van je dialoogschermen hiervoor hergebruiken.

Gebruik van metadata

Er zijn meer factoren van belang dan het type van de velden binnen de entiteiten. Deze factoren kunnen in het datamodel als metadata meegegeven worden aan een entiteit of aan afzonderlijke velden. Je kunt vanuit je patterns deze metadata opvragen en daarmee specifiek gedrag in je uiteindelijke code afdwingen.  Misschien wil je bepaalde velden niet meenemen in je test omdat het berekende velden zijn of is er een speciale invoer/afhandeling nodig voor één op veel relaties.

Omdat de metadata vrij definieerbaar is kun je de Freemarker template voor je code zo intelligent maken als nodig. Je hoeft zo maar 1 keer code te schrijven, waarna vervolgens voor een onbeperkt aantal entiteiten de bijhorende testscenario’s worden gegenereerd. Letterlijk automatisering van het automatisch testen dus.

Maak het efficiënter én leuker

Voor wie een hekel heeft aan repetitief werk was het met Protractor al een verademing om te zien hoe de regressietests over het scherm flitsen. Met het gebruik van MetaFactory patterns en metadata ga je nog een stap verder en wordt ook het schrijven van de testscenario’s een heel stuk leuker en efficiënter.



Laat een reactie achter