Testování automatizace iOS s Xcode Rámec uživatelského rozhraní

⚡ Chytré shrnutí

Automatizované testování iOS s Xcode zaznamenává a přehrává akce uživatelského rozhraní v testované aplikaci v souladu s testovacím cyklem návrhu, testování, implementace a opětovného testování, dokud všechny případy nebudou úspěšné.

  • 🔘 Cyklus TDD: Návrh, testování, implementace a opětovné testování tvoří čtyři fáze používané při testování aplikací pro iOS.
  • ☑️ Předpoklady: Mac s operačním systémem OS X s Xcode Nainstalováno IDE, automatizační framework a iOS SDK.
  • (Tj. Trasa nástrojů: Automatizační nástroj zaznamenává skript, zobrazuje ho v protokolu skriptů a na vyžádání jej přehrává.
  • 🧪 Trasa OCUnit: Cíl balíčku jednotkových testů, aktivní schéma, testovací skupina a testovací třída napsané v Objective-C.
  • ⚠️ Zastaralost: Nástroj UIAutomation byl v roce 2004 zastaralý. Xcode 8 a odstraněn; XCUITest je podporovaný nástupce.
  • 🛠️ Moderní ekvivalent: Cíl UI Testing Bundle a dotazy XCUIApplication nahrazují nahraný skript Instruments.

Automatizované testování iOS s Xcode Framework automatizace uživatelského rozhraní spouštějící nahraný skript v aplikaci

Testování automatizace iOS pomocí Xcode

Abyste zaručili kvalitu vaší iOS aplikace, měli byste dodržovat proces vývoje řízeného testováním, který je znázorněn na obrázku níže.

Vývojový cyklus řízený testy pro automatizované testování iOS zobrazující fáze návrhu, testování, implementace a opětovného testování

Testem řízený vývoj (TDD) je a Testování model, který se používá pro testování aplikací pro iOS a je součástí širší praxe mobilní testováníV tomto modelu musí tester postupovat podle 4 níže uvedených fází:

  • Design: Zjistěte, co chcete testovat, a navrhněte si testovací případy.
  • Test: Spusťte všechny testy a zjistěte, zda některé testovací případy selžou.
  • Nářadí: RevUpravte svůj kód a opravte chyby, které způsobily selhání testu.
  • Znovu otestujte: Pokud test selže, vraťte se k návrhu. Pokud všechny testovací případy projdou úspěšně, kód splňuje všechny testované požadavky.

Nastavení Xcode Projekt pro testování uživatelského rozhraní

K vytvoření testovacího programu pro iOS potřebujete Mac. Na vašem Macu musí být již nainstalováno následující:

  • OS X — operační systém pro Mac.
  • Xcode IDE — vývojový nástroj pro iOS.
  • Automatizovaný testovací rámec — Automatizace uživatelského rozhraní, OCUnit a tak dále.
  • iOS SDK 4 nebo vyšší.

⚠️ Poznámka k verzi: Výše uvedené předpoklady popisují nástrojový řetězec doby, ve které byly napsány dva následující návody. Na současném Macu, Xcode Součástí instalace jsou frameworky XCTest a XCUITest a samostatný nástroj UI Automation již není. Původní kroky jsou níže zachovány, protože dokumentují fungování frameworku, a jeho moderní ekvivalent je popsán dále.

Jak vytvořit automatizaci iOS pomocí rozhraní UI Automation Framework

Osm kroků níže nahraje skript pomocí nástroje Automation a přehraje ho v testované aplikaci.

Krok 1) Spusťte nástroje

Otevřít XCode -> Otevřít nástroj pro vývojáře -> Nástroj

Otevírací nástroje z Xcode Otevřít nabídku Nástrojů pro vývojáře

Krok 2) Přidejte Automation Instrument

V okně Nástroje vyberte nástroj Automatizace.

Výběr nástroje Automatizace ve výběru šablony nástrojů

Chcete-li vytvořit testovací skript, buď nahrajete testovací scénář nebo si to naprogramujete ručně.

Krok 3) Stiskněte červené tlačítko

Spouští se nástroj – okamžitě zastavte nahrávání. Pokud chcete nahrávání spustit, stiskněte červené tlačítko.

Červené tlačítko nahrávání v panelu nástrojů Nástroje sloužící ke spuštění a zastavení trace

Krok 4) Vytvořte nový skript

V okně Skripty klikněte na Přidat > Vytvořit a vytvořte nový skript.

Nabídka Přidat a vytvořit v okně Skripty nástrojů pro nový automatizační skript

Krok 5) Vyberte cíl

