È noto che i test automatizzati sono molto utili per qualsiasi programmatore. È uno strumento che consente la simulazione delle azioni di una persona su un dispositivo specifico ed è favorito perché non ha gli errori o i limiti di velocità di una persona reale.
Appium è uno strumento di test automatizzato, basato sul popolare framework di test Selenium, che consente di eseguire test automatici su app native sia per iOS che per Android. Il suo limite principale è che è solo costruito per OS X e Linux.
Nel mio ufficio, utilizziamo Appium per i test di regressione. Test di regressione significa semplicemente testare le funzionalità esistenti per garantire che continuino a funzionare come previsto man mano che il prodotto cresce. È molto importante sapere quando le funzionalità si interrompono in modo che i progressi possano continuare in modo lineare.
In questo tutorial, ti mostrerò come configurare Appium, generare script automatici e creare alcuni semplici test di accesso per un'applicazione Android.
Ottenere Appium non richiede molto tempo, ma è facile rovinare l'installazione. La prima volta che ho installato Appium, ho scaricato in modo ingannevole l'applicazione (.dmg) prima di configurarla sulla riga di comando. Si scopre che se si scarica l'applicazione per prima cosa, potrebbe essere difficile ottenere Appio sulla riga di comando. Quindi inizia a prendere Appium dalla riga di comando.
Nei seguenti passaggi, presumo che tu abbia installato homebrew e stai usando un OS X. Se non hai installato il nodo, esegui il seguente comando dalla riga di comando:
$ brew install node
Successivamente, installa Appium usando il gestore dei pacchetti del nodo. È importante che tu faccia non uso sudo
per questi comandi o Appio non funzionerà.
$ npm install -g appium $ npm install wd
Se non si dispone delle autorizzazioni per utilizzare questi comandi, sarà necessario chmod
loro stessi piuttosto che sudo
. La posizione della cartella potrebbe essere diversa per te, a seconda della configurazione.
$ sudo chmod -R a + w / usr / local
Per eseguire il server Appium e vedere se è stato configurato correttamente, eseguire il seguente comando dalla riga di comando.
$ appio &
Appium sulla riga di comando consente di eseguire test Selenium non solo su simulatori Android e iOS, ma anche su dispositivi fisici. L'applicazione ha una bella interfaccia utente che ti permette di eseguire una versione simulata del tuo AUT (Applicazione in fase di test) e generare facilmente il codice selenio per semplici azioni sull'applicazione. Utilizzerai principalmente l'applicazione nella fase iniziale della creazione dei test e quindi utilizzerai la riga di comando per eseguire i test.
Perché non usiamo l'applicazione per l'intero flusso? Se si prevede di eseguire una serie di test su vari dispositivi in modo automatico, forse in base a una pianificazione, sarà possibile eseguire Appium dalla riga di comando..
L'applicazione Appium può essere scaricata da Bitbucket. Dopo aver scaricato l'immagine del disco, fai doppio clic e trascina l'applicazione Appium sul tuo applicazioni cartella.
Successivamente, abbiamo bisogno di un'applicazione da testare. Per questa introduzione ad Appium, testeremo un'applicazione Android nativa che sto chiamando AUT. È un'applicazione di login e logout molto semplice. In caso di accesso riuscito, ci porterà a una pagina che ci informa che abbiamo effettuato l'accesso con successo, visualizzando un pulsante di disconnessione.
Molte app dispongono di una funzione di accesso, quindi creeremo una suite di base di test di accesso per testare i possibili risultati di un utente che interagisce con il flusso di accesso. Non è tanto che vogliamo essere sicuri che l'accesso funzioni, ma vogliamo testare la risposta dell'app ai vari modi in cui un utente non riesce ad accedere, ad esempio inserendo credenziali non valide.
Poiché è impossibile possedere tutti i dispositivi Android disponibili, di solito eseguo il test su dispositivi simulati. Questo mi consente di cambiare facilmente quale dispositivo viene simulato per i test di compatibilità. Per ottenere un simulatore Android, scarica Manager AVD e configura qualsiasi dispositivo Android di tua scelta, compatibile con il livello API 21.
ANDROID_HOME
, JAVA_HOME
, e SENTIERO
variabili di ambiente nel tuo .profilo o .bash_profile (o .zshrc se usi zsh).ANDROID_HOME
dovrebbe puntare alla posizione del sdk Android mentre JAVA_HOME
dovrebbe indicare la posizione del JDK.
Ecco come puoi aggiungere questi percorsi al tuo .bash_profile. Nota che i percorsi potrebbero essere diversi per te.
$ vim ~ / .bash_profile $ export ANDROID_HOME = / Users / (username) / Library / Android / sdk $ export PATH = $ PATH: $ ANDROID_HOME / tools: $ ANDROID_HOME / piattaforma-tools $ export JAVA_HOME = / Library / Java / JavaVirtualMachines /jdk1.8.0_40.jdk/Contents/Home
Quindi, creare un dispositivo simulato con AVD Manager. Assicurati di abilitare Utilizza la GPU host e impostare il VM Heap a 64.
$ cd $ ANDROID_HOME / tools $ ./android avd
Per far funzionare il simulatore più velocemente, installa HAX dal sito Web di Intel.
È ora di usare il Ispettore di Appio e inizia a scrivere alcuni test. Avvia l'applicazione Appium. Nel impostazioni generali, deselezionare Controlla gli aggiornamenti, Applicazione Prelancio, Sostituisci sessioni esistenti, e Uccidere i processi utilizzando la porta del server prima dell'avvio.
Quindi, controlla il Pulsante radio Android e fare clic su Icona di Android. Dai un'occhiata Percorso app e impostare il suo valore nel punto in cui si inserisce l'APK dell'applicazione in prova. Dai un'occhiata Avvia AVD e selezionare il dispositivo simulato. Scegliere 5.1 Lollipop (livello API 21) dal menu a discesa da Versione della piattaforma.
Colpire Lanciare e attendi che l'app si avvii sul dispositivo simulato.
È possibile che si verifichi un problema in cui l'applicazione si arresta in modo anomalo quando si utilizza la nuovissima API 21. Per risolvere il problema, avviare nuovamente l'applicazione dopo aver sbloccato manualmente la schermata simulata.
Una volta che il dispositivo simulato ha lanciato l'app, premi il tasto Lente d'ingrandimento icona per avviare l'ispettore.
Questo è l'ispettore Appium. È uno strumento molto utile per iniziare a scrivere test per Appium. In sostanza, l'ispettore consente di eseguire azioni sull'applicazione Android nativa e registrare le azioni come codice generato.
Le caselle sul lato sinistro dell'ispettore costituiscono il UI Navigator e ti consentono di navigare tra gli elementi dell'attività corrente. In basso ci sono le opzioni per interagire con l'elemento selezionato dalle caselle degli elementi. I dettagli dell'elemento selezionato sono mostrati in Dettagli. Se fai qualcosa manualmente alla simulazione, devi colpire ricaricare affinché l'ispettore riconosca tali cambiamenti. Se vuoi iniziare a registrare le tue azioni nel codice, devi premere il tasto Disco pulsante.
Creiamo il codice necessario per un login di successo. L'app ha due accessi hardcoded, [email protected]:parola d'ordine e [email protected]: password2.
5. Nel UI Navigator, navigare su android.widget.LinearLayout /
android.widget.FrameLayout / android.widget.LinearLayout /
android.widget.ScrollView / android.widget.LinearLayout /
android.widget.EditText [2]
6. Inserire la password.
7. Fare clic su Invia chiavi.
8. Nel UI Navigator, navigare su android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.LinearLayout / android.widget.ScrollView /
android.widget.LinearLayout / android.widget.Button [1]
9. Fare clic Toccare in basso, seguito da Rubinetto. Siamo ora in una nuova attività in modo che il UI Navigator è cambiato.
10. Hit ricaricare poiché l'ispettore probabilmente non si è reso conto che il simulatore ha superato la schermata di caricamento ora.
11. Nel navigatore dell'interfaccia utente, navigare su android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.RelativeLayout / android.widget.Button [1].
12. Fare clic Rubinetto.
Nel codice qui sotto, abbiamo tutto il codice per simulare un login di successo. Sentiti libero di giocare un po 'di più con l'ispettore. Più avanti in questo tutorial, scriveremo anche i test per gli accessi non riusciti.
Ora scriverò alcuni test usando Appium per assicurarci che la nostra pagina di login funzioni come dovrebbe. Se non hai Python, puoi scaricarlo dal sito ufficiale.
Per utilizzare il driver Web Appium con Python, è necessario anche ottenere le librerie Appium per Python.
$ python setup.py install
Prima di iniziare a scrivere i test, dovremo decidere quali casi di test faremo. Una buona suite di test dovrebbe considerare ogni possibile interazione. Iniziamo con uno semplice.
#! / usr / bin / python da appium import webdriver tempo di importazione import unittest import os
Innanzitutto, dobbiamo importare tutto ciò di cui abbiamo bisogno per il test. Useremo il test di unità Python integrato per eseguire i nostri test. L'elemento Appium è il driver web, che useremo per interagire con il server Appium.
class LoginTests (unittest.TestCase): def setUp (self): desired_caps = desired_caps ['appium-version'] = '1.0' desired_caps ['platformName'] = 'Android' desired_caps ['platformVersion'] = '5.1' desired_caps ['app'] = os.path.abspath ('/ Users / mkim / Documents / AUT / app / build / outputs / apk / app-debug-unaligned.apk') self.wd = webdriver.Remote ('http : //0.0.0.0: 4723 / wd / hub ', desired_caps) self.wd.implicitly_wait (60)
Creiamo una classe LoginTests
per definire la nostra suite di test. Il impostare
la funzione del nostro test unitario viene eseguita all'inizio del test. In questo metodo, impostiamo le funzionalità desiderate, come Android e il percorso dell'app. Inizializziamo quindi il driver web self.wd
connettendosi al server Appium.
def tearDown (self): self.wd.quit ()
Il demolire
la funzione viene eseguita dopo un test e si disconnette dal server Appium.
def test_success (self): basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget .LinearLayout [1] / "basepath2 =" //android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/ "self.wd.find_element_by_xpath (basepath +" android .widget.EditText [1] "). send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget.EditText [2] ") send_keys (" password ") self.wd. find_element_by_xpath (basepath + "android.widget.Button [1]"). click () try: self.wd.find_element_by_xpath (basepath2 + "android.widget.TextView [1]") tranne: self.fail ("Non al Login Pagina di successo. \ N ") self.wd.find_element_by_xpath (basepath2 +" android.widget.Button [1] "). Click ()
Il suddetto blocco di codice è per lo più copiato dal codice ispettore Appium. Eseguiamo le azioni richieste sull'interfaccia utente per un login riuscito. Nel provare
clausola, cerchiamo di trovare il textView
elemento che visualizza il testo Login successo! Se viene lanciata un'eccezione, il test fallisce.
def test_fail (self): basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget .LinearLayout [1] / "self.wd.find_element_by_xpath (basepath +" android.widget.EditText [1] ") send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget. EditText [2] "). Send_keys (" wrongpassword ") self.wd.find_element_by_xpath (basepath +" android.widget.Button [1] "). Click () try: self.wd.find_element_by_xpath (basepath +" android.widget .Button [1] ") eccetto: self.fail (" Non ancora nella schermata di accesso. \ N ")
Per fallire il test di accesso, utilizziamo deliberatamente una password errata, password errata, mi aspettavo che il login fallisse. Controlliamo se possiamo trovare l'elemento del pulsante di accesso e fallire il test se non possiamo.
if __name__ == '__main__': suite = unittest.TestLoader (). loadTestsFromTestCase (LoginTests) unittest.TextTestRunner (verbosity = 2) .run (suite)
Questa è la funzione principale necessaria per eseguire i nostri test. Non c'è niente di sbagliato nel nostro primo test case. Tuttavia, un login non riuscito potrebbe significare molte cose. Quando un utente non è in grado di accedere, vogliamo assicurarci che l'interfaccia utente li aiuti a capire come correggere il loro errore per una migliore esperienza utente.
Abbiamo ampliato i nostri casi di test da due a sei casi di test per la pagina di accesso. Potrebbe sembrare molto per una funzionalità così semplice, ma è assolutamente necessario.
La parte più difficile dei test di scrittura è il controllo delle aspettative. Ad esempio, il test di accesso fallito verifica se esiste un elemento nell'interfaccia utente. Ciò significa che i test di accesso si basano completamente sull'interfaccia utente per dirci se i requisiti sono soddisfatti.
Questa potrebbe essere una brutta cosa poiché l'interfaccia utente non ci dice tutto sul codice sottostante. Tuttavia, l'obiettivo è testare l'interfaccia utente in modo da avere un controllo di aspettativa che esista un elemento dell'interfaccia utente. Potremmo rendere le nostre aspettative più accurate controllando che ogni elemento previsto sia presente nella pagina o anche controllando che ogni elemento sia posizionato correttamente.
Abbiamo imparato a:
C'è ancora molto da imparare su Appium e sui test. Il prossimo passo potrebbe essere quello di creare un sistema di test continuamente integrato che utilizzi le capacità di Appium per le proprie applicazioni.