Što je TestNG?
TestNG je okvir za automatizaciju u kojem NG stoji za "Sljedeću generaciju". TestNG je inspiriran JUnit-om koji koristi napomene (@). TestNG prevladava nedostatke JUnit-a i osmišljen je kako bi olakšao testiranje od kraja do kraja.
Korištenjem TestNG-a možete generirati odgovarajuće izvješće i lako možete saznati koliko je testnih slučajeva proslijeđeno, neuspješno i preskočeno. Neuspjele testne slučajeve možete izvršiti odvojeno.
Na primjer:
- Pretpostavimo da imate pet testnih slučajeva, za svaki testni slučaj napisana je jedna metoda (pretpostavimo da je program napisan glavnom metodom bez upotrebe testNG-a). Kada prvi put pokrenete ovaj program, tri metode se uspješno izvršavaju, a četvrta metoda nije uspjela. Zatim ispravite pogreške prisutne u četvrtoj metodi, sada želite pokrenuti samo četvrtu metodu, jer se prve tri metode ionako uspješno izvršavaju. To nije moguće bez upotrebe TestNG-a.
- TestNG u seleniju nudi opciju, tj. Testng-failed.xml datoteku u test-output mapi. Ako želite pokrenuti samo neuspješne test slučajeve, znači da ste pokrenuli ovu XML datoteku. Izvršit će samo neuspjele testove.
Pored gore navedenog koncepta, naučit ćete više o TestNG-u, kao što su prednosti TestNG-a, kako stvoriti metode ispitivanja pomoću @test bilježaka, kako pretvoriti ove klase u datoteku programskog paketa i izvršiti kroz eclipse kao i iz naredbenog retka .
U ovom vodiču za TestNG naučit ćete
- Zašto koristiti TestNG sa selenom?
- Prednosti TestNG-a u odnosu na JUnit
- Stvorite test slučaj koristeći TestNG napomene
- Kako stvoriti novu testNG test datoteku
- Kodiranje našeg prvog primjera TestNG test slučaja
- Pokretanje testa
- Provjera izvješća koja je stvorio TestNG
- Bilješke korištene u TestNG-u
- Višestruki test slučajevi
- Parametri
- Višestruki parametri
- Sažetak napomena o TestNG-u
Zašto koristiti TestNG sa selenom?
Zadani testovi selena ne generiraju odgovarajući format za rezultate ispitivanja. Korištenjem TestNG-a u selenu možemo generirati rezultate ispitivanja.
Većina korisnika selena koristi ovo više od Junita zbog njegovih prednosti. Postoji toliko mnogo značajki TestNG-a, ali mi ćemo se usredotočiti samo na najvažnije koje možemo koristiti u Seleniju. Slijede ključne značajke Selenium TestNG:
- Generirajte izvješće u ispravnom formatu, uključujući broj pokrenutih testnih slučajeva, broj položenih testnih slučajeva, broj neuspjelih testnih slučajeva i broj preskočenih testnih slučajeva.
- Višestruki testovi mogu se lakše grupirati pretvaranjem u datoteku testng.xml. U kojem možete odrediti prioritete koji testni slučaj treba prvo izvršiti.
- Isti testni slučaj može se izvršiti više puta bez petlji samo pomoću ključne riječi koja se naziva 'invocation count'.
- Koristeći testng, možete izvršiti više test slučajeva na više preglednika, tj. Unakrsno testiranje preglednika.
- Okvir TestNG može se jednostavno integrirati s alatima poput 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 prikazanog u nastavku.
- TestNG pojednostavljuje način kodiranja testova. U našim testovima više nije potrebna statička glavna metoda. Slijed radnji reguliran je lako razumljivim bilješkama koje ne zahtijevaju statičke metode.
- Neuhvaćene iznimke automatski obrađuje TestNG bez prevremenog završetka testa. Te se iznimke prijavljuju kao neuspjeli koraci u izvješću.
Prednosti TestNG-a u odnosu na JUnit
Tri su glavne prednosti TestNG-a u odnosu na JUnit:
- Bilješke je lakše razumjeti
- Test slučajevi se mogu lakše grupirati
- Moguća su paralelna ispitivanja
Bilješke u TestNG-u redovi su koda koji mogu kontrolirati kako će se izvršavati metoda ispod njih . Uvijek im prethodi simbol @. Vrlo rani i brzi testNG primjer je onaj prikazan u nastavku.
O bilješkama će biti riječi kasnije u odjeljku nazvanom "Napomene korištene u TestNG-u", tako da je sasvim u redu ako još uvijek ne razumijete gornji Primjer TestNG-a. Za sada je važno napomenuti da je napomene u TestNG-u lakše kodirati i razumjeti nego u JUnit-u.
Mogućnost paralelnog pokretanja testova dostupna je u TestNG-u, ali ne i u JUnit-u, pa je okvir TestNG poželjniji od testera koji koriste Selenium Grid.
Stvorite test slučaj koristeći TestNG napomene
Sada ćemo naučiti kako stvoriti svoj prvi testni slučaj pomoću TestNG napomena u selenu:
Prije nego što stvorimo testni slučaj, prvo bismo trebali postaviti novi TestNG projekt u Eclipseu i nazvati ga "FirstTestNGProject".
Postavljanje novog projekta TestNG
Korak 1: Kliknite Datoteka> Novo> Java projekt
Korak 2: Upišite "FirstTestNGProject" kao Naziv projekta, a zatim kliknite Dalje.
Korak 3: Sada ćemo početi uvoziti TestNG knjižnice u naš projekt. Kliknite karticu "Knjižnice", a zatim "Dodaj knjižnicu"
... "Korak 4: U dijaloškom okviru Dodaj knjižnicu odaberite "TestNG" i kliknite Dalje.
Korak 5: Kliknite Završi.
Trebali biste primijetiti da je TestNG uključen na popis knjižnica.
Korak 6: Sada ćemo dodati JAR datoteke koje sadrže Selenium API. Te se datoteke nalaze u upravljačkom programu Java klijenta koji smo preuzeli s http://docs.seleniumhq.org/download/ kada smo instalirali Selenium i Eclipse u prethodnim poglavljima.
Zatim dođite do mjesta na koje ste postavili datoteke Selenium JAR.
Nakon dodavanja vanjskih JAR-ova, vaš bi zaslon trebao izgledati ovako.
Korak 7: Kliknite Završi i provjeri je li naš FirstTestNGProject vidljiv u Eclipseovom prozoru Package Explorer.
Kako stvoriti novu testNG test datoteku
Sad kad smo završili s postavljanjem našeg projekta u ovom vodiču za TestNG, stvorimo novu datoteku TestNG.
Korak 1: Desnom tipkom miša kliknite mapu paketa "src", a zatim odaberite Novo> Ostalo
...Korak 2: Kliknite mapu TestNG i odaberite opciju "TestNG class". Kliknite Dalje.
Korak 3: U odgovarajuće okvire za unos unesite dolje navedene vrijednosti i kliknite Završi. Primijetite da smo našoj Java datoteci dali ime "FirstTestNGFile".
Eclipse bi trebao automatski stvoriti predložak za našu TestNG datoteku prikazanu u nastavku.
Kodiranje našeg prvog primjera TestNG test slučaja
Stvorimo sada svoj prvi test slučaj koji će provjeriti je li početna stranica Mercury Toursa točna. Upišite svoj kod kako je prikazano u donjem primjeru TestNG:
paket firsttestngpackage;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni pokretački program WebDriver;@Testjavna praznina verifyHomepageTitle () {System.out.println ("pokretanje preglednika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.get (baseUrl);String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (stvarni naslov, očekivani naslov);driver.close ();}}
Primijetite sljedeće.
- TestNG ne zahtijeva da imate glavnu () metodu.
- Metode ne moraju biti statične.
- Koristili smo napomenu @Test. @Test se koristi kako bi se utvrdilo da je metoda pod njim testni slučaj . U ovom smo slučaju postavili metodu verifyHomepageTitle () kao naš testni slučaj, pa smo iznad nje postavili napomenu '@Test'.
- Budući da koristimo napomene u TestNG-u, morali smo uvesti paket org.testng.annotations. *.
- Koristili smo klasu Assert. Klasa Assert koristi se za provođenje operacija provjere u TestNG-u . Da bismo ga koristili, moramo uvesti paket org.testng.Assert.
U jednoj datoteci TestNG možete imati više testnih slučajeva (dakle, više bilješki @Test). O tome će se detaljnije pozabaviti kasnije u odjeljku "Bilješke korištene u TestNG-u."
Pokretanje testa
Da biste pokrenuli test, jednostavno pokrenite datoteku u Eclipseu kao i obično. Eclipse će pružiti dva izlaza - jedan u prozoru Konzole, a drugi u prozoru TestNG Results.
Provjera izvješća koja je stvorio TestNG
Prozor konzole u Eclipseu daje tekstualno izvješće o rezultatima našeg test slučaja, dok prozor TestNG Results daje grafički.
Generiranje HTML izvješća
TestNG ima mogućnost generiranja izvještaja u HTML formatu.
Korak 1: Nakon pokretanja naše FirstTestNGFile koju smo stvorili u prethodnom odjeljku, desnom tipkom miša kliknite naziv projekta (FirstTestNGProject) u prozoru Project Explorer, a zatim kliknite opciju "Osvježi".
Korak 2: Primijetite da je stvorena mapa "test-output". Proširite ga i potražite datoteku index.html. Ova HTML datoteka izvještaj je o rezultatima najnovijeg probnog rada.
Korak 3: Dvaput kliknite tu datoteku index.html da biste je otvorili u ugrađenom web pregledniku Eclipse. Ovu stranicu možete osvježiti u bilo kojem trenutku nakon ponovnog pokretanja testa jednostavnim pritiskom na F5 baš kao u uobičajenim web preglednicima.
Bilješke korištene u TestNG-u
U prethodnom ste odjeljku upoznali se s napomenom @Test. Sada ćemo proučavati naprednije napomene i njihovu upotrebu.
Višestruki test slučajevi
U jednoj datoteci TestNG možemo koristiti više bilješki @Test. Prema zadanim postavkama, metode označene s @Test izvode se po abecedi. Pogledajte donji kod. Iako metode c_test, a_test i b_test nisu poredane po abecednom redu u kodu, one će se izvršiti kao takve.
Pokrenite ovaj kôd i na generiranoj stranici index.html kliknite "Kronološki prikaz".
Parametri
Ako želite da se metode izvršavaju u drugom redoslijedu, upotrijebite parametar "prioritet". Parametri su ključne riječi koje mijenjaju funkciju bilješke .
- Parametri zahtijevaju da im dodijelite vrijednost. To radite stavljajući pored njih , a zatim slijedi vrijednost.
- Parametri su zatvoreni u par zagrada koje se stavljaju odmah nakon napomene poput isječka koda prikazanog u nastavku.
TestNG će izvršiti napomenu @Test s vrijednošću najnižeg prioriteta do najveće. Nema potrebe da vaše prioritetne vrijednosti budu uzastopne.
Izvješće TestNG HTML potvrdit će da su metode izvršene na temelju rastuće vrijednosti prioriteta.
Višestruki parametri
Osim "prioriteta", @Test ima još jedan parametar pod nazivom "alwaysRun" koji se može postaviti samo na "true" ili "false". Da biste koristili dva ili više parametara u jednoj bilješci, odvojite ih zarezom kao što je prikazan u nastavku.
@Test (prioritet = 0, alwaysRun = true)
@BeforeTest i @AfterTest
@BeforeTest |
metode pod ovom bilješkom izvršit će se prije prvog testnog slučaja u datoteci TestNG . |
@AfterTest |
metode pod ovom bilješkom izvršit će se nakon izvršavanja svih test slučajeva u datoteci TestNG . |
Razmotrite donji kod.
paket firsttestngpackage;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni pokretački program WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("pokretanje preglednika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.get (baseUrl);}@Testjavna praznina verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (stvarni naslov, očekivani naslov);}@AfterTestjavna praznina terminateBrowser () {driver.close ();}}
Primjenjujući logiku prikazanu gornjom tablicom i kodom, možemo predvidjeti da je slijed kojim će se izvršavati metode:
- 1. st. - launchBrowser ()
- 2 nd - verifyHomepageTitle ()
- 3. termin - terminateBrowser ()
Postavljanje blokova bilješki može se međusobno mijenjati bez utjecaja na kronološki redoslijed kojim će se izvršavati . Razumijemo s primjerom TestNG i pokušajmo preurediti blokove bilješki tako da vaš kôd izgleda slično onome u nastavku.
paket firsttestngpackage;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni pokretački program WebDriver;@AfterTest // Jumbledjavna praznina terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("pokretanje preglednika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledjavna praznina verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (stvarni naslov, očekivani naslov);}}
Pokrenite gornji kod i primijetite to
@BeforeMethod i @AfterMethod
@BeforeMethod |
metode pod ovom bilješkom izvršit će se prije svake metode u svakom test slučaju . |
@AfterMethod |
metode pod ovom bilješkom izvršit će se nakon svake metode u svakom test slučaju. |
Pretpostavimo da u Mercury Toursu volimo provjeriti naslove ciljnih stranica dviju donjih poveznica.
Tijek našeg testa bio bi:
- Idite na početnu stranicu i provjerite njen naslov.
- Pritisnite REGISTRACIJA i provjerite naslov ciljne stranice.
- Vratite se na početnu stranicu i provjerite ima li i dalje točan naslov.
- Kliknite PODRŠKA i provjerite naslov ciljne stranice.
- Vratite se na početnu stranicu i provjerite ima li i dalje točan naslov.
Donji kod ilustrira kako se @BeforeMethod i @AfterMethod koriste za učinkovito izvršavanje gore spomenutog scenarija.
paket firsttestngpackage;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Testjavni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni pokretački program WebDriver;očekuje se javni niz = null;javni Stvarni = null;@BeforeTestpublic void launchBrowser () {System.out.println ("pokretanje preglednika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);upravljački program = novi FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodjavna praznina verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (stvarni naslov, očekivani naslov);}@Test (prioritet = 0)javni void register () {driver.findElement (By.linkText ("REGISTRACIJA")). click ();očekuje se = "Registriraj se: Mercury Tours";stvarni = driver.getTitle ();Assert.assertEquals (stvarno, očekivano);}@Test (prioritet = 1)javna void podrška () {driver.findElement (By.linkText ("PODRŠKA")). click ();očekuje se = "U izradi: Mercury Tours";stvarni = driver.getTitle ();Assert.assertEquals (stvarno, očekivano);}@AfterMethodjavna void goBackToHomepage () {driver.findElement (By.linkText ("Početna")). click ();}@AfterTestjavna praznina terminateBrowser () {driver.close ();}}
Nakon izvođenja ovog testa, vaš TestNG trebao bi prijaviti sljedeći redoslijed.
Jednostavno rečeno, @BeforeMethod bi trebao sadržavati metode koje trebate pokrenuti prije svakog test slučaja, dok bi @AfterMethod trebao sadržavati metode koje trebate pokrenuti nakon svakog test slučaja.
Sažetak napomena o TestNG-u
@BeforeSuite : Označena metoda pokrenut će se prije pokretanja svih testova u ovom paketu.
@AfterSuite : Označena metoda pokrenut će se nakon što se izvrše svi testovi u ovom paketu.
@BeforeTest : Označena metoda pokrenut će se prije pokretanja bilo koje test metode koja pripada razredima unutar oznake.
@AfterTest : Označena metoda pokrenut će se nakon pokretanja svih metoda ispitivanja koje pripadaju klasama unutar oznake.
@BeforeGroups : Popis grupa koje će se ova metoda konfiguracije pokretati prije. Zajamčeno je da će se ova metoda pokrenuti neposredno prije nego što se pozove prva metoda ispitivanja koja pripada bilo kojoj od ovih grupa.
@AfterGroups : Popis grupa nakon kojih će se izvoditi ova metoda konfiguracije. Ova će se metoda zajamčeno izvoditi ubrzo nakon pozivanja posljednje ispitne metode koja pripada bilo kojoj od ovih grupa.
@BeforeClass : Označena metoda pokrenut će se prije nego što se pozove prva metoda ispitivanja u trenutnoj klasi.
@AfterClass : Označena metoda pokrenut će se nakon pokretanja svih metoda ispitivanja u trenutnoj klasi.
@BeforeMethod : Označena metoda pokrenut će se prije svake ispitne metode.
@AfterMethod : Označena metoda pokrenut će se nakon svake ispitne metode.
@Test : Označena metoda dio je testnog slučaja
Zaključak
- TestNG je testni okvir koji je sposoban olakšati razumijevanje selenovih testova i generirati lako razumljiva izvješća.
- Glavne prednosti TestNG-a u odnosu na JUnit su sljedeće.
- Bilješke je lakše koristiti i razumjeti.
- Test slučajevi se mogu lakše grupirati.
- TestNG omogućuje nam stvaranje paralelnih testova.
- Prozor konzole u Eclipse generira tekst temeljen na rezultatu, dok je prozor TestNG 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 izvršenja metoda
- TestNG je sposoban generirati HTML izvješća.
- Bilješke mogu koristiti parametre baš kao i uobičajene metode Java TestNG.
- TestNG Dataprovider je način za prosljeđivanje parametara u test funkciju koja u jednom izvođenju prenosi različite vrijednosti u test slučajevima.