Testarea automatizării iOS cu Xcode Cadrul de interfață cu utilizatorul

⚡ Rezumat inteligent

Testarea automatizării iOS cu Xcode înregistrează și redă acțiunile interfeței utilizator asupra unei aplicații testate, urmând un ciclu de testare: proiectare, testare, implementare și testare din nou până când fiecare caz este aprobat.

  • 🔘 Ciclul TDD: Proiectarea, testarea, implementarea și testarea din nou din cele patru faze aplicate testării aplicațiilor iOS.
  • ☑️ Cerințe preliminare: Un Mac care rulează OS X cu Xcode IDE, un framework de automatizare și SDK-ul iOS instalate.
  • Ruta instrumentelor: Instrumentul de automatizare înregistrează un script, îl afișează în jurnalul de scripturi și îl redă la cerere.
  • 🧪 Ruta OCUnit: O țintă Unit Test Bundle, o schemă activă, un grup de testare și o clasă de testare scrise în Objective-C.
  • ⚠️ Dezaprobare: Instrumentul UIAutomation a fost depreciat în Xcode 8 și eliminat; XCUITest este succesorul acceptat.
  • 🛠️ Echivalent modern: O țintă UI Testing Bundle plus interogările XCUIApplication înlocuiesc scriptul Instruments înregistrat.

Testarea automată iOS cu Xcode Framework de automatizare a interfeței utilizator care rulează un script înregistrat pentru o aplicație

Testarea automatizării iOS folosind Xcode

Pentru a garanta calitatea aplicației tale iOS, ar trebui să urmezi procesul de dezvoltare bazat pe teste prezentat în figura de mai jos.

Ciclu de dezvoltare bazat pe teste pentru testarea automatizării iOS, care prezintă fazele de proiectare, testare, implementare și retestare

Dezvoltarea bazată pe teste (TDD) este a de testare model care se aplică testării aplicațiilor iOS și se încadrează în practica mai largă a testarea mobilăÎn acest model, un tester trebuie să urmeze cele 4 faze de mai jos:

  • Design: Stabilește ce vrei să testezi și proiectează-ți cazurile de testare.
  • De încercare: Rulați toate testele și vedeți dacă vreun caz de testare eșuează.
  • Implementați: RevRemediază-ți codul și corectează erorile care au cauzat eșecul testului.
  • Testează din nou: Dacă un test eșuează, se revine la proiectare. Dacă toate cazurile de testare sunt satisfăcătoare, codul îndeplinește întreaga cerință testată.

Configurare Xcode Proiect pentru testarea UI

Pentru a crea un program de testare iOS, aveți nevoie de un Mac. Pe Mac trebuie să fie deja instalate următoarele:

  • OS X — sistemul de operare pentru un Mac.
  • Xcode IDE — instrumentul de dezvoltare pentru iOS.
  • Un cadru de testare automată — Automatizare interfață utilizator, OCUnit și așa mai departe.
  • SDK-ul iOS 4 sau mai mare.

⚠️ Notă privind versiunea: Cerințele preliminare de mai sus descriu setul de instrumente al erei în care au fost scrise cele două soluții care urmează. Pe un Mac actual, Xcode Include framework-urile XCTest și XCUITest în cutie, iar instrumentul separat de automatizare a interfeței utilizator nu mai face parte din instalare. Pașii originali sunt păstrați mai jos, deoarece documentează modul în care funcționa framework-ul, iar echivalentul modern este descris mai jos.

Cum se creează automatizare iOS folosind UI Automation Framework

Cei opt pași de mai jos înregistrează un script cu instrumentul de automatizare și îl redau în aplicația testată.

Pasul 1) Lansați Instrumente

Deschide XCode -> Deschideți instrumentul pentru dezvoltatori -> Instrument

Deschiderea instrumentelor din Xcode Deschideți meniul Instrument pentru dezvoltatori

Pasul 2) Adăugați instrumentul de automatizare

În fereastra Instrumente, selectați instrumentul Automatizare.

Selectarea instrumentului de automatizare în selectorul de șabloane Instrumente

Pentru a crea un script de testare, fie înregistrați o scenariu de testare sau îl programezi manual.

Pasul 3) Apăsați butonul roșu

Un instrument se lansează — opriți imediat înregistrarea. Dacă doriți să începeți înregistrarea, apăsați butonul roșu.

Butonul roșu de înregistrare din bara de instrumente Instrumente este utilizat pentru a porni și opri o înregistrare trace

Pasul 4) Creați un nou script

În fereastra Scripturi, faceți clic pe Adăugare > Creare pentru a crea un script nou.

