TestNG Tutorijal
ล to je TestNG?
TestNG je okvir za automatizirano testiranje u kojem NG oznaฤava "sljedeฤu generaciju". TestNG nadahnut je JUnit koji koristi oznake (@). TestNG prevladava nedostatke JUnit i dizajniran je za izradu end-to-end testiranje lako.
Koriลกtenje TestNG, moลพete generirati odgovarajuฤe izvjeลกฤe i lako moลพete saznati koliko je testnih sluฤajeva proลกlo, neuspjeลกno i preskoฤeno. Moลพete zasebno izvrลกiti neuspjele testove.
Na primjer:
- Pretpostavimo da imate pet testnih sluฤajeva, jedna metoda je napisana za svaki testni sluฤaj (pretpostavimo da je program napisan koriลกtenjem glavne metode bez koriลกtenja testNG). Kada prvo pokrenete ovaj program, tri metode su uspjeลกno izvedene, a ฤetvrta metoda nije uspjela. Zatim ispravite greลกke prisutne u ฤetvrtoj metodi, sada ลพelite pokrenuti samo ฤetvrtu metodu jer se prve tri metode ionako uspjeลกno izvode. To nije moguฤe bez koriลกtenja TestNG.
- The TestNG in Selenium pruลพa opciju, tj. datoteku testng-failed.xml u mapi testnih izlaza. Ako ลพelite pokrenuti samo neuspjele testove, znaฤi da morate pokrenuti ovu XML datoteku. Izvrลกit ฤe samo neuspjeลกne testne sluฤajeve.
Osim gornjeg koncepta, saznat ฤete viลกe o TestNG, kao ลกto su prednosti TestNG, kako stvoriti testne metode koristeฤi @test anotacije, kako pretvoriti ove klase u datoteku paketa za testiranje i izvrลกiti kroz eclipse kao i iz naredbenog retka.
Zaลกto koristiti TestNG sa Selenium?
Zadano Selenium testovi ne generiraju odgovarajuฤi format za rezultate testa. Koriลกtenje TestNG in Selenium, moลพemo generirati rezultate testa.
most Selenium korisnici ovo koriste viลกe od Junit zbog svojih prednosti. Toliko je znaฤajki TestNG, ali ฤemo se usredotoฤiti samo na one najvaลพnije koje moลพemo koristiti u Selenium. Slijede kljuฤne znaฤajke Selenium TestNG:
- Generirajte izvjeลกฤe u odgovarajuฤem formatu ukljuฤujuฤi broj testnih sluฤajeva, broj testnih sluฤajeva koji su proลกli, broj testnih sluฤajeva neuspjelih i broj testnih sluฤajeva koji su preskoฤeni.
- Viลกe testnih sluฤajeva moลพe se lakลกe grupirati pretvaranjem u datoteku testng.xml. U kojem moลพete postaviti prioritete koji testni sluฤaj treba prvi izvrลกiti.
- Isti testni sluฤaj moลพe se izvrลกiti viลกe puta bez petlji samo koriลกtenjem kljuฤne rijeฤi pod nazivom 'broj pozivanja'.
- Koristeฤi testng, moลพete izvrลกiti viลกe testnih sluฤajeva na viลกe preglednika, tj. unakrsno testiranje preglednika.
- The TestNG Okvir se moลพe lako integrirati s alatima kao ลกto su TestNG Maven, Jenkins itd.
- Biljeลกke koriลกtene u testiranju vrlo je lako razumjeti, npr.: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver nema izvorni mehanizam za generiranje izvjeลกฤa. TestNG moลพe generirati izvjeลกฤe u ฤitljivom formatu poput onog prikazanog u nastavku.
- TestNG pojednostavljuje naฤin kodiranja testova. Nema viลกe potrebe za statiฤkom glavnom metodom u naลกim testovima. Redoslijed radnji reguliran je lako razumljivim komentarima koji ne zahtijevaju da metode budu statiฤne.
- Neuhvaฤene iznimke automatski obraฤuje TestNG bez preranog prekida testa. Ove se iznimke u izvjeลกฤu prijavljuju kao neuspjeli koraci.
Prednosti TestNG umjesto prema JUnit
Tri su glavne prednosti TestNG umjesto prema JUnit:
- Biljeลกke su lakลกe razumljive
- Testni sluฤajevi mogu se lakลกe grupirati
- Moguฤe je paralelno testiranje
U ฤemu je anotacija TestNG?
Biljeลกke u TestNG su linije koda koje mogu kontrolirati kako ฤe se metoda ispod njih izvrลกiti. Uvijek im prethodi simbol @. Vrlo rano i brzo TestNG Primjer je onaj prikazan u nastavku.
O komentarima ฤe se raspravljati kasnije u odjeljku pod nazivom โKomentari koriลกteni u TestNGโ, stoga je sasvim u redu ako ne razumijete gore navedeno TestNG Joลก samo primjer. Za sada je samo vaลพno napomenuti da su primjedbe u TestNG lakลกe ih je kodirati i razumjeti nego u JUnit.
Moguฤnost paralelnog izvoฤenja testova dostupna je u TestNG ali ne u JUnit, Tako da je TestNG okvir je poลพeljniji za testere koji koriste Selenium Mreลพa.
Kako napisati testne sluฤajeve TestNG?
Korak 1) Napiลกite svoju poslovnu logiku i umetnite TestNG napomene u vaลกem kodu.
Korak 2) Dodajte viลกe informacija kao ลกto su naziv klase, naziv grupe, naziv paketa itd
Korak 3) Pokreni TestNG.
Stvorite testni sluฤaj pomoฤu TestNG Biljeลกke
Sada ฤemo nauฤiti kako stvoriti naลก prvi testni sluฤaj koristeฤi TestNG Biljeลกke u Selenium:
Prije nego ลกto stvorimo test sluฤaj, prvo bismo trebali postaviti novi TestNG Projekt u Eclipse i nazovite ga kao โPrviTestNGProjekt".
Postavljanje novog TestNG Projekt
Korak 1: Kliknite Datoteka > Novo > Java Projekt
Korak 2: Upiลกite "PrviTestNGProjektโ kao naziv projekta, a zatim kliknite Dalje.
Korak 3: Sada ฤemo poฤeti uvoziti TestNG Knjiลพnice na naลก projekt. Kliknite karticu "Biblioteke", a zatim "Dodaj biblioteku..."
Korak 4: U dijaloลกkom okviru Dodaj biblioteku odaberite "TestNGโI kliknite Dalje.
Korak 5: Pritisnite Finish.
Trebali biste to primijetiti TestNG nalazi se na popisu knjiลพnica.
Korak 6: Sada ฤemo dodati JAR datoteke koje sadrลพe Selenium API. Ove se datoteke nalaze u Java klijentski upravljaฤki program s kojeg smo preuzeli https://www.selenium.dev/downloads/ kada smo instalirali Selenium i Eclipse u prethodnim poglavljima.
Zatim doฤite do mjesta gdje ste postavili Selenium JAR datoteke.
Nakon dodavanja vanjskih JAR-ova, vaลก bi zaslon trebao izgledati ovako.
Korak 7: Kliknite Zavrลกi i potvrdite da je naลก FirstTestNGProjekt je vidljiv na Eclipse's Package Explorer prozor.
Kako stvoriti novi TestNG Testna datoteka
Sada kada smo zavrลกili s postavljanjem naลกeg projekta u ovome TestNG vodiฤ, stvorimo novi TestNG file.
Korak 1: Kliknite na 'src' i odaberite drugo.
Desnom tipkom miลกa kliknite na mapu paketa โsrcโ, a zatim odaberite Novo > Ostaloโฆ
Korak 2: odabrati TestNG klase.
Kliknite na TestNG mapu i odaberite "TestNG klasaโ. Pritisnite Dalje.
Korak 3: Upiลกite vrijednosti.
Upiลกite dolje navedene vrijednosti u odgovarajuฤe okvire za unos i kliknite Zavrลกi. Imajte na umu da smo imenovali naลกe Java datoteku kao โFirstTestNGDatoteka".
Korak 4: Predloลพak stvoren.
Eclipse treba automatski stvoriti predloลพak za naลกe TestNG datoteku prikazanu u nastavku.
Kodiranje naลกeg prvog TestNG Primjer testnog sluฤaja
Kreirajmo sada naลก prvi Testni sluฤaj koji ฤe provjeriti je li Mercury Poฤetna stranica Toursa je toฤna. Upiลกite svoj kod kao ลกto je prikazano u nastavku TestNG Primjer:
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();
}
}
Primijetite sljedeฤe.
- TestNG ne zahtijeva da imate main() metodu.
- Metode ne moraju biti statiฤne.
- Koristili smo napomenu @Test. @Test se koristi da kaลพe da je metoda pod njim test sluฤaj. U ovom smo sluฤaju metodu verifyHomepageTitle() postavili kao naลก testni sluฤaj, pa smo iznad nje stavili napomenu '@Test'.
- Buduฤi da koristimo zabiljeลกke u TestNG, morali smo uvesti paket org.testng.annotations.*.
- Koristili smo klasu Assert. Klasa Assert koristi se za provoฤenje operacija provjere TestNG. Da bismo ga koristili, moramo uvesti paket org.testng.Assert.
Moลพete imati viลกe testnih sluฤajeva (dakle, viลกe @Test komentara) u jednom TestNG datoteka. O tome ฤemo se detaljnije pozabaviti kasnije u odjeljku "Primjedbe koriลกtene u TestNG".
Izvoฤenje testa
Da biste pokrenuli test, jednostavno pokrenite datoteku Eclipse kao ลกto to obiฤno radite. Eclipse pruลพit ฤe dva izlaza โ jedan u prozoru konzole, a drugi na TestNG Prozor s rezultatima.
Provjera izvjeลกฤa koje je izradio TestNG
Prozor konzole u Eclipse daje tekstualno izvjeลกฤe o naลกim rezultatima testa, dok TestNG Prozor s rezultatima daje nam grafiฤki.
Generiranje HTML izvjeลกฤa
TestNG ima moguฤnost generiranja izvjeลกฤa u HTML formatu.
Korak 1: Nakon ลกto smo pokrenuli naลก FirstTestNGDatoteku koju smo stvorili u prethodnom odjeljku desnom tipkom miลกa kliknite naziv projekta (PrviTestNGProject) u prozoru Project Explorera zatim kliknite na opciju "Osvjeลพi".
Korak 2: Primijetite da je stvorena mapa "test-output". Proลกirite ga i potraลพite datoteku index.html. Ova HTML datoteka je izvjeลกฤe o rezultatima posljednjeg testiranja.
Korak 3: Double-kliknite na tu datoteku index.html da je otvorite unutar Eclipseugraฤeni web preglednik. Ovu stranicu moลพete osvjeลพiti u bilo kojem trenutku nakon ponovnog pokretanja testa jednostavnim pritiskom na F5 baลก kao u obiฤnim web preglednicima.
Biljeลกke koriลกtene u TestNG
U prethodnom odjeljku upoznali ste se s napomenom @Test. Sada ฤemo prouฤavati naprednije biljeลกke i njihovu upotrebu.
Viลกe testnih sluฤajeva
Moลพemo koristiti viลกe @Test primjedbi u jednoj TestNG datoteka. Prema zadanim postavkama, metode oznaฤene @Testom izvode se abecednim redom. Pogledajte kod ispod. Iako metode c_test, a_test i b_test nisu poredane abecednim redom u kodu, izvrลกit ฤe se kao takve.
Pokrenite ovaj kod i na generiranoj stranici index.html kliknite "Kronoloลกki prikaz".
Parametri
Ako ลพelite da se metode izvrลกavaju drugaฤijim redoslijedom, koristite parametar โpriorityโ. Parametri su kljuฤne rijeฤi koje mijenjaju funkciju zabiljeลกke.
- Parametri zahtijevaju da im dodijelite vrijednost. To ฤinite tako da pored njih stavite "=", a zatim vrijednost.
- Parametri su zatvoreni u par zagrada koje su smjeลกtene odmah nakon napomene poput isjeฤka koda prikazanog u nastavku.
TestNG ฤe izvrลกiti napomenu @Test s najniลพom vrijednoลกฤu prioriteta do najveฤe. Nema potrebe da vaลกe vrijednosti prioriteta budu uzastopne.
The TestNG HTML izvjeลกฤe ฤe potvrditi da su metode izvrลกene na temelju rastuฤe vrijednosti prioriteta.
Viลกe parametara
Osim "prioriteta", @Test ima joลก jedan parametar pod nazivom "alwaysRun" koji se moลพe postaviti samo na "true" ili "false". Za koriลกtenje dva ili viลกe parametara u jednoj napomeni, odvojite ih zarezom poput dolje prikazanog.
@Test(priority = 0, alwaysRun = true)
@BeforeTest i @AfterTest
| @Prije testa | metode pod ovom napomenom ฤe se izvrลกiti prije prvog testnog sluฤaja u TestNG file. |
| @AfterTest | metode pod ovom napomenom ฤe se izvrลกiti nakon svih testnih sluฤajeva u TestNG datoteka se izvrลกavaju. |
Razmotrite kod u nastavku.
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();
}
}
Primjenjujuฤi logiku predstavljenu tablicom i gornjim kodom, moลพemo predvidjeti da je redoslijed kojim ฤe se metode izvrลกavati sljedeฤi:
- 1st โ pokretanje preglednika()
- 2nd โ verifyHomepageTitle()
- 3rd โ terminateBrowser()
Poloลพaj blokova napomena moลพe se meฤusobno mijenjati bez utjecaja na kronoloลกki red kojim ฤe se izvrลกavati. Razumijmo se s a TestNG Primjer i pokuลกajte preurediti blokove napomena tako da vaลก kod izgleda sliฤno ovome u nastavku.
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);
}
}
Pokrenite gornji kod i primijetite to
@BeforeMethod i @AfterMethod
| @PrijeMetode | metode pod ovom napomenom ฤe se izvrลกiti prije svake metode u svakom ispitnom sluฤaju. |
| @Nakon metode | metode pod ovom napomenom ฤe se izvrลกiti nakon svake metode u svakom testnom sluฤaju. |
In Mercury Obilasci, pretpostavimo da ลพelimo provjeriti naslove ciljanih stranica dviju poveznica u nastavku.
Tok naลกeg testa bi bio:
- Idite na poฤetnu stranicu i provjerite njen naslov.
- Kliknite REGISTRIRAJ SE i provjerite naslov ciljne stranice.
- Vratite se na poฤetnu stranicu i provjerite ima li joลก uvijek toฤan naslov.
- Pritisnite PODRล KA i provjerite naslov ciljne stranice.
- Vratite se na poฤetnu stranicu i provjerite ima li joลก uvijek toฤan naslov.
Kรดd u nastavku ilustrira kako se @BeforeMethod i @AfterMethod koriste za uฤinkovito izvrลกavanje gore navedenog scenarija.
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();
}
}
Nakon izvoฤenja ovog testa, vaลก TestNG treba prijaviti sljedeฤi slijed.
Jednostavno reฤeno, @BeforeMethod treba sadrลพavati metode koje trebate pokrenuti prije svaki testni sluฤaj dok @AfterMethod treba sadrลพavati metode koje trebate pokrenuti nakon svaki test sluฤaj.
Saลพetak TestNG Biljeลกke
@BeforeSuite: Oznaฤena metoda pokrenut ฤe se prije izvoฤenja svih testova u ovom paketu.
@AfterSuite: Oznaฤena metoda pokrenut ฤe se nakon izvoฤenja svih testova u ovom paketu.
@Prije testa: Oznaฤena metoda ฤe se pokrenuti prije pokretanja bilo koje testne metode koja pripada klasama unutar oznake.
@AfterTest: Oznaฤena metoda ฤe se pokrenuti nakon ลกto se pokreฤu sve testne metode koje pripadaju klasama unutar oznake.
@Prije Grupa: Popis grupa koje ฤe ova metoda konfiguracije pokrenuti prije. Zajamฤeno je da ฤe se ova metoda pokrenuti neposredno prije nego ลกto se pozove prva testna metoda koja pripada bilo kojoj od ovih grupa.
@NakonGrupe: Popis grupa nakon kojih ฤe se pokrenuti ova metoda konfiguracije. Zajamฤeno je da ฤe se ova metoda pokrenuti ubrzo nakon ลกto se pozove zadnja testna metoda koja pripada bilo kojoj od ovih grupa.
@Prije Klase: Oznaฤena metoda ฤe se pokrenuti prije nego ลกto se pozove prva testna metoda u trenutnoj klasi.
@Nakon nastave: Oznaฤena metoda ฤe se pokrenuti nakon ลกto se pokrenu sve testne metode u trenutnoj klasi.
@PrijeMetode: Oznaฤena metoda pokrenut ฤe se prije svake ispitne metode.
@Nakon metode: Oznaฤena metoda pokrenut ฤe se nakon svake testne metode.
@Test: Oznaฤena metoda je dio testnog sluฤaja
Zakljuฤak
- TestNG je testiranje okvir koji je sposoban napraviti Selenium lakลกe razumljive testove i generiranje izvjeลกฤa koja su lako razumljiva.
- Glavne prednosti TestNG umjesto prema JUnit su sljedeฤi.
- Biljeลกke su lakลกe za koriลกtenje i razumijevanje.
- Testni sluฤajevi mogu se lakลกe grupirati.
- TestNG omoguฤuje nam stvaranje paralelni testovi.
- Prozor konzole u Eclipse generira tekstualni rezultat dok TestNG prozor je korisniji jer nam daje grafiฤki izlaz rezultata testa plus druge znaฤajne detalje kao ลกto su:
- Vrijeme izvoฤenja svake metode.
- Kronoloลกki redoslijed kojim su metode izvrลกene
- TestNG moลพe generirati izvjeลกฤa temeljena na HTML-u.
- Biljeลกke mogu koristiti parametre kao i obiฤno Java TestNG metode.
- TestNG Dataprovider je naฤin za prosljeฤivanje parametara u testnu funkciju koja prosljeฤuje razliฤite vrijednosti u testnim sluฤajevima u jednom izvrลกavanju.

































