Introduzione ai test IOS con l’automazione dell’interfaccia utente

Immagino solo essere in grado di scrivere script che interagiscono automaticamente con l’applicazione iOS ed essere in grado di verificare i risultati. Con l’automazione dell’interfaccia utente puoi. L’automazione dell’interfaccia utente è uno strumento fornito da Apple per eseguire un livello superiore di test nell’applicazione iOS al di là di ciò che può essere ottenuto con XCTest.

1. Scatola bianca Versus Black Box Test

Potresti aver sentito il confronto di test box bianchi contro test box neri rispetto a come potrebbe essere testato un pezzo di software. Se non hai familiarità con questi concetti, fammi spiegare come funzionano.

Test su scatola bianca

Immagina che ci sia un software in esecuzione all’interno di una scatola. Con i test box bianchi, è possibile vedere all’interno della scatola e vedere tutti i pezzi di come funziona il software, e quindi prendere decisioni informate su come testare il software. Puoi anche avere ganci di livello più profondi nel software di test che scrivi.

Il test dell’unità è un test di scatola bianca. Quando si scrive test unità, il tester ha accesso dettagliato al codice sotto test. Il verificatore può davvero scrivere test che sfruttano il vantaggio del software sotto test nel metodo o unità, livello.

In lo sviluppo del software IOS, utilizziamo il telaio XCTEST per eseguire questo tipo di test. Dai un’occhiata a un altro tutorial che ho scritto su come iniziare con XCTEST.

Black Box Test

Nei test della scatola nera, la casella è opaca. Il tester non può vedere all’interno della scatola. Il tester non può accedere e non conosce l’implementazione del codice di base per scrivere test. Invece, il tester è costretto a utilizzare l’applicazione in quanto l’utente finale interagirebbe con l’applicazione e in attesa della sua risposta, verificando i risultati.

Ci sono almeno due modi per eseguire questo tipo di test.

  • un tester che esegue ripetutamente e manuale una serie di passaggi predefiniti e verifica visivamente i risultati.
  • Utilizzare strumenti specializzati per testare l’applicazione con API che si comportano in modo simile a come un essere umano interagisce.

Nello sviluppo delle applicazioni IOS, Apple fornisce uno strumento chiamato Ui Automation per eseguire test sulla scatola nera.

2. Qual è l’interfaccia utente Automazione?

UI Automation è uno strumento che Apple fornisce e mantiene per il livello più alto automatizzato delle applicazioni IOS. I test sono scritti in JavaScript, aderendo a un’API definita da Apple.

I test di scrittura possono essere semplificati quando si affidano alle etichette di accessibilità per gli elementi dell’interfaccia utente nella loro applicazione. Non preoccuparti, se non si dispone di questi definiti, ci sono alternative disponibili.

L’API dell’automazione dell’interfaccia utente non ha il tipico formato basato su Xunit per scrivere test. Una differenza con i test unitario è che il tester deve registrare manualmente il successo e i guasti. I test di automazione dell’interfaccia utente vengono eseguiti dallo strumento di automazione all’interno dello strumento Strumenti fornito con gli strumenti per sviluppatori di Apple. I test possono essere eseguiti nel simulatore iOS o su un dispositivo fisico.

3. Scrivi i test di automazione dell’interfaccia utente

Passaggio 1: Aprire il progetto di esempio

Ho aggiornato il progetto di esempio utilizzato nel tutorial precedente sui test iOS con alcuni elementi aggiuntivi dell’interfaccia utente che forniscono alcuni ganci utili per aggiungere test di automazione UI. Scarica il progetto GitHub. Apri il progetto ed esegui l’applicazione per assicurarti che tutto funzioni come previsto. Dovresti vedere un’interfaccia utente simile a quella mostrata di seguito.

Screenshot dell'applicazione di esempio

Prima di scrivere qualsiasi Test, sentiti libero di provare l’applicazione di esempio per familiarizzare con la sua funzionalità. Come utente, è possibile inserire il testo nel campo di testo e premere il pulsante per visualizzare un’etichetta sullo schermo che mostra la catena invertita inserita.

STEP 2: Creare un’automazione UI

