Testarea automată este cunoscută a fi foarte valoroasă pentru orice programator. Este un instrument care permite simularea acțiunilor unei persoane pe un anumit dispozitiv și este favorizat pentru că îi lipsește erorile sau limitările de viteză ale unei persoane reale.
Appium este un instrument automat de testare, bazat pe selectivul framework de testare Selenium, care permite testarea automată atât pe aplicațiile iOS native, cât și pe cele Android. Limita sa principală este că este construită doar pentru OS X și Linux.
În biroul meu, folosim Appium pentru teste de regresie. Testarea prin regresie înseamnă pur și simplu testarea caracteristicilor existente pentru a se asigura că acestea continuă să funcționeze conform așteptărilor pe măsură ce produsul crește. Este foarte important să știm când funcțiile se rup, astfel încât progresul să poată continua într-un mod liniar.
În acest tutorial, vă vom arăta cum să configurați Appium, să creați scripturi automate și să creați câteva teste simple de autentificare pentru o aplicație Android.
Noțiuni de bază Appium nu ia mult timp, dar este ușor să dezordine setup. Prima dată când am instalat Appium, am descărcat în mod naiv aplicația (.dmg) înainte de ao seta pe linia de comandă. Se pare că dacă descărcați mai întâi aplicația, ar putea fi destul de dificil să obțineți Appium pe linia de comandă. Deci, începeți prin a obține Appium din linia de comandă.
În următorii pași, presupun că ați instalat homebrew și folosiți un sistem OS X. Dacă nu aveți nod instalat, ați executat următoarea comandă din linia de comandă:
$ nod instalare brew
Apoi, instalați Appium utilizând managerul de pachete de noduri. Este important să o faceți nu utilizare sudo
pentru aceste comenzi sau Appium nu va funcționa.
$ npm instalează -g appium $ npm instalează wd
Dacă nu aveți permisiunea de a utiliza aceste comenzi, va trebui să chmod
mai degrabă decât pe ei înșiși sudo
. Locația folderului poate fi diferită pentru dvs., în funcție de configurare.
$ sudo chmod -R a + w / usr / local
Pentru a rula serverul Appium și pentru a vedea dacă l-ați configurat corect, executați următoarea comandă din linia de comandă.
$ appium &
Appium pe linia de comandă vă permite să executați testele Selenium nu numai pe simulatoare Android și iOS, ci și pe dispozitive fizice. Aplicația are o interfață de utilizator frumoasă care vă permite să rulați o versiune simulată a dvs. AUT (Application Under Testing) și generează cu ușurință codul de seleniu pentru acțiuni simple pe aplicație. Veți folosi în principal aplicația în faza inițială de creare a testelor și apoi veți folosi linia de comandă pentru a rula testele.
De ce nu folosim aplicația pentru întreg fluxul? Dacă intenționați să rulați o serie de teste pe diverse dispozitive într-un mod automat, probabil într-un program, posibilitatea de a rula Appium din linia de comandă va fi esențială.
Aplicația Appium poate fi descărcată de pe Bitbucket. După ce descărcați imaginea de pe disc, faceți dublu clic pe ea și glisați aplicația Appium la dvs. Aplicații pliant.
Apoi, avem nevoie de o cerere de testare. Pentru această introducere în Appium, vom testa o aplicație nativă Android pe care o sun de la AUT. Este o aplicație de logare și logout foarte simplă. În cazul unei conectări reușite, acesta ne va aduce la o pagină care ne spune că am fost conectat (ă) cu succes, afișând un buton de deconectare.
Multe aplicații au o funcție de conectare, astfel că vom crea o suită de bază de teste de conectare pentru a testa posibilele rezultate ale unui utilizator care interacționează cu fluxul de conectare. Nu este atât de mult încât să ne asigurăm că funcționează datele de conectare, dorim să testați răspunsul aplicației în diferite moduri în care un utilizator nu reușește să se autentifice, de exemplu, prin introducerea acreditărilor nevalide.
Deoarece este imposibil să deții fiecare dispozitiv Android disponibil, de obicei, testez pe dispozitive simulate. Acest lucru îmi permite să schimb ușor ce dispozitiv este simulat pentru testarea compatibilității. Pentru a obține un simulator Android, obțineți AVD Manager și configurați orice dispozitiv Android pe care îl alegeți, compatibil cu nivelul 21 al API.
ANDROID_HOME
, JAVA_HOME
, și CALE
mediu variabile în .profil sau .bash_profile (sau .zshrc dacă utilizați zsh).ANDROID_HOME
ar trebui să indice locația Android SDK în timp ce JAVA_HOME
ar trebui să indice locația JDK.
Acesta este modul în care puteți adăuga aceste căi spre dvs. .bash_profile. Rețineți că căile pot fi diferite pentru dvs..
$ vim ~ / .bash_profile $ export ANDROID_HOME = / Utilizatori / (nume utilizator) / Bibliotecă / Android / sdk $ export PATH = $ PATH: $ ANDROID_HOME / tools- $ ANDROID_HOME / platform-tools $ export JAVA_HOME = / Library / Java / JavaVirtualMachines /jdk1.8.0_40.jdk/Contents/Home
Apoi, creați un dispozitiv simulat cu AVD Manager. Asigurați-vă că ați activat Utilizați GPU gazdă și setați VM Heap la 64.
$ cd $ ANDROID_HOME / tools $ ./android avd
Pentru a face simulatorul să ruleze mai repede, instalați HAX de pe site-ul Intel.
Este timpul să utilizați Appiu Inspector și începeți să scrieți câteva teste. Lansați aplicația Appium. În setari generale, debifează Verifică pentru actualizări, Aplicație Prelaunch, Depășiți sesiunile existente, și Ucideți procesele utilizând portul serverului înainte de lansare.
Apoi, verificați Buton radio Android și faceți clic pe Android Icon. Verifica Calea aplicației și setați valoarea acesteia la locația în care ați pus APK-ul aplicației testate. Verifica Lansați AVD și selectați dispozitivul simulat. Alege 5.1 Lollipop (API Level 21) din meniul drop-down de la Versiunea platformei.
Lovit Lansa și așteptați lansarea aplicației pe dispozitivul simulat.
Este posibil să întâmpinați o problemă în care aplicația se blochează la deblocare deoarece folosim noul API 21. Pentru a rezolva aceasta, lansați din nou aplicația după ce ați deblocat manual ecranul simulat.
După ce dispozitivul simulat a lansat aplicația, apăsați pe Lupă pentru a lansa inspectorul.
Acesta este inspectorul Appium. Este un instrument foarte convenabil pentru a vă ajuta să începeți să scrieți teste pentru Appium. În esență, inspectorul vă permite să efectuați acțiuni asupra aplicației native Android și să înregistrați acțiunile ca și coduri generate.
Dulapurile din partea stângă a inspectorului alcătuiesc UI Navigator și vă permit să navigați prin elementele activității curente. În partea de jos sunt opțiunile de a interacționa cu elementul selectat din căsuțele elementului. Detaliile elementului selectat sunt afișate în Detalii. Dacă faci ceva manual la simulare, trebuie să loviți Reîmprospăta pentru ca inspectorul să recunoască aceste schimbări. Dacă doriți să începeți să înregistrați acțiunile în cod, trebuie să apăsați pe Record buton.
Să creăm codul necesar pentru o autentificare reușită. Aplicația are două autentificare hardcoded, [email protected]:parola și [email protected]: password2.
5. În UI Navigator, navigați la android.widget.LinearLayout /
android.widget.FrameLayout / android.widget.LinearLayout /
android.widget.ScrollView / android.widget.LinearLayout /
android.widget.EditText [2]
6. Introduceți parola.
7. Faceți clic pe Trimiteți cheile.
8. În UI Navigator, navigați la android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.LinearLayout / android.widget.ScrollView /
android.widget.LinearLayout / android.widget.Button [1]
9. Faceți clic pe Atingere în partea de jos, urmată de Atingeți. Suntem acum la o nouă activitate, astfel încât UI Navigator s-a schimbat.
10. Hit Reîmprospăta deoarece inspectorul probabil că nu și-a dat seama că simulatorul trece de ecranul de încărcare acum.
11. În navigatorul UI navigați la android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.RelativeLayout / android.widget.Button [1].
12. Faceți clic pe Atingeți.
În codul de mai jos, avem tot codul pentru a simula un login de succes. Simțiți-vă liber să jucați un pic mai mult cu inspectorul. Mai târziu, în acest tutorial, vom scrie și teste pentru conectări nereușite.
Vom scrie acum câteva teste utilizând Appium pentru a ne asigura că pagina noastră de conectare funcționează așa cum ar trebui. Dacă nu aveți Python, îl puteți descărca de pe site-ul oficial.
Pentru a utiliza driverul web Appium cu Python, trebuie să obțineți și librăriile Appium pentru Python.
Instalare $ python setup.py
Înainte de a începe să scriem testele, va trebui să decidem ce cazuri de testare vom face. O suită bună de testare trebuie să ia în considerare toate interacțiunile posibile. Să începem cu una simplă.
#! / usr / bin / python de la appium import webdriver import timp import unittesttest import os
În primul rând, trebuie să importăm tot ceea ce avem nevoie pentru test. Vom folosi testul unitar Python pentru a rula testele noastre. Elementul Appium este driverul web, pe care îl vom folosi pentru a interacționa cu serverul Appium.
Clasa LoginTests (unittest.TestCase): def setUp (auto): dorit_caps = dorit_caps ['appium-version'] = '1.0' dorit_caps ['platformName'] = dorit_caps ['app'] = os.path.abspath ('/ Users / mkim / Documents / AUT / app / build / outputs / apk / app-debug-unaligned.apk') self.wd = webdriver.Remote : /0.0.0.0: 4723 / wd / hub ', dorit_caps) self.wd.implicitly_wait (60)
Creăm o clasă LoginTests
pentru a defini setul nostru de teste. înființat
funcționarea testului nostru de unități la începutul testului. În această metodă, setăm capabilitățile dorite, cum ar fi Android și calea de aplicații. Apoi, inițializăm driverul web self.wd
prin conectarea la serverul Appium.
def tearDown (auto): self.wd.quit ()
dărâma
funcționează după un test și se deconectează de la serverul 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] ") auto.wd.find_element_by_xpath (basepath +" android.widget.EditText [2] "). () și faceți clic pe () încercați: self.wd.find_element_by_xpath (basepath2 + "android.widget.TextView [1]") cu excepția: self.fail ("Not at Login Pagina de succes. \ N ") auto.wd.find_element_by_xpath (basepath2 +" android.widget.Button [1] ")
Blocul de cod de mai sus este în mare parte copiat din codul inspectorului Appium. Executăm acțiunile necesare pe interfața de utilizator pentru o autentificare reușită. În încerca
clauză, încercăm să găsim TextView
element care afișează textul Conectați-vă cu succes! Dacă se aruncă o excepție, testul eșuează.
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] / "auto.wd.find_element_by_xpath (basepath +" android.widget.EditText [1] "). Trimite_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget. EditareText [2] ") send_keys (" wrongpassword ") auto.wd.find_element_by_xpath (basepath +" android.widget.Button [1] ") .Button [1] ") cu excepția: self.fail (" Nu este încă la ecranul de conectare. \ N ")
Pentru a nu reuși testul de autentificare, folosim în mod deliberat o parolă incorectă, parola gresita, așteptând ca datele de conectare să nu reușească. Verificăm dacă putem găsi elementul butonului de autentificare și nu reușim testul dacă nu putem.
dacă __name__ == '__main__': suite = unittest.TestLoader (). loadTestsFromTestCase (LoginTests) unittest.TextTestRunner (verbosity = 2) .run (suite)
Aceasta este funcția principală necesară pentru a rula testele noastre. Nu este nimic în neregulă cu primul nostru test. Cu toate acestea, o autentificare nereușită ar putea însemna multe lucruri. Atunci când un utilizator nu poate să se conecteze, vrem să ne asigurăm că interfața cu utilizatorul îi ajută să-și dea seama cum să-și rezolve greșeala pentru o experiență mai bună a utilizatorului.
Ne-am extins cazurile de testare de la două la șase cazuri de testare pentru pagina de conectare. Ar putea părea o mulțime pentru o caracteristică atât de simplă, dar este absolut necesară.
Cea mai dificilă parte a testelor de scriere este verificarea așteptărilor. De exemplu, testul de autentificare eșuat verifică dacă există un element în interfața cu utilizatorul. Aceasta înseamnă că testele de conectare se bazează complet pe interfața cu utilizatorul pentru a ne spune dacă sunt îndeplinite cerințele.
Acest lucru ar putea fi un lucru rău, deoarece interfața cu utilizatorul nu ne spune totul despre codul de bază. Cu toate acestea, obiectivul este de a testa interfața cu utilizatorul, astfel încât să existe o verificare a așteptărilor cu privire la existența unui element de interfață utilizator. Am putea face așteptările noastre mai amănunțite prin verificarea faptului că fiecare element așteptat este prezent pe pagină sau chiar prin verificarea faptului că fiecare element este poziționat corect.
Am învățat cum să:
Mai sunt multe de învățat despre Appium și despre testare. Următorul pas ar putea fi crearea unui sistem de testare integrat continuu, care să utilizeze capabilitățile Appium pentru propriile aplicații.