Nyní jste v Tracv okně. Použijte tlačítko Vybrat Target rozbalovací nabídku pro přechod na ladicí verzi vaší aplikace.

Vybrat Target rozbalovací nabídka v nástrojích Tracokno ukazující na ladicí sestavení

V tomto případě vzorek od Applu SimpleDrillDown Jako testovaná aplikace se používá aplikace app. Její grafické uživatelské rozhraní je zobrazeno níže.

Ukázkové aplikační rozhraní SimpleDrillDown použité jako testovaná aplikace

Krok 6) Spusťte záznam skriptu

Zaznamenejte svůj skript stisknutím tlačítka záznamu v horní nebo dolní části nástroje.

Tlačítko Nahrát na okraji okna Nástroje, které spouští nahrávání skriptu

Nyní můžete v testované aplikaci provádět některé akce uživatelského rozhraní a váš skript je zaznamenán.

Krok 7) Podívejte se na svůj skript

Chcete-li zobrazit svůj skript, klepněte na TracRozbalovací nabídka Protokol / Protokol editoru a přepněte do zobrazení protokolu skriptu.

TracRozbalovací nabídka Protokol a Protokol editoru slouží k přepnutí do zobrazení protokolu skriptu

Uvidíte svůj nahraný skript.

Zaznamenaný skript automatizace uživatelského rozhraní zobrazený v zobrazení protokolu skriptů nástrojů

Krok 8) Přehrajte svůj skript

Stiskněte tlačítko přehrávání. Skript se spustí a můžete ho zastavit po zobrazení protokolů.

Přehrávání nahraného automatizačního skriptu s výstupem protokolu v okně Nástroje

⚠️ Historická poznámka: Nástroj Automatizace použitý v těchto osmi krocích byl v roce Xcode 8 a novější byly odstraněny, takže se v aktuální verzi již nenachází. Xcode instalace. Kroky jsou zde uchovány jako záznam o tom, jak framework fungoval; pro novou práci použijte návod XCUITest dále na této stránce.

Jak vytvořit automatizaci iOS pomocí rámce OCUnit

Druhá cesta umisťuje testy dovnitř Xcode samotného projektu, nikoli uvnitř Instruments.

Krok 1) Začátek Xcode IDE, Přidat cíl balíčku jednotkových testů

Přidání cíle balíčku jednotkových testů do existujícího Xcode projekt

Krok 2) Napište název nového balíčku jednotkových testů jak je znázorněno na obrázku výše, a poté klikněte na tlačítko Dokončit.

Krok 3) Nastavte Unit Test jako aktivní cíl

Výběr balíčku jednotkových testů jako aktivního cíle v Xcode

Krok 4) Přidání skupiny pro testovací kurzy

Vytvoření projektové skupiny pro uchovávání tříd jednotkových testů iOS

Krok 5) Přidejte třídu Unit test

Přidání nového souboru třídy jednotkového testu do skupiny testů v Xcode

Krok 6) Nyní začněte s implementací

Prázdná třída jednotkových testů v Xcode editor připravený k testovací implementaci

OCUnit používá k vytvoření testovacího programu jazyk Objective-C, takže vývojář musí tento jazyk znát. Moderní Xcode verze dodávány testování jednotky přes XCTest, který podporuje jak Objective-C, tak Swift, ale struktura cíle a třídy zobrazená v těchto šesti krocích zůstává nezměněna.

UIAutomation vs. XCUITest: Co se změnilo

Protože oba výše uvedené frameworky patří do dřívější generace sady nástrojů Apple, je vhodné si ujasnit, co je nahradilo a proč.

Vzhled Automatizace uživatelského rozhraní (nástroje) XCUITest
Status Zastaralé v Xcode 8 a odstraněno z pozdějších verzí Podporovaný framework pro testování uživatelského rozhraní od společnosti Apple
Kde testy žijí Skripty uvnitř nástroje Instruments tracelektronický dokument Cíl balíčku pro testování uživatelského rozhraní uvnitř Xcode projekt
Jazyk JavaScénář Swift nebo Objective-C
Testovací běžec Automatizační nástroj XCTest, stejný běžec jako unit testy
Nepřetržitá integrace Trapné – poháněné nástroji Spouští se z příkazového řádku spolu s jednotkovými testy
Záznam Tlačítko Nahrát v panelu nástrojů Nástroje Tlačítko nahrávání v Xcode editor, který vydává Swift

Praktickým důsledkem je, že sada XCUITest je běžný zdrojový kód projektu. Je kontrolována, verzována a spouštěna stejně jako zbytek kódové základny, což je hlavní důvod, proč je zaznamenaný...tracmodel zmizel.