Meniul Adăugare și Creare din fereastra Scripturi Instrumente pentru un nou script de automatizare

Pasul 5) Alegeți ținta

Acum ești în Tracfereastra e. Folosește butonul Alege Target meniu derulant pentru a naviga la versiunea de depanare a aplicației.

Alege Target meniu derulant în Instrumente Tracfereastra indică versiunea de depanare

În acest caz, eșantionul Apple SimpluDrillDown aplicația este utilizată ca aplicație testată. Are interfața grafică prezentată mai jos.

Interfața aplicației eșantion SimpleDrillDown utilizată ca aplicație testată

Pasul 6) Începeți să vă înregistrați scriptul

Înregistrați-vă scriptul apăsând butonul de înregistrare din partea de sus sau de jos a instrumentului.

Butonul de înregistrare de la marginea ferestrei Instrumente care pornește captura de script

Acum puteți efectua câteva acțiuni în interfața cu utilizatorul asupra aplicației testate, iar scriptul este înregistrat.

Pasul 7) Vezi scenariul tău

Pentru a vedea scenariul, apăsați butonul Tracmeniul derulant Jurnal / Jurnal editor și comutați la vizualizarea jurnalului de scripturi.

TracMeniul derulant Jurnal și Jurnal Editor utilizat pentru a comuta la vizualizarea jurnalului de scripturi

Veți vedea scenariul înregistrat.

Scriptul de automatizare a interfeței utilizator înregistrat este afișat în vizualizarea jurnalului de scripturi Instrumente

Pasul 8) Redați scenariul

Apăsați butonul de redare. Scriptul rulează și îl puteți opri după ce apar jurnalele.

Redarea scriptului de automatizare înregistrat cu ieșirea jurnalului în fereastra Instrumente

⚠️ Notă istorică: Instrumentul de automatizare utilizat în acești opt pași a fost depreciat în Xcode 8 și ulterior eliminate, deci nu mai sunt prezente în versiunea actuală Xcode instalări. Pașii sunt păstrați aici ca o înregistrare a modului în care a funcționat framework-ul; pentru lucrări noi, utilizați ghidul XCUITest mai jos pe această pagină.

Cum se creează automatizare iOS folosind cadrul OCUnit

A doua rută plasează testele în interiorul Xcode proiectul în sine, mai degrabă decât în ​​interiorul Instrumentelor.

Pasul 1) Începeți Xcode IDE, Adăugați un pachet de teste unitare țintă

Adăugarea unei ținte Unit Test Bundle la un pachet existent Xcode proiect

Pasul 2) Scrieți numele noului pachet de teste unitare așa cum se arată în figura de mai sus, apoi faceți clic pe Terminare.

Pasul 3) Faceți testul unitar ținta activă

Selectarea pachetului de teste unitare ca țintă activă în Xcode

Pasul 4) Adăugați un grup pentru clasele de testare

Crearea unui grup de proiect pentru a găzdui clasele de testare unitară iOS

Pasul 5) Adăugați o clasă de test unitar

Adăugarea unui nou fișier de clasă de test unitar în cadrul grupului de test din Xcode

Pasul 6) Acum începeți implementarea

Clasă de test unitar goală în Xcode editor gata pentru implementarea de test

OCUnit folosește limbajul Objective-C pentru a crea programul de testare, așa că dezvoltatorul trebuie să cunoască acel limbaj. Limbajul modern Xcode versiunile sunt livrate testarea unitara prin XCTest, care suportă atât Objective-C, cât și Swift, dar structura țintă-clasă prezentată în acești șase pași rămâne neschimbată.

UIAutomation vs XCUITest: Ce s-a schimbat

Deoarece ambele framework-uri utilizate mai sus aparțin unei generații anterioare a lanțului de instrumente Apple, merită să fim precisi cu privire la ce le-a înlocuit și de ce.

Aspect Automatizare interfață utilizator (instrumente) Testul XCUIT
Stare Depreciat în Xcode 8 și eliminată din versiunile ulterioare Framework-ul de testare a interfeței utilizator acceptat de Apple
Unde se află testele Scripturi în interiorul unui instrument tracdocument electronic O țintă a pachetului de testare a interfeței utilizator din interiorul Xcode proiect
Limbă JavaScenariu Swift sau Objective-C
Tester Instrumentul de automatizare XCTest, același rulator ca și testele unitare
Integrare continuă Stânjenitor — condus prin instrumente Rulează din linia de comandă alături de testele unitare
Înregistrare Butonul Înregistrare din bara de instrumente Instrumente Butonul de înregistrare din Xcode editor, care emite Swift

