iOS automatizálási tesztelés Xcode UI keretrendszer

⚡ Okos összefoglaló

iOS automatizált tesztelés Xcode rögzíti és visszajátssza a felhasználói felület műveleteit egy tesztelt alkalmazáson, egy tesztvezérelt tervezési, tesztelési, megvalósítási és ismételt tesztelési ciklust követve, amíg minden eset sikeres nem lesz.

  • 🔘 TDD ciklus: Tervezés, tesztelés, megvalósítás és újra tesztelés az iOS alkalmazástesztelés négy fázisából.
  • ☑️ Előfeltételek: Egy OS X rendszert futtató Mac gép, amelyen Xcode IDE, egy automatizálási keretrendszer és az iOS SDK telepítve.
  • Eszközök útvonala: Az Automation eszköz rögzít egy szkriptet, megjeleníti azt a szkriptnaplóban, és igény szerint visszajátssza.
  • 🧪 OCUnit útvonal: Egy Unit Test Bundle célpont, egy aktív séma, egy tesztcsoport és egy Objective-C-ben írt tesztosztály.
  • ⚠️ Rosszallás: Az UIAutomation eszköz elavulttá vált a következő évben: Xcode 8-as verzió és eltávolítva; az XCUITest a támogatott utód.
  • 🇧🇷 Modern megfelelője: Egy UI Testing Bundle célpont és az XCUIApplication lekérdezések váltják fel a rögzített Instruments szkriptet.

iOS automatizált tesztelés a Xcode UI Automation keretrendszer, amely egy rögzített szkriptet futtat egy alkalmazáson

iOS automatizálási tesztelés segítségével Xcode

Az iOS-alkalmazás minőségének garantálása érdekében kövesse az alábbi ábrán látható tesztvezérelt fejlesztési folyamatot.

Tesztvezérelt fejlesztési ciklus iOS automatizálási teszteléshez, amely bemutatja a tervezési, tesztelési, megvalósítási és újratesztelési fázisokat

A tesztvezérelt fejlesztés (TDD) a tesztelés modell, amelyet az iOS alkalmazástesztelésre alkalmaznak, és amely a tágabb gyakorlatba illeszkedik mobil tesztelésEbben a modellben a tesztelőnek az alábbi 4 fázist kell követnie:

  • Design: Gondold ki, mit szeretnél tesztelni, és tervezd meg a teszteseteidet.
  • Teszt: Futtasd le az összes tesztet, és nézd meg, hogy van-e olyan teszteset, ami sikertelen.
  • Végrehajtás: RevJavítsd ki a kódodat, és javítsd ki a hibákat, amik a teszt sikertelenségét okozták.
  • Teszteld újra: Ha egy teszt sikertelen, akkor visszatérünk a tervhez. Ha minden teszteset sikeres, a kód megfelel a teljes tesztelt követelménynek.

Felállítása Xcode Projekt a felhasználói felület teszteléséhez

iOS tesztprogram létrehozásához Mac számítógépre van szükség. A Mac számítógépén telepítve kell lennie a következőknek:

  • OS X – a Mac operációs rendszere.
  • Xcode IDE — az iOS fejlesztőeszköze.
  • Automatizált tesztelési keretrendszer — Felhasználói felület automatizálása, OCUnit és így tovább.
  • iOS SDK 4 vagy magasabb.

⚠️ Verzió megjegyzés: A fenti előfeltételek leírják annak a korszaknak az eszköztárát, amelyben a következő két útmutató íródott. Egy jelenlegi Mac gépen, Xcode Az XCTest és az XCUITest keretrendszerek a dobozban találhatók, és a különálló UI Automation eszköz már nem része a telepítésnek. Az eredeti lépések alább megmaradnak, mivel ezek dokumentálják a keretrendszer működését, a modern megfelelőjét pedig alább ismertetjük.

iOS Automation létrehozása az UI Automation Framework segítségével

Az alábbi nyolc lépésben rögzítünk egy szkriptet az Automation eszközzel, majd lejátszjuk azt a tesztelt alkalmazáson.

1. lépés) Indítsa el az eszközöket

X megnyitásaCode -> Fejlesztői eszköz megnyitása -> Eszköz

Nyitóhangszerek a Xcode Fejlesztői eszközök menüjének megnyitása

2. lépés: Adja hozzá az automatizálási eszközt

Az Eszközök ablakban válassza ki az Automatizálás eszközt.

Az Automatizálási eszköz kiválasztása az Eszközök sablonválasztóban

Tesztszkript létrehozásához rögzítesz egy tesztforgatókönyv vagy manuálisan programozod.

3. lépés) Nyomja meg a Piros gombot

Egy hangszer indul – azonnal állítsa le a felvételt. A felvétel elindításához nyomja meg a piros gombot.

Piros felvétel gomb az Eszközök eszköztáron, amely egy felvétel elindítására és leállítására szolgál. trace

4. lépés) Hozzon létre egy új szkriptet

A Szkriptek ablakban kattintson a Hozzáadás > Létrehozás gombra egy új szkript létrehozásához.

