TestNG Udžbenik: U čemu su Annotations & Framework Selenium
Š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 s 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 nad JUnit
Tri su glavne prednosti TestNG nad 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 = "http://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 = "http://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 = "http://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 = "http://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 nad 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.