TestNG tutorial
Ce Este TestNG?
TestNG este un cadru de testare de automatizare รฎn care NG รฎnseamnฤ โNext Generationโ. TestNG este inspirat de JUnit care foloseศte adnotฤrile (@). TestNG depฤลeลte dezavantajele JUnit ศi este conceput pentru a face testarea end-to-end uศor.
Utilizarea TestNG, puteศi genera un raport adecvat ศi puteศi afla cu uศurinศฤ cรขte cazuri de testare au fost trecute, eศuate ศi ignorate. Puteศi executa cazurile de testare eศuate separat.
De exemplu:
- Sฤ presupunem cฤ aveศi cinci cazuri de testare, o metodฤ este scrisฤ pentru fiecare caz de testare (Sฤ presupunem cฤ programul este scris folosind metoda principalฤ fฤrฤ a utiliza testNG). Cรขnd executaศi mai รฎntรขi acest program, trei metode sunt executate cu succes, iar cea de-a patra metodฤ este eศuatฤ. Apoi corectaศi erorile prezente รฎn a patra metodฤ, acum doriศi sฤ rulaศi doar a patra metodฤ pentru cฤ primele trei metode sunt oricum executate cu succes. Acest lucru nu este posibil fฤrฤ utilizarea TestNG.
- TestNG in Selenium oferฤ o opศiune, adicฤ fiศierul testng-failed.xml รฎn folderul test-output. Dacฤ doriศi sฤ rulaศi numai cazuri de testare eศuate, รฎnseamnฤ cฤ rulaศi acest fiศier XML. Va executa doar cazuri de testare nereuศite.
Pe lรขngฤ conceptul de mai sus, veศi afla mai multe despre TestNG, cum ar fi care sunt Avantajele TestNG, cum sฤ creaศi metode de testare folosind adnotฤri @test, cum sฤ convertiศi aceste clase รฎn fiศierul suitฤ de testare ศi sฤ le executaศi prin eclipse, precum ศi din linia de comandฤ.
De ce folosiศi TestNG implementate cu Selenium?
Mod implicit Selenium testele nu genereazฤ un format adecvat pentru rezultatele testelor. Folosind TestNG in Selenium, putem genera rezultate ale testelor.
pod Selenium utilizatorii folosesc acest lucru mai mult decรขt Junit din cauza avantajelor sale. Existฤ atรขt de multe caracteristici ale TestNG, dar ne vom concentra doar pe cele mai importante pe care le putem folosi Selenium. Urmฤtoarele sunt caracteristicile cheie ale Selenium TestNG:
- Generaศi raportul รฎntr-un format adecvat, inclusiv un numฤr de cazuri de testare, numฤrul de cazuri de testare trecute, numฤrul de cazuri de testare nereuศite ศi numฤrul de cazuri de testare omise.
- Mai multe cazuri de testare pot fi grupate mai uศor prin conversia lor รฎn fiศierul testng.xml. รn care puteศi stabili prioritฤศi care caz de testare trebuie executat mai รฎntรขi.
- Acelaศi caz de testare poate fi executat de mai multe ori fฤrฤ bucle doar folosind cuvรขntul cheie numit โnumฤr de invocariโ.
- Folosind testng, puteศi executa mai multe cazuri de testare pe mai multe browsere, adicฤ cross testarea browserului.
- TestNG framework-ul poate fi uศor integrat cu instrumente precum TestNG Maven, Jenkins etc.
- Adnotฤrile folosite รฎn testare sunt foarte uศor de รฎnศeles, de exemplu: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver nu are un mecanism nativ pentru generarea de rapoarte. TestNG poate genera raportul รฎntr-un format care poate fi citit ca cel prezentat mai jos.
- TestNG simplificฤ modul รฎn care sunt codificate testele. Nu mai este nevoie de o metodฤ principalฤ staticฤ รฎn testele noastre. Secvenศa acศiunilor este reglementatฤ de adnotฤri uศor de รฎnศeles care nu necesitฤ ca metodele sฤ fie statice.
- Excepศiile neprinse sunt gestionate automat de TestNG fฤrฤ a termina testul prematur. Aceste excepศii sunt raportate ca paศi nereuศiศi รฎn raport.
Avantajele TestNG peste JUnit
Existฤ trei avantaje majore ale TestNG peste JUnit:
- Adnotฤrile sunt mai uศor de รฎnศeles
- Cazurile de testare pot fi grupate mai uศor
- Este posibilฤ testarea รฎn paralel
รn ce este Adnotarea TestNG?
Adnotฤri รฎn TestNG sunt linii de cod care pot controla modul รฎn care va fi executatฤ metoda de sub ele. Ele sunt รฎntotdeauna precedate de simbolul @. Un foarte devreme ศi rapid TestNG Un exemplu este cel prezentat mai jos.
Adnotฤrile vor fi discutate mai tรขrziu รฎn secศiunea numitฤ โAdnotฤri utilizate รฎn TestNG,โdeci este perfect ok dacฤ nu รฎnศelegi cele de mai sus TestNG Exemplu รฎncฤ. Este important doar sฤ reศineศi cฤ, pentru moment, adnotฤrile รฎn TestNG sunt mai uศor de codat ศi de รฎnศeles decรขt รฎn JUnit.
Capacitatea de a rula teste รฎn paralel este disponibilฤ รฎn TestNG dar nu รฎn JUnit, Astfel รฎncรขt TestNG framework-ul este mai preferat pentru testeri Selenium Grilฤ.
Cum sฤ scrieศi cazuri de testare รฎn TestNG?
Pas 1) Scrieศi logica dvs. de afaceri ศi introduceศi TestNG adnotฤri รฎn codul dvs.
Pas 2) Adฤugaศi mai multe informaศii precum numele clasei, numele grupurilor, numele pachetului etc
Pas 3) Porneศte TestNG.
Creaศi un caz de testare folosind TestNG Adnotฤri
Acum, vom รฎnvฤศa cum sฤ creฤm primul nostru caz de testare folosind TestNG Adnotฤri รฎn Selenium:
รnainte de a crea un caz de testare, ar trebui mai รฎntรขi sฤ setฤm unul nou TestNG Proiect รฎn Eclipse ศi denumeศte-l ca โPrimulTestNGProiect".
Configurarea unui nou TestNG Proiect
Pasul 1: Faceศi clic pe Fiศier > Nou > Java Proiect
Pasul 2: Tastaศi โPrimulTestNGProiectโ ca Nume Proiect, apoi faceศi clic pe Urmฤtorul.
Pasul 3: Acum vom รฎncepe sฤ importฤm fiศierul TestNG Biblioteci รฎn proiectul nostru. Faceศi clic pe fila โBiblioteciโ, apoi pe โAdฤugaศi o bibliotecฤ...โ
Pasul 4: รn caseta de dialog Adฤugare bibliotecฤ, alegeศi โTestNGโศi faceศi clic pe Urmฤtorul.
Pasul 5: Faceศi clic pe Finalizare.
Ar trebui sฤ observi asta TestNG este inclus pe lista Biblioteci.
Pasul 6: Vom adฤuga acum fiศierele JAR care conศin fiศierul Selenium API. Aceste fiศiere se gฤsesc รฎn Java driverul client de pe care l-am descฤrcat https://www.selenium.dev/downloads/ cรขnd instalam Selenium ศi Eclipse รฎn capitolele precedente.
Apoi, navigaศi pรขnฤ unde aศi plasat Selenium fiศiere JAR.
Dupฤ adฤugarea JAR-urilor externe, ecranul dvs. ar trebui sฤ arate astfel.
Pasul 7: Faceศi clic pe Terminare ศi verificaศi cฤ primul nostruTestNGProiectul este vizibil pe Eclipsefereastra Explorer de pachete a lui.
Cum se creeazฤ un nou TestNG Fiศier de testare
Acum cฤ am terminat de configurat proiectul nostru รฎn asta TestNG tutorial, haideศi sฤ creฤm un nou TestNG fiศier.
Pasul 1: Faceศi clic pe โsrcโ ศi Alegeศi altele.
Faceศi clic dreapta pe folderul pachetului โsrcโ, apoi alegeศi Nou > Altele...
Pasul 2: Selectaศi TestNG clasฤ.
Dati click pe TestNG folder ศi selectaศi โTestNG opศiunea de clasฤโ. Faceศi clic pe Urmฤtorul.
Pasul 3: Introduceศi valorile.
Introduceศi valorile indicate mai jos รฎn casetele de introducere corespunzฤtoare ศi faceศi clic pe Terminare. Observaศi cฤ ne-am numit nostru Java fiศier ca โPrimulTestNGFiลier".
Pasul 4: ศablon creat.
Eclipse ar trebui sฤ creeze automat ศablonul pentru nostru TestNG fiศierul prezentat mai jos.
Codificarea Primului nostru TestNG Exemplu de caz de testare
Sฤ creฤm acum primul nostru Caz de testare care va verifica dacฤ Mercury Pagina de pornire a Tours este corectฤ. Introduceศi codul, aศa cum se aratฤ รฎn mai jos TestNG Exemplu:
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.close();
}
}
Observaศi urmฤtoarele.
- TestNG nu necesitฤ sฤ aveศi o metodฤ main().
- Metodele nu trebuie sฤ fie statice.
- Am folosit adnotarea @Test. @Test este folosit pentru a spune cฤ metoda de sub ea este un caz de testare. รn acest caz, am setat metoda verifyHomepageTitle() sฤ fie cazul nostru de testare, aศa cฤ am plasat o adnotare โ@Testโ deasupra acesteia.
- Deoarece folosim adnotฤri รฎn TestNG, trebuia sฤ importฤm pachetul org.testng.annotations.*.
- Am folosit clasa Assert. Clasa Assert este folositฤ pentru a efectua operaศiuni de verificare รฎn TestNG. Pentru a-l folosi, trebuie sฤ importam pachetul org.testng.Assert.
Este posibil sฤ aveศi mai multe cazuri de testare (prin urmare, mai multe adnotฤri @Test) รฎntr-un singur TestNG fiลier. Acest lucru va fi abordat mai detaliat mai tรขrziu รฎn secศiunea โAdnotฤri utilizate รฎn TestNG. "
Executarea testului
Pentru a rula testul, pur ศi simplu rulaศi fiศierul รฎn Eclipse aศa cum faceศi รฎn mod normal. Eclipse va oferi douฤ ieศiri โ una รฎn fereastra Consolฤ ศi cealaltฤ pe TestNG Fereastra rezultate.
Verificarea rapoartelor create de TestNG
Fereastra Consolฤ รฎn Eclipse oferฤ un raport bazat pe text al rezultatelor cazului nostru de testare รฎn timp ce TestNG Fereastra de rezultate ne oferฤ una graficฤ.
Generarea de rapoarte HTML
TestNG are capacitatea de a genera rapoarte รฎn format HTML.
Pasul 1: Dupฤ ce a rulat primul nostruTestNGFiศierul pe care l-am creat รฎn secศiunea anterioarฤ, faceศi clic dreapta pe numele proiectului (PrimulTestNGProject) รฎn fereastra Project Explorer, apoi faceศi clic pe opศiunea โReรฎmprospฤtareโ.
Pasul 2: Observaศi cฤ a fost creat un folder โtest-outputโ. Extindeศi-l ศi cฤutaศi un fiศier index.html. Acest fiศier HTML este un raport al rezultatelor celei mai recente teste.
Pasul 3: Double-faceศi clic pe acel fiศier index.html pentru a-l deschide Eclipsebrowser-ul web รฎncorporat. Puteศi reรฎmprospฤta aceastฤ paginฤ oricรขnd dupฤ ce aศi reluat testul prin simpla apฤsare a F5 la fel ca รฎn browserele web obiศnuite.
Adnotฤrile utilizate รฎn TestNG
รn secศiunea anterioarฤ, aศi fost introdus รฎn adnotarea @Test. Acum, vom studia adnotฤrile mai avansate ศi utilizฤrile lor.
Cazuri de testare multiple
Putem folosi mai multe adnotฤri @Test รฎntr-o singurฤ TestNG fiลier. รn mod implicit, metodele adnotate de @Test sunt executate alfabetic. Vezi codul de mai jos. Deศi metodele c_test, a_test ศi b_test nu sunt aranjate alfabetic รฎn cod, ele vor fi executate ca atare.
Rulaศi acest cod ศi pe pagina index.html generatฤ, faceศi clic pe โVizualizare cronologicฤโ.
parametrii
Dacฤ doriศi ca metodele sฤ fie executate รฎntr-o ordine diferitฤ, utilizaศi parametrul โprioritateโ. Parametrii sunt cuvinte cheie care modificฤ funcศia adnotฤrii.
- Parametrii necesitฤ sฤ le atribuiศi o valoare. Faceศi acest lucru plasรขnd un โ=" lรขngฤ ele, apoi urmat de valoare.
- Parametrii sunt รฎncadraศi รฎntr-o pereche de paranteze care sunt plasate imediat dupฤ adnotare, ca fragmentul de cod prezentat mai jos.
TestNG va executa adnotarea @Test cu cea mai micฤ valoare de prioritate pรขnฤ la cea mai mare. Nu este nevoie ca valorile dvs. prioritare sฤ fie consecutive.
TestNG Raportul HTML va confirma cฤ metodele au fost executate pe baza valorii crescฤtoare a prioritฤศii.
Parametri multipli
Pe lรขngฤ โprioritateโ, @Test are un alt parametru numit โalwaysRunโ, care poate fi setat doar la โadevฤratโ sau โfalsโ. Pentru a utiliza doi sau mai mulศi parametri รฎntr-o singurฤ adnotare, separaศi-i cu o virgulฤ precum cel prezentat mai jos.
@Test(priority = 0, alwaysRun = true)
@BeforeTest ศi @AfterTest
| @BeforeTest | metodele sub aceastฤ adnotare vor fi executate รฎnainte de primul caz de testare รฎn TestNG fiลier. |
| @AfterTest | metodele sub aceastฤ adnotare vor fi executate dupฤ toate cazurile de testare รฎn TestNG fiศierul sunt executate. |
Luaศi รฎn considerare codul de mai jos.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
Aplicรขnd logica prezentatฤ de tabel ศi codul de mai sus, putem prezice cฤ secvenศa prin care vor fi executate metodele este:
- 1st โ launchBrowser()
- 2nd โ verifyHomepageTitle()
- 3rd โ terminateBrowser()
Amplasarea blocurilor de adnotare poate fi interschimbatฤ fฤrฤ a afecta ordinea cronologicฤ รฎn care vor fi executate.. Sฤ รฎnศelegem cu a TestNG Exemplu ศi รฎncercaศi sฤ rearanjaศi blocurile de adnotฤri astfel รฎncรขt codul dvs. sฤ arate similar cu cel de mai jos.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@AfterTest //Jumbled
public void terminateBrowser(){
driver.close();
}
@BeforeTest //Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test //Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
Rulaศi codul de mai sus ศi observaศi asta
@BeforeMethod ศi @AfterMethod
| @BeforeMethod | metodele sub aceastฤ adnotare vor fi executate รฎnainte de fiecare metodฤ รฎn fiecare caz de testare. |
| @AfterMethod | metodele sub aceastฤ adnotare vor fi executate dupฤ fiecare metodฤ รฎn fiecare caz de testare. |
In Mercury Tururi, sฤ presupunem cฤ ne place sฤ verificฤm titlurile paginilor ศintฤ ale celor douฤ link-uri de mai jos.
Fluxul testului nostru ar fi:
- Accesaศi pagina principalฤ ศi verificaศi titlul acesteia.
- Faceศi clic pe รNREGISTRARE ศi verificaศi titlul paginii ศintฤ.
- Reveniศi la pagina de pornire ศi verificaศi dacฤ mai are titlul corect.
- Faceศi clic pe ASISTENศฤ ศi verificaศi titlul paginii ศintฤ.
- Reveniศi la pagina de pornire ศi verificaศi dacฤ mai are titlul corect.
Codul de mai jos ilustreazฤ modul รฎn care @BeforeMethod ศi @AfterMethod sunt folosite pentru a executa eficient scenariul menศionat mai sus.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
@Test
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver= new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register(){
driver.findElement(By.linkText("REGISTER")).click() ;
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click() ;
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage ( ) {
driver.findElement(By.linkText("Home")).click() ;
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
Dupฤ executarea acestui test, dvs TestNG ar trebui sฤ raporteze urmฤtoarea secvenศฤ.
Pur ศi simplu, @BeforeMethod ar trebui sฤ conศinฤ metode pe care trebuie sฤ le rulaศi รฎnainte fiecare caz de testare รฎn timp ce @AfterMethod ar trebui sฤ conศinฤ metode pe care trebuie sฤ le rulaศi dupฤ fiecare caz de testare.
Rezumatul TestNG Adnotฤri
@BeforeSuite: Metoda adnotatฤ va fi rulatฤ รฎnainte ca toate testele din aceastฤ suitฤ sฤ fie rulate.
@AfterSuite: Metoda adnotatฤ va fi rulatฤ dupฤ ce toate testele din aceastฤ suitฤ au fost executate.
@BeforeTest: Metoda adnotatฤ va fi rulatฤ รฎnainte de rularea oricฤrei metode de testare aparศinรขnd claselor din interiorul etichetei.
@AfterTest: Metoda adnotatฤ va fi rulatฤ dupฤ ce toate metodele de testare aparศinรขnd claselor din interiorul etichetei au fost rulate.
@BeforeGroups: Lista de grupuri pe care aceastฤ metodฤ de configurare le va rula รฎnainte. Se garanteazฤ cฤ aceastฤ metodฤ va rula cu puศin timp รฎnainte ca prima metodฤ de testare care aparศine oricฤruia dintre aceste grupuri sฤ fie invocatฤ.
@AfterGroups: Lista de grupuri dupฤ care va rula aceastฤ metodฤ de configurare. Aceastฤ metodฤ este garantatฤ sฤ ruleze la scurt timp dupฤ ce ultima metodฤ de testare care aparศine oricฤruia dintre aceste grupuri este invocatฤ.
@รnainte de curs: Metoda adnotatฤ va fi rulatฤ รฎnainte ca prima metodฤ de testare din clasa curentฤ sฤ fie invocatฤ.
@Dupฤ clasa: Metoda adnotatฤ va fi rulatฤ dupฤ ce toate metodele de testare din clasa curentฤ au fost rulate.
@BeforeMethod: Metoda adnotatฤ va fi rulatฤ รฎnainte de fiecare metodฤ de testare.
@AfterMethod: Metoda adnotatฤ va fi rulatฤ dupฤ fiecare metodฤ de testare.
@Test: Metoda adnotatฤ face parte dintr-un caz de testare
Concluzie
- TestNG este de testare cadru care este capabil sฤ facฤ Selenium teste mai uศor de รฎnศeles ศi de a genera rapoarte uศor de รฎnศeles.
- Principalele avantaje ale TestNG peste JUnit sunt urmฤtoarele.
- Adnotฤrile sunt mai uศor de utilizat ศi de รฎnศeles.
- Cazurile de testare pot fi grupate mai uศor.
- TestNG ne permite sฤ creฤm teste paralele.
- Fereastra Consolฤ รฎn Eclipse genereazฤ un rezultat bazat pe text รฎn timp ce TestNG fereastra este mai utilฤ deoarece ne oferฤ o ieศire graficฤ a rezultatului testului plus alte detalii semnificative, cum ar fi:
- Timpul de execuศie al fiecฤrei metode.
- Ordinea cronologicฤ รฎn care au fost executate metodele
- TestNG este capabil sฤ genereze rapoarte bazate pe HTML.
- Adnotฤrile pot folosi parametri la fel ca de obicei Java TestNG metode.
- TestNG Furnizor de date este o modalitate de a trece parametri รฎn funcศia de testare care trece valori diferite รฎn cazurile de testare รฎntr-o singurฤ execuศie.

