Hozzáadás és Létrehozás menü az Eszközszkriptek ablakban egy új automatizálási szkripthez

5. lépés) Válassza ki a célt

Ön most a következőben van: Trace ablak. Használja a Kiválasztás Target legördülő menüből navigálhat az alkalmazás hibakeresési verziójához.

A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a Target legördülő menü az Eszközökben Tracaz ablak a hibakeresési buildre mutat

Ebben az esetben az Apple mintája SimpleDrillDown A(z) alkalmazást tesztelés alatt álló alkalmazásként használják. A grafikus felhasználói felülete az alább látható.

A tesztelt alkalmazásként használt SimpleDrillDown mintaalkalmazás-felület

6. lépés) Kezdje el rögzíteni a szkriptet

Rögzítse a szkriptet az eszköz tetején vagy alján található rögzítés gomb megnyomásával.

Felvétel gomb az Eszközök ablak szélén, amely elindítja a szkriptrögzítést

Most már felhasználói felületen is végrehajthatsz műveleteket a tesztelés alatt álló alkalmazásodon, és a szkripted rögzítésre kerül.

7. lépés) Tekintse meg a forgatókönyvet

A szkript megtekintéséhez nyomja meg a gombot Trace Napló / Szerkesztői napló legördülő menüt, és váltson a szkriptnapló nézetre.

Trace Napló és Szerkesztőnapló legördülő menü, amellyel a szkriptnapló nézetre válthat

Látni fogja a rögzített forgatókönyvet.

A rögzített UI Automation szkript megjelenik az Instruments szkriptnapló nézetben.

8. lépés) Játssza le a forgatókönyvet

Nyomd meg a lejátszás gombot. A szkript lefut, és a naplók megjelenése után leállíthatod.

A rögzített automatizálási szkript lejátszása naplókimenettel az Eszközök ablakban

⚠️ Történelmi megjegyzés: Az ebben a nyolc lépésben használt automatizálási eszköz elavulttá vált a következő évben: Xcode 8-as és későbbi verziók eltávolításra kerültek, így a jelenlegi verzióban már nem szerepel. Xcode telepítések. A lépéseket itt megőrizzük a keretrendszer működésének feljegyzéseként; új munkákhoz használd az XCUITest útmutatóját, amely ezen az oldalon lejjebb található.

Az iOS automatizálás létrehozása az OCUnit keretrendszer segítségével

A második útvonal a teszteket a Xcode maga a projekt, nem pedig az Instruments belsejében.

1. lépés) Indítás Xcode IDE, Egységtesztelési csomag célpont hozzáadása

Egységtesztelési csomag célpont hozzáadása egy meglévőhöz Xcode program

2. lépés) Írd be az új Unit Test Bundle nevét ahogy a fenti ábrán látható, majd kattintson a Befejezés gombra.

3. lépés) Az egységteszt legyen az aktív célpont

Az egységteszt-köteg kiválasztása aktív célpontként a Xcode

4. lépés) Csoport hozzáadása a tesztosztályokhoz

Projektcsoport létrehozása az iOS egységtesztelési osztályok tárolására

5. lépés) Adjon hozzá egy egységteszt-osztályt

Új egységteszt osztályfájl hozzáadása a tesztcsoporton belül a következőben: Xcode

6. lépés) Most kezdje el a megvalósítást

Üres egységteszt osztály a Xcode szerkesztő készen áll a teszt implementációra

Az OCUnit az Objective-C nyelvet használja a tesztprogram létrehozásához, így a fejlesztőnek ismernie kell ezt a nyelvet. Modern Xcode verziók szállítanak egység tesztelés ehelyett az XCTest-en keresztül, amely támogatja mind az Objective-C-t, mind a Swift, de a hat lépésben bemutatott cél- és osztálystruktúra változatlan marad.

UIAutomation vs. XCUITest: Mi változott?

Mivel mindkét fent használt keretrendszer az Apple eszköztárának egy korábbi generációjához tartozik, érdemes pontosan meghatározni, hogy mi váltotta fel őket, és miért.

Aspect Felhasználói felület automatizálása (eszközök) XCUITeszt
Állapot Elavult Xcode 8-as és eltávolították a későbbi kiadásokból Az Apple által támogatott felhasználói felület tesztelési keretrendszere
Hol találhatók a tesztek? Szkriptek egy Instruments-en belül trace-dokumentum Egy UI Testing Bundle célpont a Xcode program
Nyelv JavaForgatókönyv Swift vagy Objective-C
Tesztfutó Az automatizálási eszköz XCTest, ugyanaz a futtatóprogram, mint az egységtesztek
Folyamatos integráció Kínos – a hangszereken keresztül hajtva Parancssorból fut az egységtesztek mellett
Felvétel Felvétel gomb a Hangszerek eszköztáron Felvétel gomb a Xcode szerkesztő, amely kiadja Swift

A gyakorlati következmény az, hogy egy XCUITest csomag egy átlagos projekt forráskód. A kódbázis többi részéhez hasonlóan felülvizsgálatra, verziózásra és végrehajtásra kerül, ami a rögzített...traca modell eltűnt.

