Een end-to-end test wordt gebruikt om een keten te testen, je zou het ook een integratie test kunnen noemen. Een van de tools die hiervoor gebruikt kan worden is Selenium. Mijn ervaring met deze tool is echter niet zo best. Het is moeilijk om goede testen te schrijven omdat er allerlei sleep commando's nodig zijn en het onderhouden van de scripts is zelfs nog moeilijker. Het testen van een applicatie wordt zo een handmatig proces en dat is niet wenselijk. Organisaties willen namelijk snel nieuwe versies van software 'live' kunnen zetten om in te kunnen spelen op de veranderende vraag van hun klanten. Protractor is een tool die hiervoor een oplossing biedt.

Protractor

Met Protractor kun je eenvoudig een AngularJS applicaties testen. Het voorkomt dat je in een test allerlei sleep commando's moet zetten en verkort daardoor de doorlooptijd van het geautomatiseerd testen. Het kan ook eenvoudig geïntegreerd worden met bouw proces van de software. Onderliggend maakt Protractor gebruik van WebDriverJS, een onderdeel van Selenium en draait het op Selenium test server. Uiteindelijk draaien de testen in een echte browser en wordt het gedrag van een echte gebruiker nagespeeld. Mijn eerste ervaringen mij de tool zijn -ondanks dat ik eerst vrij sceptisch was- erg positief.

Een ander probleem bij end-to-end testen is de test omgeving. Hoe zorg je er bijvoorbeeld voor dat altijd de zelfde uitgangspositie voor een test run gebruikt wordt? En hoe maak je als organisatie efficient gebruik van de test omgevingen? De kosten voor het in de lucht houden van allerlei test omgevingen kunnen hoog zijn. En hoe ga je om met wijzigingen in de infrastructuur, bijvoorbeeld een upgrade van een database versie? Om deze vragen te omzeilen heb ik mijn eerste Protractor testen gemaakt zonder echte back-end services maar met behulp van mocks. Hierdoor is er geen sprake meer van een echte end-to-end test. Gisteravond heb ik een sessie bezocht bij Quintor over het gebruik van Docker in enterprise omgevingen en ik denk dat Docker een antwoord is op de eerder genoemde vragen.

Docker

Met behulp van Docker kun je op een eenvoudige manier containers maken die bepaalde services leveren. Zo zou je een container kunnen maken die een applicatie server (bijv Tomcat) dienst levert met daarop enkele web applicaties. Het enige dat je moet maken in een configuratie bestand waarin je de container beschrijft. Met behulp van docker compose kun je vervolgens een compositie maken van zulke containers. Zo kun je een hele testomgeving opbouwen. Het idee is dat een docker container binnen aantal seconden opstart. Door het gebruik van een versie beheer systeem kun je versies bijhouden van een configuratie. Zo kun je eenvoudig een oudere versie gebruiken om een bug fix van een productiesysteem te testen.

Het gebruik van Docker en Protractor stelt je dus in staat om echte integratie testen te maken. Als je het geheel ook nog integreert in het bouw proces van de software op bijvoorbeeld Jenkins kun je een testomgeving ad-hoc opbouwen om je Protractor testen uit te voeren. Zodra het bouwproces klaar is laat je de testomgeving weer afbreken. Op die manier kun je heel efficient met je resources om gaan en wordt de software continue getest. Zo kunnen de kosten gereduceerd worden en wordt de kwaliteit van het uiteindelijk product gewaarborgd.

Wil je meer weten over het gebruik van Docker? Op 14 april wordt er een herhaal sessie georganiseerd door Quintor. En op 16 april organiseert Flusso een IT-Krachtsessie over het gebruik van Docker.