TestNG Tutorijal
โก Pametni saลพetak
TestNG je sljedeฤa generacija Java okvir za testiranje koji se spaja s Selenium za strukturiranu automatizaciju, bogato izvjeลกtavanje i paralelno izvrลกavanje. Ovaj vodiฤ pokriva kljuฤne napomene, postavljanje projekta u Eclipse, pisanje prvog testnog sluฤaja, HTML izvjeลกฤa i napredno koriลกtenje parametara.

ล to je TestNG?
TestNG je okvir za automatizirano testiranje gdje โNGโ oznaฤava โSljedeฤu generacijuโ. TestNG nadahnut je JUnit i koristi Java anotacije (@) za kontrolu tijeka testiranja. To prevladava JUnitranija ograniฤenja i osmiลกljen je kako bi end-to-end testiranje lakลกe.
Kontakt TestNG Moลพete generirati odgovarajuฤe izvjeลกฤe i odmah vidjeti koliko je testova proลกlo, neuspjeลกno ili preskoฤeno. Takoฤer moลพete ponovno pokrenuti samo neuspjeลกne sluฤajeve.
Na primjer:
- Pretpostavimo da imate pet testnih sluฤajeva, svaki sa svojom metodom, napisanih bez TestNGTri prolaze; ฤetvrti ne uspijeva. Nakon ลกto popravite ฤetvrti, ลพelite ponovno pokrenuti samo taj, buduฤi da su prve tri veฤ proลกle. To je teลกko uฤiniti s obiฤnim kodom metode main().
- TestNG osigurava
testng-failed.xmlDatoteka utest-outputmapa. Pokretanje tog XML-a ponovno izvrลกava samo neuspjeลกne sluฤajeve.
Osim toga, nauฤit ฤete prednosti TestNG, kako pisati metode testiranja s @Test anotacijama i kako pretvoriti svoje klase u skup testova koji se izvrลกava iz Eclipse ili naredbeni redak.
Zaลกto koristiti TestNG sa Selenium?
Po defaultu, Selenium testovi ne daju lijepo formatirane rezultate. S TestNG Kada je ukljuฤen, program za testiranje generira strukturirano izvjeลกฤe koje moลพete podijeliti s timom.
most Selenium korisnici preferiraju TestNG umjesto prema JUnit zbog ลกireg skupa znaฤajki. Kljuฤne znaฤajke za Selenium je:
- Izvjeลกฤa koja ukljuฤuju broj pokrenutih, uspjeลกnih, neuspjeลกnih i preskoฤenih testnih sluฤajeva.
- Lako gruping testnih sluฤajeva putem
testng.xmldatoteka s prioritetima izvrลกavanja. - Ponovite test viลกe puta bez petlji koristeฤi
invocationCount. - Pokrenite viลกe testova na viลกe preglednika โ unakrsnotestiranje preglednika Podrลกka.
- Glatka integracija s Mavenom, Jenkinsi ostali CI alati.
- Readable anotacije โ na primjer, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver nema izvorno izvjeลกtavanje; TestNG popunjava tu prazninu ฤistim HTML izvjeลกฤem poput onog ispod.
- TestNG pojednostavljuje testni kod. Viลกe vam nije potrebna statiฤka glavna metoda; anotacije odluฤuju ลกto se izvrลกava i kada.
- Neuhvaฤene iznimke se elegantno obraฤuju od strane TestNGPrijavljeni su kao neuspjeli koraci bez prekidanja cijelog izvoฤenja.
Prednosti TestNG umjesto prema JUnit
TestNG nudi tri glavne prednosti u odnosu na JUnit:
- Anotacije su lakลกe za razumjeti i koristiti.
- Testni sluฤajevi mogu se grupirati i prioritizirati uz manje napora.
- Paralelno izvrลกavanje testova podrลพano je odmah po instalaciji.
ล to je anotacija u TestNG?
Biljeลกke u TestNG su linije koda smjeลกtene iznad metode kako bi se kontroliralo kako se ona izvrลกava. Uvijek poฤinju simbolom @. Jednostavan primjer prikazan je u nastavku.
Anotacije su detaljno obraฤene u odjeljku "Napomene koriลกtene u TestNG" kasnije u ovom vodiฤu, pa gornji primjer sluลพi samo za postavljanje oฤekivanja. TestNG Anotacije je lakลกe kodirati i ฤitati nego JUnit ekvivalenti, i bitni su pri izvoฤenju testova na Selenium reลกetka gdje je paralelno izvrลกavanje vaลพno.
Kako napisati testne sluฤajeve TestNG
Pisanje a TestNG Testni sluฤaj se odvija u tri koraka:
- Napiลกite svoju poslovnu logiku i mjesto TestNG napomene iznad svake metode.
- Dodajte metapodatke kao ลกto su naziv klase, naziv grupe i naziv paketa.
- Pokreni TestNG klasu iz vaลกeg IDE-a ili naredbenog retka.
Izradite testni sluฤaj pomoฤu TestNG Biljeลกke
Sada ฤemo kreirati naลก prvi testni sluฤaj koristeฤi TestNG napomene u SeleniumPrije pisanja testa, postavite novi TestNG projekt u Eclipse i nazovite ga ImeTestNGProjekt.
Postavljanje novog TestNG Projekt
Korak 1) Kliknite Datoteka > Novo > Java Projekt.
Korak 2) uฤi ImeTestNGProjekt kao naziv projekta i kliknite Sljedeฤi.
Korak 3) Uvezite TestNG knjiลพnice. Kliknite na Knjiลพnice tabulator, a zatim Dodaj knjiลพnicuโฆ.
Korak 4) u Dodaj biblioteku dijalog, odaberite TestNG i kliknite Sljedeฤi.
Korak 5) Kliknite zavrลกiti.
TestNG sada bi se trebao pojaviti na popisu Biblioteka.
Korak 6) Dodajte JAR datoteke koje sadrลพe Selenium API. To dolazi iz Java upravljaฤki program klijenta preuzet s selenium.dev/preuzimanja.
Idite do mape u kojoj se nalazi Selenium JAR-ovi se pohranjuju.
Nakon dodavanja vanjskih JAR-ova, ekran bi trebao izgledati ovako.
Korak 7) Kliknite zavrลกiti. Novo ImeTestNGProjekt pojavljuje se u Pregledniku paketa.
Kako stvoriti novi TestNG Testna datoteka
Kada je projekt spreman, stvorite novi TestNG file.
Korak 1) Desnom tipkom miลกa kliknite src mapu i odaberite Novo > Ostaloโฆ.
Korak 2) Poveฤaj TestNG mapa, odaberite TestNG razred, i kliknite Sljedeฤi.
Korak 3) Unesite vrijednosti prikazane u nastavku i kliknite zavrลกiti, Java datoteka je nazvana ImeTestNGfile.
Korak 4) Eclipse generira TestNG predloลพak prikazan dolje.
Kodiranje vaลกeg prvog TestNG Testni sluฤaj
Stvorite prvi testni sluฤaj koji potvrฤuje naslov Mercury Poฤetna stranica Tours.
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();
}
}
Stvari koje treba primijetiti:
- TestNG ne treba
main()metoda. - Metode ne moraju biti statiฤne.
- The @Test oznake biljeลกki
verifyHomepageTitle()kao testni sluฤaj. - Anotacije su dostupne u
org.testng.annotations.*paket. - The tvrditi razred iz
org.testng.Assertpokreฤe provjere.
Moลพete imati viลกe @Test anotacija u jednom TestNG datoteku. To pokrivamo u "Napomene koriลกtene u TestNG" odjeljak.
Izvoฤenje testa
Desnom tipkom miลกa kliknite datoteku i pokrenite je kao TestNG Test. Eclipse proizvodi dva izlaza - tekstualni rezultat u prozoru konzole i grafiฤki rezultat u TestNG Prozor s rezultatima.
Provjera izvjeลกฤa Izradio TestNG
Prozor konzole pruลพa tekstualni saลพetak dok TestNG Prozor s rezultatima prikazuje grafiฤki prikaz.
Generiranje HTML izvjeลกฤa
TestNG takoฤer moลพe generirati potpuna HTML izvjeลกฤa.
Korak 1) Nakon trฤanja ImeTestNGfile, desnom tipkom miลกa kliknite projekt i odaberite Osvjeลพiti.
Korak 2) A testni izlaz pojavljuje se mapa. Proลกirite je i pronaฤite index.html โ HTML izvjeลกฤe za najnovije pokretanje.
Korak 3) Double-klik index.html da ga otvorim iznutra Eclipse's preglednik. Pritisnite F5 za osvjeลพavanje nakon buduฤih pokretanja.
Koriลกtene napomene u TestNG
Veฤ ste vidjeli anotaciju @Test. Ostatak ovog odjeljka pokriva najkorisnije napredne anotacije.
Viลกe testnih sluฤajeva
Jedan sam TestNG Datoteka moลพe sadrลพavati viลกe @Test anotacija. Prema zadanim postavkama, metode oznaฤene s @Test izvrลกavaju se abecednim redom. U donjem kodu, metode c_test, a_testi b_test prikazuju se abecednim redom bez obzira na redoslijed izvora.
Pokrenite kod i otvorite index.html, Klik Kronoloลกki prikaz.
Parametri
Za poniลกtavanje zadanog redoslijeda upotrijebite priority parametar. Parametri su kljuฤne rijeฤi koje mijenjaju ponaลกanje anotacije.
- Dodijelite vrijednost pomoฤu
=. - Parametri se stavljaju u zagrade odmah nakon anotacije, kao ลกto je prikazano dolje.
TestNG izvrลกava @Test anotacije od najniลพe do najviลกe vrijednosti prioriteta. Brojevi prioriteta ne moraju biti uzastopni.
HTML izvjeลกฤe potvrฤuje da su se metode izvrลกavale u rastuฤem redoslijedu prioriteta.
Viลกe parametara
Osim toga priority, @Test prihvaฤa alwaysRun parametar (istina ili laลพ). Za koriลกtenje dva ili viลกe parametara u jednoj anotaciji, odvojite ih zarezom:
@Test(priority = 0, alwaysRun = true)
@BeforeTest i @AfterTest
| @Prije testa | Metode pod ovom anotacijom se izvrลกavaju prije prvog testnog sluฤaja u TestNG file. |
| @AfterTest | Metode pod ovom anotacijom se izvrลกavaju nakon svih testnih sluฤajeva u TestNG zavrลกetak datoteke. |
Razmotrite kod u nastavku.
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();
}
}
Iz tablice i koda moลพemo predvidjeti da ฤe slijed biti:
- 1. โ
launchBrowser() - 2. โ
verifyHomepageTitle() - 3. โ
terminateBrowser()
Poloลพaj blokova anotacija u izvornoj datoteci ne utjeฤe na njihov redoslijed izvrลกavanja. Pokuลกajte premjestiti metode kao ลกto je prikazano u nastavku.
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);
}
}
Pokrenite kod i provjerite rezultat.
@BeforeMethod i @AfterMethod
| @PrijeMetode | Metode pod ovom anotacijom se izvrลกavaju prije svake metode ispitivanja. |
| @Nakon metode | Metode pod ovom anotacijom se izvrลกavaju nakon svake metode ispitivanja. |
In Mercury Tours, pretpostavimo da ลพelimo provjeriti naslove dviju ciljnih stranica do kojih se dolazi s poฤetne stranice.
Tijek testa je sljedeฤi:
- Otvorite poฤetnu stranicu i provjerite njezin naslov.
- Kliknite REGISTRIRAJ SE i provjerite naslov ciljne stranice.
- Vratite se na poฤetnu stranicu i provjerite naslov.
- Pritisnite PODRล KA i provjerite naslov ciljne stranice.
- Vratite se na poฤetnu stranicu i ponovno provjerite naslov.
Donji kod pokazuje kako @BeforeMethod i @AfterMethod obraฤuju ponovljene korake.
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();
}
}
Nakon pokretanja testa, TestNG izvjeลกtava o donjem slijedu.
Ukratko: postavite korake postavljanja unutra @PrijeMetode i ฤiลกฤenje ili resetiranje navigacije unutra @Nakon metode pa svaki testni sluฤaj poฤinje i zavrลกava u poznatom stanju.
Saลพetak TestNG Biljeลกke
- @BeforeSuite: pokreฤe se prije svih testova u paketu.
- @AfterSuite: pokreฤe se nakon svih testova u paketu.
- @PrijeTestiranja: izvrลกava se prije bilo koje testne metode koja pripada klasama unutar oznaฤiti.
- @Nakon testa: izvrลกava se nakon svih testnih metoda koje pripadaju klasama unutar oznaฤiti.
- @PrijeGrupa: izvodi se neposredno prije prve metode ispitivanja koja pripada bilo kojoj navedenoj skupini.
- @AfterGroups: pokreฤe se ubrzo nakon posljednje metode ispitivanja koja pripada bilo kojoj navedenoj skupini.
- @PrijeRada: izvrลกava se prije prve testne metode u trenutnoj klasi.
- @Nakon nastave: izvrลกava se nakon svih testnih metoda u trenutnoj klasi.
- @PrijeMetode: izvodi se prije svake metode ispitivanja.
- @NakonMetode: izvodi se nakon svake metode ispitivanja.
- @Test: oznaฤava metodu kao testni sluฤaj.

