Hogyan írjunk iOS UI tesztet az XCUITest segítségével

A nyolc hangszeres lépés modern megfelelője rövid. Az alábbi struktúra ugyanazt a felvétel-majd visszajátszás elvet tükrözi, de a kimenet egy forrásfájl, nem pedig egy trace.

  1. Add hozzá a célt. In Xcode válassza a Fájl > Új > lehetőséget Target és válaszd ki a UI Testing Bundle sablont, vagy jelöld be a tesztek belefoglalásának lehetőségét új projekt létrehozásakor.
  2. Nyisd meg a létrehozott tesztosztályt. Xcode létrehoz egy XCTestCase alosztályt üres setup és test metódusokkal.
  3. Indítsd el a tesztelés alatt álló alkalmazást. Hozz létre egy XCUIApplication példányt, és hívd meg rajta a launch metódust, amely egy külön folyamatban indítja el az alkalmazást.
  4. Kérdezés és cselekvés. Az elemeket elemlekérdezéseken – gombokon, táblázatokon, statikus szövegeken – keresztül érheti el, és hívhatja meg a „tap”, „TypeText” vagy az „elhúzás” billentyűparancsot rajtuk.
  5. Állítás. Az XCTAssert használatával ellenőrizheti, hogy a várt elem létezik-e a művelet után.
  6. Fuss. Végezze el a tesztet a Xcode test navigatorból, vagy a parancssorból, így ugyanaz a csomag folyamatos integrációban fut.

Egy minimális teszt a következő alakot követi:

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))
    }
}

A rögzítő továbbra is létezik: a kurzor egy tesztmetódusba helyezése és a szerkesztőben a rögzítés gomb megnyomása automatikusan generálja ezeket a lekérdezéseket, ami a fenti 6. lépés közvetlen leszármazottja. A tágabb értelemben vett alapelvek automatizálási tesztelés változatlanul alkalmazandó.

UI automatizálási példa Code

Ez a cikk néhány forráskód példát tartalmaz. Ezek segítenek abban, hogy a bemutatót világosabban és gyorsabban megértsd.

UI automatizálási példa — tesztszkript a felhasználói felület automatizálásának demójához.

GYIK

Nem. Xcode és az iOS szimulátorok csak a következőn futnak: macOS, tehát Macre van szükség akár helyben, akár hosztolt build gépként. A felhőalapú eszközfarmok és a hosztolt CI-szolgáltatók pontosan azért léteznek, hogy a Mac hardver nélküli csapatok is futtathassák a csomagot.

A gépi tanulási modellek a képernyő megváltozásakor elemcsere-lekérdezéseket javasolnak, a kiváltó ok alapján csoportosítják az egyenetlen hibákat, és rangsorolják a sikertelen futtatásokat, ezek valódi regressziók. Ez a felhasználói felületcsomagok esetében fontos, ahol a kis elrendezési módosítások egyébként sok szelektort egyszerre hibásítanak meg.

Jól kezeli az ismétlődő részeket – a tesztosztályok állványozását, az indítási argumentumokat, az oldal-objektum burkolókat és az állítási sablont. Az elemazonosítóknak továbbra is meg kell egyezniük a valódi alkalmazással, így minden generált lekérdezést ellenőrizni kell a futó builddel szemben, mielőtt megbízhatónak minősítenék.

Appium Az iOS-t az XCUITest illesztőprogramon keresztül hajtja, amely a régebbi UIAutomation illesztőprogramot váltotta fel. Az előnye egy platformfüggetlen tesztnyelv iOS-hez és Android; a kompromisszum egy plusz réteg a teszt és az Apple saját futtatója között.

Az egységteszt az alkalmazásfolyamaton belül fut, és közvetlenül meghívja a kódodat. A felhasználói felület tesztje különálló folyamatként indítja el az alkalmazást, és csak a felületen keresztül kommunikál, így lassabb, de ellenőrzi, hogy a felhasználó mit tapasztal valójában.

A szimulátorok gyorsabbak és a legtöbb funkcionális folyamathoz megfelelőek egy folyamatban. Valódi eszközökre van szükség a kamerához, a biometrikus adatokhoz, a push értesítésekhez, a teljesítményhez és a hardveres érzékelőket érintő dolgokhoz, így a legtöbb csapat mindkettőt futtatja a ciklus különböző pontjain.

Minden teszt újraindítja az alkalmazást, és animációkra vár. A stabilitás javul, ha akadálymentesítési azonosítókat állít be címkék helyett, és az elem létezésére vár a sleep helyett.ping, állítsa alaphelyzetbe az állapotot a tesztek között, és tartsa minden esetet egyetlen folyamatra összpontosítva.

Nem közvetlenül, mert a nyelvek és az elemmodellek eltérőek. A szokásos eljárás az, hogy a régi szkripteket a tervezett lefedettség dokumentációjaként tartjuk meg, majd minden forgatókönyvet átírunk XCUITest esetként, kezdve azokkal az útvonalakkal, amelyek a leggyakrabban hibásak éles környezetben.

Foglald össze ezt a bejegyzést a következőképpen: