TestNG @Test Prioritet u Selenium
TestNG je Ispitivanje okvir koji pokriva različite vrste testnih dizajna kao što su jedinični test, funkcionalni test, end-to-end test, UI test i integracijski test.
Možete pokrenuti jedan ili više testnih slučajeva u svom Testng kodirati.
Ako prioritet testa nije definiran tijekom izvođenja više testnih slučajeva, TestNG dodjeljuje svim @Test prioritet kao nula(0).
Sada, dok trčite; niži prioriteti bit će prvi raspoređeni.
Demo od TestNG kod bez prioriteta
Uzmimo scenarij u kojem će biti potrebno sekvenciranje kako bi se prošli svi testni slučajevi:
Scenarij: Generirajte kod gdje se od vas traži da izvršite Google pretraživanje s određenom ključnom riječi, recimo "Facebook". Sada provjerite je li naslov preglednika promijenjen u "Facebook – Google Search".
Napomena: Svaki korak koji kodirate trebao bi biti u zasebnim metodama
Metoda 1: Otvorite preglednik recimo Firefox (openBrowser())
Metoda 2: Pokrenite Google.com (launchGoogle())
Metoda 3: Izvršite pretraživanje koristeći “Facebook” (performSearchAndClick1stLink())
Metoda 4: Provjerite naslov Google stranice za pretraživanje (FaceBookPageTitleVerification())
Kod za naš scenarij:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Objašnjenje koda
Kao što je gore spomenuto, stvorili smo 4 testna slučaja za izvođenje svake radnje u neovisnim metodama.
- Prva metoda (otvoreni preglednik) stanja za inicijalizaciju Firefox preglednik.
- Druga metoda (pokreni Google) navodi da je pokretanje Google.com u inicijaliziranom pregledniku.
- Treća metoda (peformSeachAndClick1stLink)stanja koja izvode pretraživanje u okviru za pretraživanje (s xpath (“.//*[@title='Traži']”) s pojmom za pretraživanje kao Facebook i
- Četvrta i posljednja metoda (FaceBookPageTitleVerification) navodi da kliknete ikonu pretraživanja Googlea i potvrdite da je naslov preglednika promijenjen u Facebook – Google pretraga.
Sada pokrenite ovaj kod koristeći testNG kao što je prikazano u videu i pronaći ćete sve Testni slučaj ne uspijevaju. Razlog neuspjeha: kako postoji ovisnost o prolasku prethodnog testnog slučaja, proći će se samo trenutni testni slučaj.
U ovom slučaju,
- Prva metoda koja se izvodi je openBrowser(). Prošlo ga je jer nema nikakve ovisnosti.
- Druga izvedena metoda je FaceBookPageTitleVerification(); ne uspijeva jer pokušavamo kliknuti gumb za pretraživanje i provjera naslova preglednika.
- Možete vidjeti kako se bilo koji drugi korak može proći ako se aktivnost pretraživanja ne obrađuje. Stoga je to razlog zašto moji testni slučajevi ne uspijevaju.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo od TestNG kod bez prioriteta u abecednom redu
Ako ne spomenemo nikakav prioritet, testng će izvršiti metode @Test na temelju abecednog reda njihovih naziva metoda bez obzira na mjesto implementacije u kodu.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
Izlaz
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Iako smo metode definirali na slučajan način (c, b, a, e, d), testng je izvršio metode na temelju njihovih naziva metoda uzimajući u obzir abecedni red, a isto se odrazilo i na izlaz.
Kako postaviti Prioritet u TestNG
Kao što ste vidjeli u prethodnom primjeru da je sekvenciranje potrebno da bi se prošao ovaj scenarij, tako da ćemo modificirati prethodni dio koda s Parametar prioriteta tako da se svaki test treba izvoditi prema prioritetu koji im je dodijeljen.
Sada, kao što vidite, dodijelili smo Prioritet svakom testu, što znači da će testni slučaj s nižom prioritetnom vrijednošću biti prvi izvršen.
Prioritet u testNG na djelu
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Objašnjenje koda
Nakon dodjele prioriteta svakom testu, pokrenite gornji kod koristeći testNG kao što je prikazano u Video-2 navedenom u nastavku.
Ovdje možete vidjeti da su testni slučajevi prioritetni. Testni slučajevi nižeg prioriteta izvršavaju se prvi, tj. sada postoji sekvencijalno izvršavanje prema prioritetu u testnim slučajevima. Dakle, svi testni slučajevi sada prolaze.
Obratite pažnju na konzolu eclipse:
Izlaz :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Broj 0 ima najveći prioritet (prvo će se izvršiti), a prioritet se nastavlja na temelju zadanog broja, tj. 0 ima najveći prioritet od 1. 1 ima najveći prioritet od 2 i tako dalje.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Izlaz
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Ovdje smo dali prioritete kao 0,1,3,6,9. Dakle, prvo se izvršava metoda s prioritetom 0, a zatim metoda s prioritetom 1 i tako dalje. Ovdje se naziv metode abecednim redoslijedom neće uzeti u obzir jer smo dali prioritete
Metode s istim prioritetom
Možda postoji mogućnost da metode imaju isti prioritet. U tim slučajevima testng uzima u obzir abecedni red naziva metoda čiji je prioritet isti.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Izlaz
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Ovdje se 'e' i 'd' izvršavaju na temelju njihovih vrijednosti prioriteta. Ali metode 'a' i 'c' sadrže istu vrijednost prioriteta(6). Dakle, ovdje testng uzima u obzir abecedni red 'a' i 'c' i izvršava ih u skladu s tim.
Kombinacija prioritetnih (s istim prioritetom) i neprioritetnih metoda
U ovom slučaju, pokrit ćemo dva slučaja u jednoj testng klasi.
- Metode imaju istu vrijednost prioriteta.
- Više od jedne metode bez prioriteta.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Izlaz:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Objašnjenje:
Prva preferencija: Metode bez prioriteta: 'c' i 'b': Na temelju abecednog reda prvo je izvršeno 'b', a zatim 'c'.
Druga preferencija: Metode s prioritetom: 'a', 'e' i 'd': 'e' je izvršena prva jer je imala najviši prioritet (0). Kako je prioritet metoda 'a' i 'd' bio isti, testng je uzeo u obzir abecedni red naziva njihovih metoda. Dakle, između njih je prvo izvršeno 'a', a zatim 'd'.
Razlikuje velika i mala slova TestNG
Samo za vašu informaciju postoji standardna sintaksa za definiranje prioriteta u testNG-u, tj @Test (prioritet=4), pretpostavimo da ga definirate u nekoj drugoj sintaksi, recimo @Test (PRIORITY=1) tada će vaš IDE to prikazati kao pogrešku kompilacije. Pogledajte sliku ispod:
Zaključak
Kao što ste vidjeli, ako postoji zahtjev za izvođenjem skupa testnih slučajeva u određenom nizu, to se može jednostavno učiniti korištenjem Prioritet koristeći testNG kao alat za pokretanje.
Ovaj vodič je omogućen zahvaljujući doprinosima Ramandeepa Singha i Rame Krishna Gadde