Mobile app UI automation: Waarom je voor Espresso moet kiezen

maandag 21 januari 2019

Espresso is hét test automation framework dat Google aanbiedt voor het testen van Android apps. De afgelopen jaren heb ik hier met plezier mee mogen werken. Daarom wil ik via mijn blog een aantal features van Espresso delen die aan dat plezier bijgedragen hebben.

Synchronization capabilities

Timing issues in tests zijn altijd vervelend. Frameworks zoals Appium en Selenium Webdriver lossen dit op met waits waarbij er gepolld wordt tot de View die je nodig hebt beschikbaar is. Daardoor kan het gebeuren dat de app al klaar is met het renderen van de content en de opgevraagde View niet beschikbaar is, maar er nog wel gepolld wordt totdat de maximale wachttijd van de wait verstreken is. Espresso lost dit iets intelligenter op doordat het kijkt of er nog activiteiten uitgevoerd worden door de app. Zodra de app idle is, zal er pas een actie uit het testscript uitgevoerd worden. Espresso zal dus nooit blijven wachten en pollen terwijl de app idle is. Het voordeel hiervan is dat tests sneller zijn, maar ook dat het draaien van tests via clouddiensten geen onverwachte timing issues oplevert doordat wachttijden daar ineens langer zijn op plekken waar je lokaal geen waits voor nodig had.

Integratie

Espresso wordt door Google zelf ontwikkeld en dit betekent nauwe integratie met je app in Android Studio. De id’s die je in je tests gebruikt om Views te vinden, zijn de id’s die je in je layouts gebruikt. Bij een refactor van de id’s in je layout worden de id’s in je tests dus ook direct aangepast. Daarnaast zijn dependencies in de app eenvoudig te mocken en stubben. Netwerkverkeer kan vervangen worden door stubs dankzij oplossingen zoals OkReplay, intents kunnen gecontroleerd worden, en wat je in je app met een View kan, kan je ook in je tests. Dit zorgt ervoor dat je tests beter gecompartimentaliseerd zijn en daardoor ook betrouwbaarder. Voor mij als tester is er een bijkomend voordeel: de integratie binnen het app project zorgt er ook voor dat nauwe samenwerking met de developers vanzelfsprekend is.

Snelheid

Ik had het al even aangestipt: UI testen via Espresso zijn snel. Ter vergelijking heb ik voor een hybrid app 10 testen geschreven en deze met behulp van Appium en Espresso geautomatiseerd. Lokaal deed Appium er meer dan 5 minuten over om de tests te draaien. Espresso deed het in 49 seconden. Via een cloudoplossing ging Appium zelfs richting de 10 minuten doordat het client-server model van Appium voor extra vertraging zorgt als de tests remote worden uitgevoerd. Espresso doet er remote nog steeds minder dan een minuut over, doordat de tests op het toestel zelf draaien. En dat is prettig. Niet alleen als je je regressietestset wat vaker wil draaien, maar ook als je tests aan het schrijven bent, of je framework refactort en wilt controleren of je tests nog werken.

Kortom...

Wil je UI testen voor een Android App gaan automatiseren? Espresso is zeker het overwegen waard! Meer weten over app testen of Espresso?