Het automatiseren van UI-tests op iOS is net zo eenvoudig geworden als het schrijven van unit tests sinds Apple het XCUI-framework heeft geïntroduceerd. In dit bericht ga ik het hebben over hoe XCUI, in combinatie met gelaagd ontwerp, kan helpen bij het eenvoudig automatiseren van applicaties, vooral die met meerdere aangepaste UI-elementen. Een dergelijke applicatie waar we dit uitgebreid hebben gebruikt is VMware Boxer, een enterprise applicatie van VMware die drie belangrijke functies samenvoegt – Email, Calendar en Contacts. VMware Boxer maakt gebruik van meerdere soorten UI-elementen, van native UITableView tot sterk aangepaste visuele elementen.
Het wordt verondersteld dat lezers een basiskennis hebben van Xcode, Objective C, Swift, XCUI framework en het Apple development ecosysteem in het algemeen. Als XCUI nieuw voor u is, moet u eerst hier beginnen.
Net als elk ander UI-automatiseringsproject begon ons team met een vraag over welk automatiseringsraamwerk te gebruiken. We hadden SeeTest gebruikt. We zagen dit echter als een kans om onze automatiseringsstrategie te herzien, gezien de nieuwe, complexe functionaliteit die is toegevoegd in VMware Boxer, het aantal producten in het VMware-ecosysteem en het testen van de integratie tussen deze producten. Hieronder waren de keuzes die we overwogen-
1. Doorgaan met SeeTest
2. Earl Grey
3. XCUI
Terwijl SeeTest de capaciteit had om te voldoen aan onze onmiddellijke behoeften om te automatiseren, was er een onafhankelijke uitdaging om mee om te gaan. Het vereiste van ons om een nieuwe technologie stack te adopteren. Dit zou extra training voor iOS-ontwikkelaars en speciale experts voor het onderhoud van het automatiseringssysteem vereisen.
Hoe zit het met Appium? We hebben Appium niet overwogen om dezelfde redenen die hierboven voor SeeTest zijn genoemd. Appium is een goede keuze als we hybride apps hadden of significante gedeelde code tussen Android en iOS.
Earl Grey 1 was een mogelijke keuze, aangezien we hiermee in Xcode en Apple-ontwikkeltools konden blijven en het was gebaseerd op XCTest. De Earl Grey 1-automatisering draait echter in hetzelfde proces als de te testen applicatie. Aan de andere kant, Apple’s XCUI framework-gebaseerde automatisering draait in een apart proces dan de applicatie die getest wordt. Dit heeft de voorkeur omdat de te testen applicatie niets meer dan een zwarte doos zou moeten zijn voor de entiteit (een automatiseringsproces of een eindgebruiker) die de UI ervan test.
Houd het automatiseringsproces (een proces dat test) geïsoleerd van de feitelijke te testen applicatie. De te testen applicatie mag niet meer zijn dan een zwarte doos voor het automatiseringsproces.
Elk nieuw hulpmiddel in het Apple-ecosysteem dat niet op één lijn ligt met de aanpak van Apple (bijv. Earl Grey 1) kan zonder waarschuwing mislukken. Een dergelijke aanpak kan veel onderhoud vergen om te kunnen blijven werken met nieuwere of toekomstige aanbiedingen van Apple.
Early Grey 2 voegde de mogelijkheid toe om te communiceren met XCUI. Het was een poging om aan te sluiten bij XCUI, maar het had de bekende problemen.
Uiteindelijk kreeg XCUI de voorkeur. Hiermee heeft een ontwikkelaar meer controle over de automatisering en profiteert hij direct van alle innovaties in het ecosysteem van Apple.
App onder test en automatiseringsmodule XCUI
Voordat we in detail treden, is het belangrijk om te herhalen dat de automatiseringsmodule met XCUI als een onafhankelijk proces van de te testen applicatie wordt uitgevoerd. Om te beginnen hebben we een nieuwe module toegevoegd waarnaar we vanaf nu zullen verwijzen als de Automatiseringsmodule (AM). AM is een werkruimte die een verzameling van klassen en gegevensstructuren bevat die worden gebruikt voor VMware Boxer automatisering met behulp van XCUI.
Accessibility Identifiers
Het is belangrijk dat de applicatie wordt ontwikkeld met de testbaarheid ervan in gedachten. Een van de verantwoordelijkheden van de ontwikkelaar is ervoor te zorgen dat voor elk gebruikersinterface-element dat aan de eindgebruiker wordt blootgesteld, tijdens de ontwikkeling de toegankelijkheids-identifier wordt ingesteld. De toegankelijkheidsidentifier vormt de schakel tussen de te testen applicatie en het automatiseringsproces XCUI.
De toegankelijkheidsidentifier vormt de schakel tussen de te testen applicatie en het automatiseringsproces XCUI.
Ontwerppatroon
Zoals eerder vermeld, is VMware Boxer een enorme applicatie. Bij de keuze van het te gebruiken ontwerppatroon is er rekening mee gehouden dat de tests eenvoudig te implementeren, eenvoudig te onderhouden, herbruikbaar, robuust en schaalbaar moeten zijn. In de onderstaande inhoud worden de lagen van de architectuur van de XCUI Automatiseringsmodule voor VMware Boxer toegelicht:
De volgende figuur toont de basisbouwstenen:
Tests Classes
Dit is de laag die de klassen bevat die de testmethoden bevatten. De bedoeling van deze laag is dat de tests uit minimale code bestaan die alleen zegt wat er getest wordt. Ook hoeft de ontwikkelaar die de tests uitvoert alleen maar na te denken over de high-level applicatie flow die nodig is om te testen wat er getest wordt. De rest van de complexiteit (b.v. hoe te navigeren naar de UI waar de gewenste test kan worden uitgevoerd) moet worden geabstraheerd naar herbruikbare lagen. Zie de afbeelding hieronder die een voorbeeld test methode laat zien die de bovenstaande bedoeling uitlegt – de code test of een Instellingen UI kan helpen bij het in-/uitschakelen van een functie en of het de benodigde schakelbedieningen heeft.