Jak napsat test uživatelského rozhraní pro iOS pomocí XCUITest

Moderní ekvivalent osmi kroků Instruments je krátký. Níže uvedená struktura odráží stejnou myšlenku nahrávání a následného přehrávání, ale výstupem je zdrojový soubor, nikoli trace.

  1. Přidejte cíl. In Xcode zvolte Soubor > Nový > Target a vyberte šablonu UI Testing Bundle nebo zaškrtněte možnost zahrnout testy při vytváření nového projektu.
  2. Otevřete vygenerovanou testovací třídu. Xcode vytvoří podtřídu XCTestCase s prázdnými metodami nastavení a testování.
  3. Spusťte testovanou aplikaci. Vytvořte instanci XCUIApplication a zavolejte na ni funkci launch, která spustí aplikaci v samostatném procesu.
  4. Dotazujte se a jednejte. Dosahujte prvků pomocí dotazů na prvky – tlačítka, tabulky, statické texty – a volejte na ně příkazy tap, typeText nebo přejetím prstem.
  5. Tvrdit. Pomocí XCTAssert ověřte, zda očekávaný prvek po akci existuje.
  6. Běh. Proveďte test z Xcode testovacího navigátoru nebo z příkazového řádku, aby stejná sada běžela v kontinuální integraci.

Minimální test má tento tvar:

import XCTest

final class AppUITests: XCTestCase {

    func testTappingFirstRowShowsDetail() {
        let app = XCUIApplication()
        app.launch()

        // act on the first row of the list
        app.tables.cells.element(boundBy: 0).tap()

        // verify that the next screen appeared
        XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5))
    }
}

Záznamník stále existuje: umístění kurzoru do testovací metody a stisknutí tlačítka záznamu v editoru generuje tyto dotazy automaticky, což je přímý potomek kroku 6 výše. Širší principy testování automatizace platit beze změny.

Ukázka automatizace uživatelského rozhraní Code

Tento článek obsahuje několik příkladů zdrojového kódu. Pomohou vám lépe a rychleji pochopit tutoriál.

Ukázka automatizace uživatelského rozhraní — testovací skript pro demo automatizace uživatelského rozhraní.

Nejčastější dotazy

Ne. Xcode a simulátory iOS běží pouze na macOS, takže je vyžadován Mac buď lokálně, nebo jako hostovaný sestavovací stroj. Cloudové farmy zařízení a hostovaní poskytovatelé CI existují právě proto, aby týmy bez hardwaru Mac mohly sadu stále spouštět.

Modely strojového učení navrhují dotazy na náhradní prvky při změně obrazovky, seskupují nestabilní selhání podle hlavní příčiny a seřazují neúspěšná spuštění jako skutečné regrese. To je důležité pro sady uživatelského rozhraní, kde drobné úpravy rozvržení jinak naruší mnoho selektorů najednou.

Dobře si poradí s opakujícími se částmi – scaffoldingem testovacích tříd, argumenty spouštění, obaly objektů stránek a standardizovanými assercemi. Identifikátory prvků se stále musí shodovat se skutečnou aplikací, takže každý vygenerovaný dotaz je nutné ověřit oproti běžícímu sestavení, než je důvěryhodný.

Appium řídí iOS prostřednictvím ovladače XCUITest, který nahradil starší ovladač UIAutomation. Výhodou je jeden multiplatformní testovací jazyk pro iOS a Android; kompromisem je další vrstva mezi testem a vlastním běžcem od Applu.

Jednotkový test běží uvnitř procesu aplikace a volá váš kód přímo. UI test spouští aplikaci jako samostatný proces a interaguje pouze prostřednictvím rozhraní, takže je pomalejší, ale ověřuje, co uživatel skutečně zažívá.

Simulátory jsou rychlejší a pro většinu funkčních toků v rámci procesu jsou přesnější. Pro kameru, biometriku, push notifikace, výkon a cokoli, co se dotýká hardwarových senzorů, jsou potřeba skutečná zařízení, takže většina týmů spouští obojí v různých fázích cyklu.

Každý test znovu spustí aplikaci a čeká na animace. Stabilita se zlepší, když nastavíte identifikátory přístupnosti místo porovnávání podle popisků a čekáte na existenci elementu místo uspávání.ping, resetovat stav mezi testy a udržovat každý případ zaměřený na jednu cestu.

Ne přímo, protože jazyky a modely elementů se liší. Obvyklá cesta je ponechat staré skripty jako dokumentaci zamýšleného pokrytí a poté přepsat každý scénář jako případ XCUITest, počínaje cestami, které v produkčním prostředí selhávají nejčastěji.

Shrňte tento příspěvek takto: