Wat is testautomatisering? Een eenvoudige, duidelijke inleiding

Er zijn twee soorten testen in de wereld van software: handmatig en geautomatiseerd. Sommige soorten handmatig testen, zoals ontdekkingstesten en bruikbaarheidstesten, zijn van onschatbare waarde. Andere soorten tests, zoals regressietests en functionele tests, kunnen handmatig worden uitgevoerd, maar het is een tamelijk verspillende praktijk voor mensen om steeds maar weer hetzelfde te doen. Het zijn dit soort repeterende tests die zich lenen voor testautomatisering.

Testautomatisering is het automatisch uitvoeren van tests, het beheren van testgegevens, en het gebruiken van de resultaten om de kwaliteit van software te verbeteren. Het is in de eerste plaats een maatregel voor kwaliteitsborging, maar bij de activiteiten ervan is de inzet van het hele softwareproductieteam betrokken. Van bedrijfsanalisten tot ontwikkelaars en DevOps-engineers, om het maximale uit testautomatisering te halen is de betrokkenheid van iedereen nodig.

Dit bericht zal u op hoog niveau inzicht geven in waar het bij testautomatisering om gaat. Er zijn allerlei soorten tests, maar niet alle moeten worden geautomatiseerd; laten we daarom beginnen met algemene criteria voor testautomatisering.

Criteria voor automatisering

Een test moet aan enkele criteria voldoen om te kunnen worden geautomatiseerd – anders zou het uiteindelijk meer kunnen kosten dan het bespaart. Een belangrijk doel van automatisering is immers het besparen van tijd, moeite en geld. Hier zijn enkele algemene criteria voor testautomatisering. Dit zijn uitgangspunten, let wel. Uw criteria kunnen verschillen, afhankelijk van uw omstandigheden.

Herhaalbaar

De test moet herhaalbaar zijn. Het heeft geen zin een test te automatiseren die maar één keer kan worden uitgevoerd. Een herhaalbare test heeft de volgende drie stappen:

  1. Opzetten van de test, inclusief data en omgeving.
  2. Uitvoeren van de functie en meten van het resultaat.
  3. Opruimen van de data en omgeving.

In de eerste stap willen we in staat zijn om de omgeving in een consistente staat te brengen. Met andere woorden, als we een test hebben voor het proberen toe te voegen van een bestaande gebruiker, moeten we ervoor zorgen dat de gebruiker bestaat voordat we de test uitvoeren. Als de test is voltooid, moet de omgeving worden teruggebracht naar de basistoestand.

Determinant

Wanneer een functie determinant is, betekent dit dat de uitkomst hetzelfde is elke keer dat hij wordt uitgevoerd met dezelfde invoer. Hetzelfde geldt voor tests die geautomatiseerd kunnen worden. Bijvoorbeeld, stel dat we een optelfunctie willen testen. We weten dat 1 + 1 = 2 en dat 394,19 + 5,81 = 400,00. Optellen is een determinerende functie.

Software daarentegen kan zo’n groot aantal variabele inputs gebruiken dat het moeilijk is om steeds hetzelfde resultaat te krijgen. Sommige variabelen kunnen zelfs willekeurig zijn, waardoor het moeilijk kan zijn de specifieke uitkomst te bepalen. Softwareontwerp kan dit compenseren door testinvoer mogelijk te maken via een testharnas.

Andere kenmerken van een toepassing kunnen additief zijn; bijvoorbeeld het aanmaken van een nieuwe gebruiker zou het aantal gebruikers doen toenemen. Als we een gebruiker toevoegen, weten we tenminste dat het aantal gebruikers slechts met één zou mogen toenemen. Het parallel uitvoeren van tests kan echter onverwachte resultaten opleveren. Isolatie kan dit soort vals-positieve resultaten voorkomen.

Unopinionated

