TestNG tutorial
โก Rezumat inteligent
TestNG este o generaศie urmฤtoare Java cadru de testare care se รฎmperecheazฤ cu Selenium pentru automatizare structuratฤ, raportare complexฤ ศi execuศie paralelฤ. Acest tutorial acoperฤ adnotฤrile de bazฤ, configurarea proiectului รฎn Eclipse, scrierea primului caz de testare, rapoarte HTML ศi utilizarea avansatฤ a parametrilor.

Ce Este TestNG?
TestNG este un framework de testare automatฤ, unde โNGโ รฎnseamnฤ โNext Generationโ. TestNG este inspirat de JUnit ศi utilizฤri Java adnotฤri (@) pentru a controla fluxul de testare. Depฤศeศte JUnitlimitฤrile anterioare ale ศi este conceput pentru a face testarea end-to-end mai uศor.
cu TestNG Puteศi genera un raport adecvat ศi puteศi vedea imediat cรขte teste au fost reuศite, eศuate sau omise. De asemenea, puteศi rula din nou doar cazurile eศuate.
De exemplu:
- Sฤ presupunem cฤ aveศi cinci cazuri de testare, fiecare cu propria metodฤ, scrise fฤrฤ TestNGTrei รฎncercฤri reuศite; a patra eศueazฤ. Dupฤ ce aศi remediat a patra รฎncercare, doriศi sฤ o rulaศi din nou doar pe aceasta, deoarece primele trei au trecut deja. Acest lucru este dificil de fฤcut cu cod simplu al metodei main().
- TestNG oferฤ o
testng-failed.xmlde fiศier รฎntest-outputfolder. Rularea acelui fiศier XML reexecutฤ doar cazurile eศuate.
Dincolo de asta, veศi afla avantajele TestNG, cum sฤ scrii metode de testare cu adnotฤri @Test ศi cum sฤ-ศi transformi clasele รฎntr-o suitฤ de teste care ruleazฤ de la Eclipse sau linia de comandฤ.
De ce folosiศi TestNG implementate cu Selenium?
รn mod implicit, Selenium testele nu produc rezultate frumos formatate. Cu TestNG conectat, rulatorul de teste emite un raport structurat pe care รฎl puteศi partaja cu echipa.
pod Selenium utilizatorii preferฤ TestNG peste JUnit datoritฤ setului sฤu mai larg de funcศii. Caracteristicile cheie pentru Selenium sunt:
- Rapoarte care includ numฤrul de cazuri de testare rulate, reuศite, eศuate ศi omise.
- Grupare uศoarฤping cazurilor de testare prin intermediul unui
testng.xmlfiศier, cu prioritฤศi de execuศie. - Repetaศi un test de mai multe ori fฤrฤ bucle folosind
invocationCount. - Executaศi teste multiple pe mai multe browsere โ cross-testarea browserului sprijini.
- Integrare linฤ cu Maven, Jenkinsศi alte instrumente de integrare continuฤ.
- Readable adnotฤri โ de exemplu, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver nu are raportare nativฤ; TestNG umple acel gol cu โโun raport HTML curat, precum cel de mai jos.
- TestNG simplificฤ codul de testare. Nu mai aveศi nevoie de o metodฤ main staticฤ; adnotฤrile decid ce ศi cรขnd se executฤ.
- Excepศiile neinterceptate sunt gestionate cu eleganศฤ de cฤtre TestNGAceศtia sunt raportaศi ca paศi eศuaศi fฤrฤ a termina รฎntreaga rulare.
Avantajele TestNG peste JUnit
TestNG oferฤ trei avantaje majore faศฤ de JUnit:
- Adnotฤrile sunt mai uศor de รฎnศeles ศi de utilizat.
- Cazurile de testare pot fi grupate ศi prioritizate cu mai puศin efort.
- Executarea testelor paralele este acceptatฤ din fabricฤ.
Ce este o adnotaศie รฎn TestNG?
Adnotฤri รฎn TestNG sunt linii de cod plasate deasupra unei metode pentru a controla modul รฎn care aceasta este executatฤ. Acestea รฎncep รฎntotdeauna cu simbolul @. Un exemplu simplu este prezentat mai jos.
Adnotฤrile sunt prezentate รฎn detaliu รฎn secศiunea โAdnotฤri utilizate รฎn TestNGMatei 22:21 mai tรขrziu รฎn acest tutorial, aศa cฤ exemplul de mai sus este doar pentru a stabili aศteptฤri. TestNG Adnotฤrile sunt mai uศor de codat ศi de citit decรขt JUnit echivalente ศi sunt esenศiale atunci cรขnd se executฤ teste pe Selenium Grilฤ unde execuศia paralelฤ conteazฤ.
Cum sฤ scrieศi cazuri de testare รฎn TestNG
Scrierea a TestNG Cazul de testare are trei etape:
- Scrieศi logica ศi locul afacerii dvs. TestNG adnotฤrile deasupra fiecฤrei metode.
- Adฤugaศi metadate precum numele clasei, numele grupului ศi numele pachetului.
- Porneศte TestNG clasฤ din IDE-ul dvs. sau din linia de comandฤ.
Creaศi un caz de testare folosind TestNG Adnotฤri
Acum vom crea primul nostru caz de testare folosind TestNG adnotฤri รฎn Seleniumรnainte de a scrie testul, configuraศi un nou TestNG proiect in Eclipse ศi spune-i PrenumeleTestNGProiect.
Configurarea unui nou TestNG Proiect
Pas 1) Clic Fiศier > Nou > Java Proiect.
Pas 2) Intraศi PrenumeleTestNGProiect ca nume al proiectului ศi faceศi clic pe Pagina Urmฤtoare โ.
Pas 3) Importaศi fiศierul TestNG biblioteci. Faceศi clic pe Biblioteci fila ศi apoi Adฤugaศi o bibliotecฤโฆ.
Pas 4) รn Adฤugaศi bibliotecฤ dialog, alegeศi TestNG ศi faceศi clic Pagina Urmฤtoare โ.
Pas 5) Clic finalizarea.
TestNG ar trebui sฤ aparฤ acum รฎn lista Biblioteci.
Pas 6) Adฤugaศi fiศierele JAR care conศin Selenium API. Acestea provin de la Java driver client descฤrcat de pe selenium.dev/downloads.
Navigaศi la folderul รฎn care Selenium Fiศierele JAR sunt stocate.
Dupฤ adฤugarea fiศierelor JAR externe, ecranul ar trebui sฤ arate astfel.
Pas 7) Clic finalizarea. Noul PrenumeleTestNGProiect apare รฎn Exploratorul de pachete.
Cum se creeazฤ un nou TestNG Fiศier de testare
Cu proiectul gata, creaศi unul nou TestNG fiศier.
Pas 1) Faceศi clic dreapta pe src dosarul ศi alegeศi Nou > Alteleโฆ.
Pas 2) extinde TestNG folder, selectaศi TestNG clasฤ, ศi faceศi clic pe Pagina Urmฤtoare โ.
Pas 3) Introduceศi valorile afiศate mai jos ศi faceศi clic pe finalizarea. Java fiศierul este numit PrenumeleTestNGFiศier.
Pas 4) Eclipse genereazฤ TestNG ศablonul prezentat mai jos.
Programarea pentru prima datฤ TestNG Caz de testare
Creaศi primul caz de testare care verificฤ titlul Mercury Pagina principalฤ a excursiilor.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
Lucruri de observat:
- TestNG nu are nevoie de
main()metodฤ. - Metodele nu trebuie sฤ fie statice.
- @Test semne de adnotare
verifyHomepageTitle()ca un caz de testare. - Adnotฤrile se aflฤ รฎn
org.testng.annotations.*pachet. - assert clasa de la
org.testng.Assertverificฤrile conduce.
Este posibil sฤ aveศi mai multe adnotฤri @Test รฎntr-o singurฤ adnotare TestNG fiศier. Acoperim acest aspect รฎn โAdnotฤri utilizate รฎn TestNGMatei 22:21 secลฃiune.
Executarea testului
Faceศi clic dreapta pe fiศier ศi rulaศi-l ca TestNG Test. Eclipse produce douฤ ieศiri โ un rezultat text รฎn fereastra Consolei ศi un rezultat grafic รฎn TestNG Fereastra rezultate.
Verificarea rapoartelor create de TestNG
Fereastra Consolei oferฤ un rezumat textual รฎn timp ce TestNG Fereastra cu rezultate afiศeazฤ o reprezentare graficฤ.
Generarea de rapoarte HTML
TestNG poate genera, de asemenea, rapoarte HTML complete.
Pas 1) Dupฤ alergare PrenumeleTestNGFiศier, faceศi clic dreapta pe proiect ศi alegeศi Reรฎmprospฤta.
Pas 2) A rezultat de test apare folderul. Extindeศi-l ศi localizaศi index.html โ raportul HTML pentru cea mai recentฤ rulare.
Pas 3) Double-clic index.html sฤ o deschid รฎnฤuntru EclipseBrowserul lui. Apฤsaศi F5 pentru a reรฎmprospฤta pagina dupฤ rulฤri viitoare.
Adnotฤri utilizate รฎn TestNG
Aศi vฤzut deja adnotarea @Test. Restul acestei secศiuni acoperฤ cele mai utile adnotฤri avansate.
Cazuri de testare multiple
Un singur TestNG Fiศierul poate conศine mai multe adnotฤri @Test. รn mod implicit, metodele adnotate cu @Test se executฤ รฎn ordine alfabeticฤ. รn codul de mai jos, metodele c_test, a_test ศi b_test ruleazฤ รฎn ordine alfabeticฤ, indiferent de ordinea surselor.
Rulaศi codul ศi deschideศi index.html. Clic Vizualizare cronologicฤ.
parametrii
Pentru a suprascrie ordinea implicitฤ, utilizaศi priority parametru. Parametrii sunt cuvinte cheie care modificฤ comportamentul unei adnotฤri.
- Atribuiศi o valoare cu
=. - รncadraศi parametrii รฎn paranteze plasate imediat dupฤ adnotare, aศa cum se aratฤ mai jos.
TestNG executฤ adnotฤri @Test de la cea mai micฤ valoare de prioritate la cea mai mare. Numerele de prioritate nu trebuie sฤ fie consecutive.
Raportul HTML confirmฤ cฤ metodele au fost executate รฎn ordine crescฤtoare a prioritฤศii.
Parametri multipli
รn afarฤ de priority, @Test acceptฤ alwaysRun parametru (adevฤrat sau fals). Pentru a utiliza doi sau mai mulศi parametri รฎntr-o singurฤ adnotare, separaศi-i prin virgulฤ:
@Test(priority = 0, alwaysRun = true)
@BeforeTest ศi @AfterTest
| @BeforeTest | Metode sub aceastฤ rulare de adnotare รฎnainte de primul caz de testare din TestNG fiลier. |
| @AfterTest | Metode sub aceastฤ rulare de adnotare dupฤ toate cazurile de testare รฎn TestNG finalizare fiศier. |
Luaศi รฎn considerare codul de mai jos.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
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.quit();
}
}
Din tabel ศi cod, putem prezice cฤ secvenศa va fi:
- 1 โ
launchBrowser() - al doilea โ
verifyHomepageTitle() - al 3-lea โ
terminateBrowser()
Plasarea blocurilor de adnotฤri รฎn fiศierul sursฤ nu afecteazฤ ordinea lor de execuศie. รncercaศi sฤ reorganizaศi metodele aศa cum se aratฤ mai jos.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
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 ศi verificaศi rezultatul.
@BeforeMethod ศi @AfterMethod
| @BeforeMethod | Metode sub aceastฤ rulare de adnotare รฎnaintea fiecฤrei metode de testare. |
| @AfterMethod | Metode sub aceastฤ rulare de adnotare dupฤ fiecare metodฤ de testare. |
In Mercury Tururi, sฤ presupunem cฤ vrem sฤ verificฤm titlurile a douฤ pagini ศintฤ la care se ajunge de pe pagina principalฤ.
Fluxul testului este:
- Deschideศi pagina principalฤ ศi verificaศi titlul acesteia.
- Faceศi clic pe รNREGISTRARE ศi verificaศi titlul paginii ศintฤ.
- Reveniศi la pagina principalฤ ศi verificaศi titlul.
- Faceศi clic pe ASISTENศฤ ศi verificaศi titlul paginii ศintฤ.
- Reveniศi la pagina principalฤ ศi verificaศi din nou titlul.
Codul de mai jos aratฤ cum @BeforeMethod ศi @AfterMethod gestioneazฤ paศii repetaศi.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
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.quit();
}
}
Dupฤ rularea testului, TestNG raporteazฤ secvenศa de mai jos.
Pe scurt: plasaศi paศii de configurare รฎn interior @BeforeMethod ศi curฤศare sau resetare a navigaศiei รฎn interior @AfterMethod deci fiecare caz de testare รฎncepe ศi se terminฤ รฎntr-o stare cunoscutฤ.
Rezumatul TestNG Adnotฤri
- @BeforeSuite: se executฤ รฎnaintea tuturor testelor din suitฤ.
- @AfterSuite: ruleazฤ dupฤ toate testele din suitฤ.
- @รnainteDeTest: ruleazฤ รฎnaintea oricฤrei metode de testare aparศinรขnd claselor din interiorul unui etichetฤ.
- @DupฤTest: ruleazฤ dupฤ toate metodele de testare aparศinรขnd claselor din interiorul unui etichetฤ.
- @รnainteDeGrupuri: se executฤ cu puศin timp รฎnainte de prima metodฤ de testare care aparศine oricฤrui grup listat.
- @AfterGroups: se executฤ la scurt timp dupฤ ultima metodฤ de testare care aparศine oricฤrui grup listat.
- @รnaintedeClasฤ: se executฤ รฎnaintea primei metode de testare din clasa curentฤ.
- @DupฤClasฤ: ruleazฤ dupฤ toate metodele de testare din clasa curentฤ.
- @รnainteDeMetodฤ: se executฤ รฎnaintea fiecฤrei metode de testare.
- @AfterMethod: se executฤ dupฤ fiecare metodฤ de testare.
- @Test: marcheazฤ metoda ca un caz de testare.

































