Dataprovider și TestNG XML: Parametrizarea în Selenium(Exemplu)
În timp ce creăm software, ne dorim întotdeauna ca acesta să funcționeze diferit cu un set diferit de date. Când vine vorba de testarea aceluiași software, nu putem fi nedrepți să îl testăm doar cu un singur set de date. Aici, din nou, trebuie să verificăm dacă sistemul nostru preia toate seturile de combinații pe care se așteaptă să le suporte. Pentru aceasta, trebuie să parametrizăm scipturile noastre de testare. Aici intervine parametrizarea în imagine.
Parametrizarea în Selenium
Parametrizarea în Selenium este un proces de parametrizare a scripturilor de testare pentru a transmite mai multe date aplicației în timpul execuției. Este o strategie de execuție care execută automat cazuri de testare de mai multe ori folosind valori diferite. Conceptul realizat prin parametrizarea scripturilor de testare se numește Data Driven Testing.
În acest tutorial, veți învăța-
- Tipul de parametrizare în TestNG-
- Anotarea parametrilor cu Testng.xml
- Soluționarea problemelor
- Parametri folosind Dataprovider
- Invocarea DataProvider din clase diferite
- Tipuri de parametri în Dataprovider
Tip de parametrizare în TestNG-
Pentru a face parametrizarea mai clară, vom trece în revistă opțiunile de parametrizare în unul dintre cele mai populare framework-uri pentru Selenium Webdriver – TestNG.
Există două moduri prin care putem realiza parametrizarea în TestNG
-
Cu ajutorul adnotării Parameters și a fișierului TestNG XML.
-
Cu ajutorul adnotării DataProvider.
Parametrii din Testng.xml pot fi la nivel de suită sau la nivel de test
Parametrii din DataProvider pot lua ca parametru metoda și ITestContext.
Să le studiem în detaliu –
Parameters Annotation in TestNG
Parameters Annotation in TestNG este o metodă utilizată pentru a trece valori către metodele de testare ca argumente folosind fișierul .xml. Utilizatorii pot fi nevoiți să transmită valorile către metodele de testare în timpul rulării. Metoda de adnotare @Parameters poate fi utilizată în orice metodă care are adnotarea @Test, @Before, @After sau @Factory.
Parameters annotation with Testng.xml
Selectați parametrizarea cu ajutorul adnotărilor atunci când doriți să vă ocupați de complexitate & numărul de combinații de intrare este mai mic.
Să vedem cum funcționează
Scenariu de testare
Pasul 1) Lansați browserul & mergeți la Google.com
Pasul 2) Introduceți un cuvânt cheie de căutare
Pasul 3) Verificați că valoarea introdusă este aceeași cu cea furnizată de datele noastre de test
Pasul 4) Repetați 2 & 3 până când toate valorile sunt introduse
Autorul testului | . Cheie de căutare |
Guru99 | India |
Krishna | Statele Unite ale Americii |
. Bhupesh | China |
Iată un exemplu de cum se face FĂRĂ parametri
Un studiu, exemplul de mai sus. Imaginați-vă cât de complex va deveni codul atunci când vom face acest lucru pentru 3 combinații de intrare
Acum, să parametrizăm acest lucru folosind TestNG
Pentru a face acest lucru, va trebui să
- Crearea unui fișier XML care va stoca parametrii
-
În test, adăugați adnotarea @Parameters
Iată codul complet
Test Level TestNG.xml
Fișier
ParameterWithTestNGXML.java
Instrucțiuni pentru a rula scriptul, selectați fișierul XML și Run as Test NG Suite
Faceți clic dreapta pe .xml -> Run as -> Testng Suite (Notă : Suite)
Acum, parametrii pot fi definiți la 2 niveluri
- Nivelul suitei – Parametrii din interiorul tag-ului <suite> din fișierul TestNG XML vor fi parametri la nivel de suită.
- Nivelul testului – Parametrii din interiorul tag-ului <Test> din fișierul XML de testare vor fi un parametru la nivel de test.
Iată același test cu parametrii la nivel de suită
NOTA: În cazul în care numele parametrului este același la nivel de suită și la nivel de test, atunci parametrul la nivel de test va avea prioritate față de cel la nivel de suită. Prin urmare, în acest caz, toate clasele din cadrul nivelului de testare vor partaja parametrul suprascris, iar celelalte clase care se află în afara nivelului de testare vor partaja parametrul de la nivelul suitei.
Rezolvarea problemelor
Problema nr. 1 Valoarea parametrului din testng.xml nu poate fi tipărită în parametrul metodei de testare corespunzătoare, ceea ce va genera o eroare.
Considerați următorul exemplu
Aici, atributul „author” este egal cu „Guru99”, care este un șir de caractere, iar în metoda de testare corespunzătoare se așteaptă o valoare întreagă, deci vom primi o excepție aici.
Problema nr. 2 @Parametrii dvs. nu au o valoare corespunzătoare în testing.xml.
Puteți rezolva această situație prin adăugarea adnotării @optional în parametrul corespunzător din metoda de testare.
Dispoziția # 3: Doriți să testați mai multe valori ale aceluiași parametru folosind Testng.xml
Răspunsul simplu este că acest lucru nu se poate face! Puteți avea mai mulți parametri diferiți, dar fiecare parametru nu poate avea decât o singură valoare. Acest lucru ajută la prevenirea valorilor hardcoding în script. Acest lucru face codul reutilizabil. Gândiți-vă la aceasta ca la niște fișiere de configurare pentru scriptul dumneavoastră. Dacă doriți să utilizați mai multe valori pentru un parametru, utilizați DataProviders
Data Provider in TestNG
Data Provider in TestNG este o metodă utilizată atunci când un utilizator trebuie să treacă parametri complecși. Parametrii complecși trebuie să fie creați din Java, cum ar fi obiectele complexe, obiectele din fișierele de proprietăți sau dintr-o bază de date pot fi transmise prin metoda Data Provider. Metoda este adnotată cu @DataProvider și returnează o matrice de obiecte.
Parametri folosind Dataprovider
Adnotarea @Parameters este ușoară, dar pentru a testa cu mai multe seturi de date trebuie să folosim Data Provider.
Pentru a completa mii de formulare web folosind cadrul nostru de testare avem nevoie de o metodologie diferită care ne poate oferi un set de date foarte mare într-un singur flux de execuție.
Acest concept bazat pe date este realizat prin adnotarea @DataProvider în TestNG.
Aceasta are doar un singur atribut „name”. Dacă nu specificați atributul name, atunci numele DataProvider-ului va fi același cu numele metodei corespunzătoare.
Providerul de date returnează metodei de testare un obiect JAVA bidimensional, iar metoda de testare va fi invocată de M ori într-o matrice de obiecte de tip M*N. De exemplu, dacă DataProvider returnează un array de 2*3 obiecte, cazul de test corespunzător va fi invocat de 2 ori cu 3 parametri de fiecare dată.
Exemplu complet
Invocarea DataProvider din altă clasă
În mod implicit, DataProvider locuiește în aceeași clasă în care se află metoda de testare sau în clasa sa de bază. Pentru a-l plasa într-o altă clasă, trebuie să facem ca metoda DataProviderClass să fie statică, iar în metoda de testare trebuie să adăugăm un atribut DataProviderClass în adnotarea @Test.
Exemplu de cod
TestClass ParameterDataproviderWithClassLevel.java
DataproviderClass.java
Tipuri de parametri în Dataprovider
Există două tipuri de parametri suportați de metoda DataProvider.
Method- În cazul în care același DataProvider trebuie să se comporte diferit cu diferite metode de testare , se utilizează parametrul Method.
În următorul exemplu ,
- Verificăm dacă numele metodei este TestMethodA.
- Dacă da, returnăm un set de valori
- Dacă nu, returnăm un alt set de valori
Iată rezultatul
ITestContext- Se poate utiliza pentru a crea diferiți parametri pentru cazurile de testare pe baza grupurilor.
În viața reală, puteți utiliza ITestContext pentru a varia valorile parametrilor pe baza metodelor de testare, a gazdelor, a configurațiilor de testare.
În următorul exemplu de cod
- Avem 2 grupuri A & B
- Cărei metode de testare i se atribuie un grup
- Dacă valoarea grupului este A, se returnează un anumit set de date
- Dacă valoarea grupului este B, se returnează un alt set de date
Nota: Dacă executați direct clasa testng, aceasta va apela mai întâi dataprovider, care nu poate obține informații despre grupuri, deoarece grupurile nu sunt disponibile. Dar, în schimb, dacă apelați această clasă prin testng.xml, aceasta va avea informații despre grupuri disponibile cu ITestContext. Utilizați următorul XML pentru a apela testul
Summary:
- Parametrizarea este necesară pentru a crea testarea bazată pe date.
- TestNG suportă două tipuri de parametrizare, utilizând @Parameter+TestNG.xml și utilizând@DataProvider
-
În @Parameter+TestNG.xml parametrii pot fi plasați la nivelul suitei și la nivelul testului. Dacă
Se declară același nume de parametru în ambele locuri; parametrul de la nivelul testului va avea prioritate față de cel de la nivelul suitei.
- utilizând @Parameter+TestNG.xml se poate seta o singură valoare la un moment dat, dar @DataProvider returnează o matrice 2d de obiecte.
- Dacă DataProvider este prezent în altă clasă decât clasa în care se află metoda de testare, DataProvider trebuie să fie o metodă statică.
- Există doi parametri suportați de DataProvider: Method și ITestContext.