Je kunt zaken van mening niet automatiseren. Dit is waar usability testing, beta testing, enzovoort echt schitteren. Feedback van gebruikers is belangrijk, maar het kan gewoon niet worden geautomatiseerd … sorry!

Typen geautomatiseerde tests

Er zijn zoveel soorten tests, waarvan er vele kunnen worden geautomatiseerd, dat we ze niet allemaal in één bericht kunnen zetten. Maar hier zijn er genoeg om je een goed startpunt te geven.

Code Analyse

Er zijn eigenlijk veel verschillende soorten code analyse tools, waaronder statische analyse en dynamische analyse. Sommige van deze tests zoeken naar veiligheidslekken, andere controleren op stijl en vorm. Deze tests worden uitgevoerd wanneer een ontwikkelaar code incheckt. Behalve het configureren van regels en het up-to-date houden van de tools, is er niet veel testwerk te doen met deze geautomatiseerde tests.

Unit Tests

Je kunt ook een unit test suite automatiseren. Unit tests zijn ontworpen om een enkele functie, of eenheid, van de werking in isolatie te testen. Ze draaien meestal op een build server. Deze tests zijn niet afhankelijk van databases, externe API’s, of bestandsopslag. Ze moeten snel zijn en zijn ontworpen om alleen de code te testen, niet de externe afhankelijkheden.

Integratietesten

Integratietesten zijn een ander soort dier als het gaat om automatisering. Omdat een integratietest – ook wel end-to-end test genoemd – interactie moet hebben met externe afhankelijkheden, is het ingewikkelder om ze op te zetten. Vaak is het het beste om nep externe bronnen te creëren, vooral als het gaat om bronnen buiten je controle.

Als je bijvoorbeeld een logistieke app hebt die afhankelijk is van een webservice van een leverancier, kan je test onverwacht mislukken als de service van de leverancier down is. Betekent dit dat uw app kapot is? Het zou kunnen, maar je moet genoeg controle hebben over de hele testomgeving om elk scenario expliciet te maken. Wees nooit afhankelijk van een externe factor om de uitkomst van uw testscenario te bepalen.

Automated Acceptance Tests

Er zijn tegenwoordig verschillende praktijken die geautomatiseerde acceptatietests (AAT) gebruiken, maar ze doen in feite hetzelfde. Gedragsgedreven ontwikkeling (BDD) en geautomatiseerde acceptatietest-gedreven ontwikkeling (AATDD) zijn vergelijkbaar. Ze volgen allebei dezelfde praktijk van het maken van de acceptatietest voordat de functie wordt ontwikkeld.

Uiteindelijk wordt de geautomatiseerde acceptatietest uitgevoerd om te bepalen of de functie levert wat is overeengekomen. Daarom is het van cruciaal belang dat ontwikkelaars, de business en QA deze tests samen schrijven. Ze dienen als regressietests in de toekomst, en ze zorgen ervoor dat de functie voldoet aan de verwachtingen.

Regressietests

Zonder AAT’s in plaats, moet je regressietests schrijven na de feiten. Beide zijn vormen van functionele tests, maar hoe ze worden geschreven, wanneer ze worden geschreven, en door wie ze worden geschreven zijn enorm verschillend. Net als AAT’s kunnen ze worden aangestuurd via een API door code of een UI. Er bestaan hulpmiddelen om deze tests te schrijven met behulp van een GUI.

Prestatietests

Er bestaan vele soorten prestatietests, maar ze testen allemaal een of ander aspect van de prestaties van een applicatie. Zal het bestand zijn tegen extreme druk? Testen we het systeem op grote hitte? Gaat het ons alleen om de responstijd onder belasting? Hoe zit het met schaalbaarheid?

Soms moeten voor deze tests een groot aantal gebruikers worden geëmuleerd. In dat geval is het belangrijk om een omgeving te hebben die een dergelijke prestatie kan leveren. Er zijn cloudbronnen beschikbaar om te helpen bij dit soort tests, maar het is ook mogelijk om on-premises resources te gebruiken.