Consecința practică este că o suită XCUITest este cod sursă obișnuit al proiectului. Este revizuită, versionată și executată ca restul bazei de cod, acesta fiind principalul motiv pentru care înregistrarea...tracModelul a dispărut.

Cum se scrie un test de interfață iOS cu XCUITest

Echivalentul modern al celor opt pași ai instrumentelor este scurt. Structura de mai jos reflectă aceeași idee de înregistrare-apoi-reluare, dar rezultatul este un fișier sursă, nu un trace.

  1. Adăugați ținta. In Xcode alegeți Fișier > Nou > Target și alegeți șablonul Pachet de testare UI sau bifați opțiunea de a include teste la crearea unui proiect nou.
  2. Deschideți clasa de test generată. Xcode creează o subclasă XCTestCase cu metode de configurare și testare goale.
  3. Lansați aplicația aflată în testare. Creați o instanță XCUIApplication și apelați comanda launch pe aceasta, care pornește aplicația într-un proces separat.
  4. Întreabă și acționează. Accesați elementele prin intermediul interogărilor de elemente — butoane, tabele, texte statice — și apelați atingerea, tastarea sau glisarea peste ele.
  5. Afirma. Folosește XCTAssert pentru a verifica dacă elementul așteptat există după acțiune.
  6. Alerga. Executați testul de la Xcode navigatorul de teste sau din linia de comandă, astfel încât aceeași suită să ruleze în integrare continuă.

Un test minimal urmează această formă:

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

Înregistratorul există încă: plasarea cursorului în interiorul unei metode de testare și apăsarea butonului de înregistrare din editor generează automat aceste interogări, ceea ce este descendentul direct al Pasului 6 de mai sus. Principiile mai largi ale testarea automatizării se aplică neschimbate.

Exemplu de automatizare a interfeței utilizator Code

Acest articol include câteva exemple de cod sursă. Acestea vă ajută să înțelegeți tutorialul mai clar și mai rapid.

Exemplu de automatizare a interfeței utilizator — script de testare pentru demonstrația UI Automation.

Întrebări frecvente

Nu. Xcode și simulatoarele iOS rulează doar pe macOS, deci este necesar un Mac fie local, fie ca mașină de compilare găzduită. Fermele de dispozitive cloud și furnizorii de CI găzduiți există tocmai pentru ca echipele fără hardware Mac să poată executa în continuare suita.

Modelele de învățare automată sugerează că interogările de înlocuire a elementelor atunci când un ecran se modifică, erorile instabile ale clusterelor în funcție de cauza principală și clasarea rulărilor eșuate sunt regresii autentice. Acest lucru este important pentru suitele de interfață utilizator, unde modificările mici ale aspectului altfel strică mai mulți selectori simultan.

Gestionează bine părțile repetitive - scheletarea claselor de testare, argumentele de lansare, încapsularea obiectelor de pagină și boilerplate-ul de aserțiuni. Identificatorii elementelor trebuie să corespundă cu aplicația reală, așa că fiecare interogare generată necesită verificare față de versiunea care rulează înainte de a fi considerată de încredere.

Appium controlează iOS prin driverul său XCUITest, care a înlocuit driverul UIAutomation mai vechi. Avantajul este un limbaj de testare multi-platformă pentru iOS și Android; compromisul este un nivel suplimentar între test și propriul rulator al Apple.

Un test unitar rulează în interiorul procesului aplicației și apelează direct codul. Un test UI lansează aplicația ca un proces separat și interacționează doar prin interfață, deci este mai lent, dar validează ceea ce experimentează utilizatorul în realitate.

Simulatoarele sunt mai rapide și adecvate pentru majoritatea fluxurilor funcționale dintr-o rețea de procesare. Sunt necesare dispozitive reale pentru cameră, biometrie, notificări push, performanță și orice atinge senzorii hardware, așa că majoritatea echipelor rulează ambele în puncte diferite ale ciclului.

Fiecare test relansează aplicația și așteaptă animațiile. Stabilitatea se îmbunătățește atunci când setezi identificatori de accesibilitate în loc să potrivești etichetele, aștepți existența elementului în loc să îl lași în urmă.ping, resetați starea între teste și mențineți fiecare caz concentrat pe o singură experiență.

Nu direct, deoarece limbajele și modelele de elemente diferă. Calea obișnuită este de a păstra scripturile vechi ca documentație a acoperirii intenționate, apoi de a rescrie fiecare scenariu ca un caz XCUITest, începând cu călătoriile care eșuează cel mai des în producție.

Rezumați această postare cu: