Selenium – (geautomatiseerd) testen als een gebruiker

Door Sam de Poorter, back-end developer
15 januari 2013 - 3127 x bekeken - Categorieën: Tech

Een professionele applicatie moet op zijn minst een degelijke testprocedure doorstaan. Gelukkig is het tijdperk van botweg handmatig testen voorbij. Maar ook aan de huidige testvorm kleven nog nadelen. Er zitten regelmatig fouten in, en ook lopen ontwikkelaars meestal niet warm om testprocedures te doorlopen. Hier zijn dus nog goede verbeterslagen te halen. Gelukkig zijn we bij E-sites niet vies van het proberen en onderzoeken van een alternatief. In deze blogpost wil ik onze opgedane ervaring met Selenium delen.

Wat is Selenium?

Selenium is een test-framework (open-source) voor webapplicaties. Prima vakterm, maar wat maakt dit (sterk opkomende) framework anders dan de concurrerende opties? Selenium is voornamelijk interessant door zijn frisse insteek. Waar normaal de focus ligt op de logica in de code, heeft Selenium aandacht voor de gebruikersfunctionaliteit en de bijhorende wisselwerkingen. Dit betekent ook dat testen uitgevoerd worden in dezelfde omgeving als die voor de gebruikers, namelijk de browser (Firefox).

In de praktijk kenmerkt deze vorm van testen zich direct doordat de acties die de test uitvoert identiek zijn voor een browser, aan die van een gebruiker. Bijvoorbeeld het bezoeken van pagina’s, het aanklikken van elementen of het invullen van een formulier. Met een combinatie van mogelijke acties kan je processen simuleren, zoals het doorlopen van het orderproces (inloggen, navigeren, bestellen en een testbetaling afronden). Tijdens deze acties wordt tussentijds validatie uitgevoerd, waarmee het een volwaardige testcase wordt.

Waarom de keuze voor Selenium? 

Uiteraard hebben we onze beweegredenen voor een alternatief afgewogen tegen de theorie en bekende bevindingen. Onze verwachting was dat Selenium positief is voor de volgende hekelpunten:

  • De test-werkzaamheden rusten vaak op dezelfde schouders, aangezien unit-tests binnen het domein van back-end valt. Samen met het gebrek aan alternatieven levert dit doorgaans herhalende (en dus saaie) werkzaamheden op voor deze ontwikkelaars.
  • Selenium is specifiek toepasbaar op het webdomein en biedt daarvoor extra toepassingen die bij een generieke testvorm ontbreken. 
  • Zoals de naam van unit-tests weggeeft, beperken deze zich tot kleinere ‘units’, maar wel met een hoog detailniveau. Het overzicht, de samenhang tussen diverse componenten en de uiteindelijke gebruikerservaring blijven deels ongedekt binnen deze vorm van testen.

Om op deze punten te kunnen reflecteren, zijn we Selenium uiteraard gaan testen.

Hoe gaat het testen in zijn werk?

De uiteindelijk Seleniumtest bestaat uit een lijst opvolgende commando’s gemixt met de genoemde ‘gebruikeracties’ en tussentijdse validatie, eigenlijks niets meer of minder. Een voorbeeld hiervan is te vinden als Fig1. Hier wordt allereerst Google geopend en vervolgens gaan we naar de zoekresultaten met de term ‘E-sites’. We kiezen voor de homepage van E-sites en navigeren daar aangekomen naar het menu-item werk. Op deze pagina gebruiken we het filter en schrijven we ons naderhand in voor de nieuwsbrief.

In deze enkele regels worden dus al redelijk wat acties uitgevoerd met bijhorende validatie. In dit basale voorbeeld maken we gebruik van validatie door tekst. We controleren dus of bepaalde teksten voorkomen op gegeven momenten, zoals ‘Aanmelding succesvol!’ na het inschrijven voor de nieuwsbrief.

Fig1. - Seleniumtest in uitvoering.

Zodra de test van start gaat, opent Firefox en gaan de commando’s van start. Deze acties worden uitgevoerd in Firefox en zijn dus direct inzichtelijk. Buiten de browser zelf kan je de resultaten ook zien in je IDE. Acties worden per regel groen of rood gemarkeerd, afhankelijk van het behaalde resultaat.

Hoe ervaren wij Selenium in de praktijk?

We maken gebruik van de selenium-IDE. Dit is de manier om Selenium eigen te maken, aangezien de drempel laag ligt. Deze IDE krijgt vorm als een Firefox-plugin, waardoor de ‘installatie’ binnen luttele seconden klaar is en we zonder verdere technische rondslomp aan de slag kunnen.

Buiten de minimale vereisten, heeft deze vorm ook coole features. Zo is er de mogelijkheid om te recorden; hiermee kopieert de IDE de acties die je zelf uitvoert binnen Firefox naar de huidige testcase. Dit levert geen ideale test op, maar wel al een prima basis.

Toch kan al deze functionaliteit vanuit Selenium ook een vertekend beeld afgeven. Wat tegenvalt, is dat het enkele onlogische elementen bevat waar je zonder technische documentatie en technische aanpassingen niet zelf uitkomt. Juist de gebruiksvriendelijkheid schepte de verwachting dat dit technische hekelpunt achterwege zou blijven, anders blijft de instapdrempel hoog tenslotte. Gelukkig zijn het er niet veel en zijn deze punten met de juiste kennis te omzeilen.

Binnen E-sites bundelen we testen samen per project, en laten deze periodiek uitvoeren. De bevindingen van deze testen kunnen te allen tijde worden geraadpleegd. Als een test niet goed wordt afgerond, zal een gedetailleerde melding (zie Fig2) worden geplaatst bij de verantwoordelijke ontwikkelaar(s). Dankzij deze opzet van het rapporteren worden fouten voorkomen die voorheen niet (snel) afgevangen werden.


Fig2. - Voorbeeld van een test die misgaat (registerFacebook).

Conclusie

Selenium is niet voor niks verwelkomd binnen ons assortiment aan tools. Het biedt meer veiligheid, een kortere ontwikkelingstijd en een prettig alternatief om testen mee op te zetten.

We zijn aangenaam verrast door het gebruiksgemak en de onderzochte mogelijkheden. Daarbij moet wel de kanttekening geplaatst worden dat juist de technische documentatie overbodig zou moeten zijn als Selenium wil inzetten op het gemakkelijk eigen maken van deze testvorm.

Seleniumtesten vormen een wenselijke aanvulling op de reeds aanwezige unit-testen. Het blijft echter belangrijk om deze vormen in hun specifieke domein in te zetten. Seleniumtesten zijn prima om gebruikersfunctionaliteit te toetsen en de samenhang tussen diverse componenten, maar kan niet concurreren met unit-tests op het gebied van logicatoetsing. Voor een solide testprocedure is het dus raadzaam om de twee vormen met elkaar te combineren.

Hoe mobiel vriendelijk is jouw organisatie?

Door Rob Peters

Is jouw organisatie voorbereid op het sterk toenemende mobiele internetverkeer? Lees meer en download onze white paper die je helpt bij het opzetten… - Lees meer

Lees verder