Smoke Tests

Wat is een smoke test? Het is een basistest die meestal wordt uitgevoerd na een implementatie of onderhoudsvenster. Het doel van een rooktest is om er zeker van te zijn dat alle services en afhankelijkheden up and running zijn. Een rooktest is niet bedoeld als een complete functionele test. Het kan worden uitgevoerd als onderdeel van een geautomatiseerde implementatie of getriggerd door een handmatige stap.

Algemeen Test Automatisering Proces

Nu dat we criteria voor automatisering hebben gezien en genoeg soorten geautomatiseerde tests om een gevoel voor dingen te hebben, hier is het algemene proces van testautomatisering. Er zijn drie grote stappen bij testautomatisering: voorbereiden, actie ondernemen, resultaten rapporteren.

Voorbereiden

Eerst moeten we de toestand, de testgegevens, en de omgeving waarin de tests plaatsvinden voorbereiden. Zoals we hebben gezien, vereisen de meeste tests dat de omgeving zich in een bepaalde toestand bevindt voordat een actie plaatsvindt. In een typisch scenario, vereist dit enige setup. Ofwel moet de data worden gemanipuleerd, ofwel moet de applicatie in een bepaalde toestand worden gebracht, of beide!

Take Action

Als de toestand en/of de omgeving eenmaal in de voorgedefinieerde toestand is, is het tijd om actie te ondernemen! Het teststuurprogramma voert de test uit, hetzij door de API of de gebruikersinterface van een toepassing aan te roepen, hetzij door de code rechtstreeks uit te voeren. De testdriver is verantwoordelijk voor het “aansturen” van de tests, maar het testmanagementsysteem neemt de verantwoordelijkheid op zich om alles te coördineren, inclusief het rapporteren van resultaten.

Rapport Results

Een testautomatiseringssysteem zal resultaten registreren en rapporteren. Deze resultaten kunnen in een aantal verschillende formaten worden weergegeven en kunnen zelfs probleemtickets of bugs in een werkvolgsysteem aanmaken. Het basisresultaat is echter slagen of falen. Meestal is er een groene of rode indicator voor elk testscenario om aan te geven of een test is geslaagd of mislukt.

Soms zijn tests niet overtuigend of worden ze om de een of andere reden niet uitgevoerd. Wanneer dit gebeurt, zal het automatiseringssysteem een volledig logboek van de output hebben dat ontwikkelaars kunnen bekijken. Dit logboek helpt hen om het probleem op te sporen. In het ideale geval kunnen ze het scenario opnieuw afspelen zodra ze een oplossing hebben gevonden.

De onderste regel

De onderste regel is deze: testautomatisering helpt de kwaliteit te verbeteren met snelheid. Maar niet alle testen kunnen worden geautomatiseerd. Er is zeker een investering mee gemoeid. Met zoveel soorten testen, is het belangrijk dat je de juiste mix maakt. De testpiramide is een eenvoudige vuistregel om dit in goede banen te leiden. Volgens deze piramide moeten de meeste tests unit tests zijn, gevolgd door service tests en vervolgens UI tests.

Een testautomatiseringssysteem coördineert het testen, inclusief het beheren van testgegevens, het uitvoeren van tests en het bijhouden van resultaten. Testautomatisering is de volgende stap voor teams die overweldigd raken door de last van het herhalen van dezelfde handmatige tests die geautomatiseerd zouden moeten worden.

Auteurs bio: Deze post is geschreven door Phil Vuollet. Phil gebruikt software om processen te automatiseren om de efficiëntie en herhaalbaarheid te verbeteren. Hij schrijft over onderwerpen die relevant zijn voor technologie en het bedrijfsleven, geeft af en toe lezingen over dezelfde onderwerpen, en is een familieman die graag voetbalt en bordspelletjes speelt met zijn kinderen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.