TestNG @Testprioritet i Selenium
TestNG er en Test ramme, der dækker forskellige typer testdesign som en enhedstest, funktionstest, ende-til-ende-test, UI-test og integrationstest.
Du kan køre en enkelt eller flere testcases i din Testng kode.
Hvis testprioritet ikke er defineret, mens du kører flere testcases, TestNG tildeler alle @Test en prioritet som nul(0).
Nu, mens du løber; lavere prioriteter vil blive planlagt først.
Demo af TestNG kode uden prioritet
Lad os tage et scenario, hvor sekventering vil være påkrævet for at bestå alle testcases:
Scenario: Generer en kode, hvor du skal udføre en Google-søgning med et specifikt søgeord, sig "Facebook". Bekræft nu, at browsertitlen er ændret til "Facebook - Google Søgning".
Bemærk: Hvert trin, som du koder, skal være i separate metoder
Metode 1: Åbn Browser sig Firefox (openBrowser())
Metode 2: Start Google.com (launchGoogle())
Metode 3: Udfør en søgning ved hjælp af "Facebook" (performSearchAndClick1stLink())
Metode 4: Bekræft Google-søgesidetitel (FaceBookPageTitleVerification())
Kode til vores scenarie:
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); } }
Forklaring af kode
Som nævnt ovenfor har vi lavet 4 testcases til at udføre hver handling i en uafhængig metode.
- Den første metode (åben browser) tilstande for at initialisere Firefox browser.
- Den anden metode (start Google) angiver, at start af Google.com er i den initialiserede browser.
- Den tredje metode (peformSeachAndClick1stLink)stater, der udfører en søgning i søgefeltet (med xpath (".//*[@title='Søg']") med et søgeord som Facebook og
- Den fjerde og sidste metode (FaceBookPageTitleVerification) angiver, at du klikker på Googles søgeikon og bekræfter, at browsertitlen er blevet ændret til Facebook – Google-søgning.
Kør nu denne kode ved hjælp af testNG som vist i videoen, du vil finde alle Test sag fejler. Årsagen til fejlen: da der er en afhængighed af tidligere testcase for at bestå, vil kun den aktuelle kørende testcase blive bestået.
I dette tilfælde,
- Den første metode, der udføres, er openBrowser(). Det blev bestået, fordi det ikke har nogen afhængighed.
- Den anden udførte metode er FaceBookPageTitleVerification(); det mislykkes, fordi vi forsøger at klikke på søgeknappen og bekræfte browsertitlen.
- Du kan se, at hvis søgeaktivitet ikke behandles, hvordan ethvert andet trin kan beståes. Derfor er dette grunden til, at mine testsager fejler.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo af TestNG kode uden prioritet i alfabetisk rækkefølge
Hvis vi ikke nævner nogen prioritet, vil testng udføre @Test-metoderne baseret på alfabetisk rækkefølge af deres metodenavne, uanset deres implementeringssted i koden.
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"); } }
Produktion
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
Selvom vi definerede metoderne på en tilfældig måde (c, b, a, e, d), udførte testng metoderne baseret på deres metodenavne ved at overveje alfabetisk rækkefølge, og det samme blev også afspejlet i outputtet.
Sådan indstilles prioritet i TestNG
Som du har set i det foregående eksempel, krævede sekventering for at bestå dette scenarie, så vi vil ændre det forrige stykke kode med Prioritetsparameter så hver test skal køre imod den prioritet, de er tildelt.
Nu, som du kan se, har vi tildelt prioritet til hver testcase, hvilket betyder, at testcase vil den lavere prioritetsværdi blive udført først.
Prioritet i testNG i aktion
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); } }
Forklaring af kode
Efter at have tildelt prioritet til hver testcase, kør ovenstående kode ved hjælp af testNG som vist i Video-2 nævnt nedenfor.
Her kan du se, at testcases prioriteres. Testcase med lavere prioritet udføres først, dvs. nu er der en sekventiel udførelse i henhold til prioritet i testcaserne. Derfor består alle testsager nu.
Bemærk formørkelseskonsollen:
Produktion :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Nummer 0 har den højeste prioritet (det vil blive udført først), og prioriteten fortsætter baseret på det givne tal, dvs. 0 har den højeste prioritet end 1. 1 har den højeste prioritet end 2 og så videre.
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"); } }
Produktion
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
Her har vi givet prioriteterne som 0,1,3,6,9. Så metode med 0 som prioritet udføres først og derefter metode med prioritet-1 og så videre. Her vil metodenavnet i alfabetisk rækkefølge ikke blive taget i betragtning, da vi har givet prioriteterne
Metoder med samme prioritet
Der kan være en chance for, at metoder kan have samme prioritet. I disse tilfælde overvejer testng den alfabetiske rækkefølge af metodenavnene, hvis prioritet er den samme.
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"); } }
Produktion
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
Her udføres 'e' og 'd' baseret på deres prioritetsværdier. Men metoderne 'a' og 'c' indeholder den samme prioritetsværdi(6). Så her overvejer testng den alfabetiske rækkefølge af 'a' og 'c' og udfører dem i overensstemmelse hermed.
Kombinerer både prioriterede (har samme prioritet) og ikke-prioriterede metoder
I dette tilfælde vil vi dække to tilfælde i en testng-klasse.
- Metoder med samme prioritetsværdi.
- Mere end én ikke-prioriteret metode.
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"); } }
Output:
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
Forklaring:
Første præference: Ikke-prioriterede metoder: 'c' og 'b': Baseret på alfabetisk rækkefølge blev 'b' udført først og derefter 'c'.
Anden præference: Prioriterede metoder: 'a', 'e' og 'd': 'e' blev udført først, da det havde højeste prioritet(0). Da prioriteringen af 'a' og 'd' metoder var den samme, overvejede testng den alfabetiske rækkefølge af deres metodenavne. Så mellem dem blev 'a' henrettet først og derefter 'd'.
Der skelnes mellem store og små bogstaver i TestNG
Bare til din information er der en standardsyntaks til at definere prioritet i testNG dvs @Test (prioritet=4), antag at du definerer det i en anden syntaks siger @Test (PRIORITET=1) så vil din IDE vise det som en kompileringsfejl. Se billedet nedenfor:
Konklusion
Som du har set, at hvis der er et krav om at køre et sæt test-case i en bestemt rækkefølge, kan det nemt gøres ved at bruge Prioritet ved at bruge testNG som et kørselsværktøj.
Denne tutorial er gjort mulig på grund af bidrag fra Ramandeep Singh og Rama Krishna Gadde