Ora che hai familiarità con l’applicazione di esempio, è il momento di aggiungere un test di automazione UI. L’automazione UI è uno strumento che può essere trovato a strumenti. Per eseguire l’applicazione di esempio dello strumento, selezionare Prodotto > Profilo nel menu Xcode. Seleziona Automazione dall’elenco degli utensili.

SCREENSHOT SCUSER STRUMENTO

La finestra dello strumento principale si aprirà con un singolo strumento pronto per essere eseguito, il Strumento di automazione (lo strumento di automazione esegue casi di test di automazione UI). Vedrai anche un’area nella metà inferiore della finestra che sembra un editor di testo. Questo è l’editor di script. È qui che scriverai i tuoi test di automazione dell’interfaccia utente. Per questo primo test, seguire le istruzioni di seguito, aggiungendo ogni riga allo script nell’editor dello script.

Avvia memorizzando un riferimento al campo di testo in una variabile.

var inputField = target.frontMostApp().mainWindow().textFields();

Impostare il valore del campo di testo.

inputField.setValue("hi”);

Verificare che il valore fosse impostato correttamente e, se Era, passare il test. Fail il test se non fosse così.

if (inputField.value() != "hi") UIALogger.logFail("The Input Field was NOT able to be set with the string!");else UIALogger.logPass("The Input Field was able to be set with the string!");

Mentre questo test è piuttosto banale, ha valore. Abbiamo appena scritto un test che dimostra la presenza di un campo di testo quando l’applicazione viene lanciata e verifica se una stringa casuale può essere stabilita come valore del campo di testo. Se non mi credi, elimina il campo di testo dello storyboard ed esegui il test. Vedrai che fallisce.

Questo test dimostra tre importanti sistemi di test di automazione della scrittura dell’interfaccia utente. Innanzitutto, mostra come accedere a un semplice elemento di interfaccia utente, il campo di testo. Nello specifico, accediamo a un dizionario di tutti i campi di testo nella vista base dell’applicazione tramite target.frontMostApp().mainWindow().textFields() e quindi cerchiamo il campo di testo che ci interessa quando cerchi quello che ha la chiave Input Field. Questa chiave è in realtà l’etichetta di accessibilità del campo di testo. In questo caso, è definito nello script grafico. Possiamo anche impostare l’etichetta di accessibilità nel codice utilizzando la proprietà in NSObject.

Accesso alla finestra principale Della applicazione, l’applicazione più frontale e l’obiettivo sono comuni quando si lavora con l’automazione dell’interfaccia utente. Ti mostrerò come farlo più facile e meno dettagliato in seguito in questo tutorial.

In secondo luogo, questo mostra che è possibile interagire con gli elementi dell’interfaccia utente sullo schermo. In questo caso, stabiliamo il valore del campo di testo, imitando l’utente che interagisce con l’applicazione quando si immette il testo nel campo di testo.

e in terzo luogo, l’esempio mostra anche una tecnica per verificare ciò che accade in l’applicazione. Se il valore è stabilito con successo, il test passa. Se il valore non è impostato, il test fallisce.

Step 3: Salva test

Durante la scrittura dei test nell’editor dello script è conveniente, diventa rapidamente ingombrante e difficile da mantenere. Se si lasciano strumenti, qualsiasi cambiamento non salvato viene scartato. Dobbiamo mantenere i test che scriviamo. Basta copiare e incollare il test in un nuovo documento nel tuo editor di testo preferito e salvalo. È possibile trovare i test creati in questo tutorial nel progetto di esempio in jumblify / jumblifytss / automationtes.js.

Per eseguire il test, selezionare la scheda Medium sul pannello di destra, accanto all’editor di script, e selezionare Aggiungi > import.

strumenti screenshot

> Ti verrà chiesto di selezionare lo script da importare. Passare allo script salvato e imprimerlo. È comunque possibile modificare lo script nell’editor dello script. Qualsiasi modifica verrà salvata automaticamente nel file esterno creato.

Step 4: Toccare un pulsante

Aggiorniamo il nostro test per testare l’interazione con il pulsante. Il nostro test aggiunge già il testo al campo di testo, quindi è necessario aggiungere solo il codice per toccare il pulsante. Considera il primo come trovare il pulsante nella vista in modo da poter toccare. Ci sono almeno tre modi per raggiungere questo e ogni approccio ha il suo risarcimento.

Focus 1

Possiamo programmare programmando una coordinata (x, y) sullo schermo . Lo facciamo con la seguente riga di codice:

target.tap({x: 8.00, y: 50.00});

Certo, non ho idea se sono anche le coordinate del pulsante sul pulsante sul pulsante sul pulsante Schermo e non mi preoccupo per questo, perché questo approccio non è lo strumento giusto per questo lavoro. Lo menzionello solo in modo che tu sappia che esiste. Utilizzare il metodo Tap in target per toccare un pulsante è inclinazione agli errori, perché quel pulsante non viene sempre trovato in quella coordinata specifica.

Focus 2

È anche possibile trovare la ricerca del pulsante sulla matrice del pulsante nella finestra principale, allo stesso modo su come accediamo il campo di testo nel primo test.Invece di accedere al pulsante direttamente utilizzando un tasto, possiamo recuperare una matrice di pulsanti nella finestra principale e codificare un indice a matrice per ottenere un riferimento al pulsante.

target.frontMostApp().mainWindow().buttons().tap();

Questo approccio è un po ‘meglio. Non stiamo codificando una coordinata, ma stiamo codificando un indice a matrice per trovare il pulsante. Se aggiungiamo un altro pulsante sulla pagina, è possibile rompere accidentalmente questo test.

Focus 3

Questo mi porta al terzo modo per trovare il pulsante sulla pagina, Usando tag di accessibilità Usando un’etichetta di accessibilità, possiamo accedere direttamente al pulsante, mi è piaciuto semplicemente trovare un oggetto in un dizionario con chiave.

target.frontMostApp().mainWindow().buttons().tap();

Tuttavia, tuttavia, tuttavia, Se si aggiunge la linea precedente allo script ed eseguilo, riceverai un errore.

Strumenti Messaggio di errore Screenshot

Questo deve il motivo per cui non abbiamo definito l’etichetta di accessibilità per il pulsante. Per fare ciò, andare su Xcode e aprire lo storyboard del progetto. Cerca il pulsante nella vista e apri l’ispettore di identità a destra (Visualizza > Utilities > Identity Inspector). Assicurati che l’accessibilità sia abilitata e configura l’etichetta per il pulsante del pulsante JUMBLIFY.

Builder Accessibilità ispettore screenshot

per l’esecuzione Il test di nuovo, è necessario eseguire l’applicazione da xcode selezionando il prodotto > eseguire e quindi delineare nuovamente l’applicazione selezionando il prodotto > Profilo. Questo esegue i test e ogni test deve accadere ora.

Step 5: Controllare la stringa confluminata (catena disordinata)

Come ho detto prima, la nostra applicazione prende una stringa come input e, quando L’utente tocca il pulsante, mostra la stringa invertita. Dobbiamo aggiungere un altro test per verificare che la catena di input sia stata invertita correttamente. Per verificare che il UILabel sia pieno con la catena corretta, dobbiamo capire come fare riferimento a UILabel e verificare la visualizzazione della catena. Questo è un problema comune durante la scrittura di test di automazione, cioè, per capire come fare riferimento a un elemento nell’applicazione per effettuare un’affermazione a riguardo.

C’è un metodo in quasi tutti gli oggetti nell’API Automazione dell’interfaccia utente, . Questo metodo registra gli elementi nidificati di un determinato elemento. Questo è molto utile per capire la gerarchia degli elementi nell’applicazione e aiutare a determinare come orientare un elemento specifico.

Vediamo come funziona registrando l’albero dell’elemento dalla finestra principale. Dai un’occhiata alla prossima riga di codice.

target.frontMostApp().mainWindow().logElementTree();

Aggiungi questa linea allo script di test Risultati nel seguente risultato:

Strumenti LeggelementRee Screenshot

Come puoi vedere, c’è un sotto-elemento UIAStaticText del UIAWindow e puoi anche vedere che hai un nome di ih, Qual è anche la stringa invertita che dobbiamo verificare. Ora, per completare il nostro test, abbiamo solo bisogno di aggiungere il codice per accedere a questo articolo e verificare che sia presente.

Perché dobbiamo solo verificare se il è presente? Come il nome dell’elemento è la catena invertita della catena di input, verificando la sua presenza conferma che la sequenza è stata investita correttamente. Se l’elemento non esiste quando il riferimento viene effettuato per nome, la stringa invertita, significa che la stringa non è stata invertita correttamente.

var stringResult = target.frontMostApp().mainWindow().staticTexts();if (! stringResult.isValid()) UIALogger.logFail("The output text was NOT set with the correctly reversed string!");else UIALogger.logPass("The output text was set with the correctly reversed string!");

4. Scraping the Superficie

Ci sono molti altri modi in cui un utente finale può interagire con un dispositivo iOS mentre si utilizza la sua applicazione. Ciò significa che ci sono molti altri modi in cui puoi usare l’interfaccia utente UI per simulare queste interazioni. Invece di provare a catturare un elenco completo di queste interazioni, andrò alla documentazione di riferimento dell’automazione dell’interfaccia utente.

Per ogni tipo di oggetto con cui è possibile interagire, è possibile visualizzare l’elenco dei metodi disponibili in quello oggetto. Alcuni metodi devono recuperare gli attributi sull’oggetto, mentre altri devono simulare l’interazione tattile, come flickInsideWithOptions in UIAWindow.

Registrazione di una sessione

Come si tenta di provare applicazioni sempre più complicate con l’automazione dell’interfaccia utente, vedrai che a volte è piuttosto noioso utilizzare ripetutamente logElementTree Per trovare l’elemento che stai cercando.Questo diventa anche noioso e complesso per applicazioni con una gerarchia o una navigazione di visione complessa. In questi casi, è possibile utilizzare un’altra funzione di strumenti per registrare un set di interazioni utente. Ciò che è ancora più grande è che gli strumenti generano il codice JavaScript di Automazione dell’interfaccia utente necessaria per riprodurre le interazioni registrate. È così che puoi provarlo per te stesso.

In strumenti e con lo strumento di automazione selezionato, cerca il pulsante di registrazione nella parte inferiore della finestra.

Strumenti Screenshot Visualizzazione del pulsante Record

Se fai clic sul pulsante di registrazione, gli strumenti avviano una sessione di registrazione come mostrato nella seguente screenshot.

Strumenti Screenshot mostrando l'acquisizione in corso

Strumenti lancerà la tua applicazione nel simulatore iOS e può interagire con esso. Gli strumenti genereranno uno script in base alle loro interazioni in tempo reale. Provaci. Trasforma il simulatore iOS, tocca le posizioni casuali, effettuare un gesto scorrevole, ecc. È un modo davvero utile per aiutare a esplorare le possibilità di automazione dell’interfaccia utente.

Evita il codice monolitico

Come puoi prevedere, se continuiamo ad aggiungere più test al test File che abbiamo creato con lo stesso metodo, sarà difficile da mantenere. Cosa possiamo fare per impedire che accada? Nei miei test, faccio due cose per risolvere questo problema:

  • un test per una funzione: ciò implica che i test che scriviamo dovremmo concentrarsi su una specifica funzionalità. Ti darò anche un nome appropriato, come testEmptyInputField.
  • Gruppo i relativi test in un file: anche raggruppamento dei test relativi allo stesso file. Questo mantiene il codice in un file gestibile. Ciò rende anche più facile testare separatamente le parti della funzionalità eseguendo i test in un file specifico. Inoltre, è possibile creare uno script master in cui si chiamano le funzioni o il test che hai raggruppato in altri file di test.

Nel seguente frammento di codice, importa un file JavaScript e questo è il Le funzioni in questo file JavaScript sono disponibili per noi.

#import "OtherTests.js”

CONCLUSION

In questo tutorial, hai appreso il valore di Test di livello superiore e come l’automazione dell’interfaccia utente può aiutare a riempire il vuoto. È un altro strumento nella casella degli strumenti per aiutarti a inviare applicazioni affidabili e robuste.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *