Appium versus Native Frameworks: een vergelijking

Door Kouros Aliabadi en Rohan Janjua

Dit bericht is een samenvatting van onze ervaringen en niet noodzakelijk het hele plaatje. We zullen enkele links geven en hierop voortbouwen in toekomstige berichten om u te helpen bij uw eigen onderzoek. We hopen dat dit een goed startpunt is voor iedereen die de keuze wil maken tussen enkele van de toonaangevende benaderingen van mobiele automatisering.

Er zijn alternatieve automatiseringstools die er zijn, maar voor de context van deze blogpost zullen we ons beperken tot deze Appium en de standaard native tools voor iOS en Android: respectievelijk XCUITests en Espresso.

Appium:

Appium is de afgelopen jaren de defacto-tool voor mobiele automatisering geweest en biedt een seleniumachtige ervaring. Tot nu toe was het een van de meest professioneel haalbare keuzes vanwege een aantal redenen.

  1. Ten eerste is het taal agnostisch, met ondersteuning voor een breed scala aan populaire talen. Als uw voorkeurstaal een webdriver-client heeft, kunt u Appium gebruiken. Dit komt door het gedeelde jsonWireProtocol. Dit is erg handig omdat testontwikkelaars de tool snel kunnen oppakken. Ondersteunde talen omvatten, maar zijn niet beperkt tot Java, C #, JavaScript, Python en ruby.
  2. Het is heel eenvoudig om op te pakken en aan de slag te gaan. Net als bij het vorige punt heeft Appium veel overeenkomsten met de Selenium-webdriver. Het voordeel hiervan is dat als de testontwikkelaars gewend zijn om webtests voor seleniumwebdrivers te schrijven, Appium relatief eenvoudig moet zijn en redelijk intuïtief.
  3. Appium maakt het testen van meerdere platforms uit dezelfde testcodebasis mogelijk. Voor degenen die werken in een gecentraliseerd testteam of een team dat werkt op zowel iOS als Android, kan het de hoeveelheid boilerplate-code verminderen die nodig is om met de testinfrastructuur en emulators te werken.
  4. Bovendien is de ervaring van sommige van onze testingenieurs dat de ondersteuning voor native apps die webviews gebruiken beter is voor Appium dan de meeste andere concurrenten. De ondersteuning door Appium kan van onschatbare waarde zijn als het gaat om het automatiseren van hybride apps.

Er zijn ook enkele nadelen aan het gebruik van Appium:

  1. Onze ervaring is dat Appium-tests veel langzamer verlopen dan tests die zijn geschreven in XCUITests of Espresso
  2. De testcode leeft niet met de ontwikkelaarscode. Nu staat dit misschien ter discussie, maar we zijn ervan overtuigd dat testcode en ontwikkelaarscode dicht bij elkaar moeten leven.
  3. Voor het testen van platformonafhankelijke apps zal er altijd een zekere mate van technische complexiteit zijn met Appium. Je moet ofwel:
  4. Onderhoud 2 sets PageObjects / ScreenObjects die aan één contract voldoen, zodat ze met slechts één set tests kunnen worden aangeroepen.
  5. Schrijf 2 sets tests
  6. Zorg ervoor dat ontwikkelaars in beide apps dezelfde id's gebruiken

Native tools:

De twee belangrijkste platforms voor app-ontwikkeling hebben nu zeer competitieve UI-automatiseringstools: XCUITest en Espresso. De volwassenheid van deze twee tools is enorm verbeterd en in een recent gesprek op WWDC 2017 hebben Apple duidelijk gemaakt dat ze zeer actief zijn in het verbeteren van hun UI-automatiseringstools.

  1. Het gebruik van XCUITest en Espresso heeft een fundamenteel voordeel: ze worden gecreëerd door de platformaanbieders: Apple en Google. Deze tools zullen altijd vooruitlopen op het testen van iOS en Android. Elke nieuwe functie van Appium zou in de meeste gevallen worden gebouwd bovenop de functionaliteit van een bestaande native tool.
  2. Een ander groot voordeel in onze ogen is dat u de testcode bij de broncode van uw project opneemt. Dit staat misschien enigszins ter discussie, maar we zullen dit in een toekomstige functie bespreken. Voor nu zullen we alleen maar zeggen dat we geloven dat het opnemen van uw testcode in hetzelfde project en in dezelfde taal die uw ontwikkelaars gebruiken, grote voordelen heeft. Het geeft meer stimulans voor samenwerking binnen het team en stelt iedereen in staat om gemakkelijk bij te dragen aan dit aspect van softwareontwikkeling.
  3. Soms wordt verondersteld dat de Android-ervaring anders is dan de iOS-ervaring, door je tests te schrijven voor elk platform dat je je testraamwerk niet ingewikkelder hoeft te maken om deze situaties aan te kunnen.
  4. Veel minder schilferig. Native tools zijn gewoon minder schilferig. Het kan iets te maken hebben met een kleiner aantal bewegende delen en minder communicatielagen tussen de testcode en de instrumentatie, maar tests geschreven met native tools lijken veel minder schilferig te zijn.
  5. U kunt een veel grotere toolset gebruiken dan wanneer u een tool zoals Appium gebruikt. Met Android hebt u bijvoorbeeld toegang tot zowel de UiAutomator-bibliotheek als de Espresso-bibliotheek.

Espresso:

Google's Android-testtool Espresso heeft enkele handige functies die het vermelden waard zijn.

  1. Espresso is erg snel, we hebben nog nooit zoiets gezien in UI-automatisering. Het is net als de Flash van UI-automatisering, geen ander hulpmiddel komt in de buurt van zijn snelheid.
  2. U hoeft zich geen zorgen te maken om te wachten tot er dingen gebeuren of uw testcode in te vullen, omdat Espresso dit voor u afhandelt, met uitzondering van enkele uitzonderlijke gevallen. Dit neemt eigenlijk het meest broze aspect van UI-automatisering uit de vergelijking.
  3. Espresso hanteert een ‘grijze doos’ testbenadering. Niet helemaal een zwarte doos, niet helemaal wit. Met espresso heeft de tester veel meer controle over de toepassing dan in een black box-tool zoals appium.
  4. Met Espresso kan de tester gebruikmaken van hulpmiddelen zoals Robolectric, een framework voor het uitvoeren van de Android SDK zonder een simulator te starten of een apparaat aan te sluiten. Dit betekent dat uw tests sneller worden gestart en ook sneller worden uitgevoerd.

Er is een raamwerk vergelijkbaar met Espresso, ook gemaakt door Google, voor iOS-testen dat hier het vermelden waard is: EarlGrey. We hebben het niet gebruikt, maar als het enkele voordelen van Espresso voor iOS biedt, is het de moeite waard om te verkennen.

Er zijn ook enkele nadelen aan het gebruik van native testtools:

  1. Als u een platformonafhankelijke app ontwikkelt, moet u mogelijk twee keer zoveel tests uitvoeren als wanneer u een tool als Appium gebruikt.
  2. Als u een platformoverschrijdende app ontwikkelt, moet u twee talen kennen.
  3. Bij deze aanpak kan meer complexiteit worden betrokken. Dit is een bijwerking van de extra kracht en toegang die een tool zoals Espresso de tester kan geven. Espresso wacht bijvoorbeeld automatisch op het voltooien van gebeurtenissen in de geteste toepassing met behulp van een IdlingResource. In sommige gevallen moet de tester de IdlingResource echter handmatig implementeren.
  4. Met een tool als Espresso kan de tester de applicatie in een staat brengen die hij mogelijk niet kan bereiken vanuit het perspectief van een gebruiker. Nogmaals, dit is de keerzijde van de extra kracht die je krijgt.