TestNG @Testprioritet i Selenium
TestNG är en Testning ramverk, som täcker olika typer av testdesigner som ett enhetstest, funktionstest, end-to-end-test, UI-test och integrationstest.
Du kan köra ett eller flera testfall i din Testng koda.
Om testprioritet inte definieras när du kör flera testfall, TestNG tilldelar alla @Test en prioritet som noll(0).
Nu, medan du springer; lägre prioriteringar kommer att planeras först.
Demo av TestNG kod utan prioritet
Låt oss ta ett scenario där sekvensering kommer att krävas för att klara alla testfall:
Scenario: Generera en kod där du måste utföra en Google-sökning med ett specifikt sökord, säg "Facebook". Kontrollera nu att webbläsarens titel har ändrats till "Facebook – Google Sök".
Obs: Varje steg som du kodar bör vara i separata metoder
Förfarande 1: Öppna webbläsaren säg Firefox (openBrowser())
Förfarande 2: Starta Google.com (launchGoogle())
Förfarande 3: Utför en sökning med "Facebook" (performSearchAndClick1stLink())
Förfarande 4: Verifiera Googles söksidas titel (FaceBookPageTitleVerification())
Kod för vårt scenario:
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); } }
Förklaring av koden
Som nämnts ovan har vi skapat 4 testfall för att utföra varje åtgärd i en oberoende metod.
- Den första metoden (openBrowser) tillstånd att initiera Firefox webbläsare.
- Den andra metoden (starta Google) anger att start av Google.com är i den initierade webbläsaren.
- Den tredje metoden (peformSeachAndClick1stLink)stater som utför en sökning i sökrutan (med xpath (“.//*[@title='Sök']”) med en sökterm som Facebook och
- Den fjärde och sista metoden (FaceBookPageTitleVerification) anger att klicka på sökikonen för Google och verifiera att webbläsarens titel har ändrats till Facebook – Google Sök.
Kör nu den här koden med testNG som visas i videon du hittar alla Testfall misslyckas. Orsaken till misslyckandet: eftersom det finns ett beroende av tidigare testfall för att godkännas, kommer endast det aktuella testfallet att godkännas.
I det här fallet,
- Den första metoden som exekveras är openBrowser(). Det godkändes eftersom det inte har något beroende.
- Den andra metoden som exekveras är FaceBookPageTitleVerification(); det misslyckas eftersom vi försöker klicka på sökknappen och verifiera webbläsarens titel.
- Du kan se att om sökaktiviteten inte bearbetas, hur kan något annat steg passeras. Därför är detta anledningen till att mina testfall misslyckas.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo av TestNG kod utan prioritet i alfabetisk ordning
Om vi inte nämner någon prioritet, kommer testng att exekvera @Test-metoderna baserat på alfabetisk ordning av deras metodnamn, oavsett var de är implementerade 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
Även om vi definierade metoderna på ett slumpmässigt sätt (c, b, a, e, d), exekverade testng metoderna baserat på deras metodnamn genom att överväga alfabetisk ordning och detsamma återspeglades också i utdata.
Hur man ställer in prioritet i TestNG
Som du har sett i det föregående exemplet att sekvensering krävs för att klara detta scenario, så kommer vi att modifiera den föregående kodbiten med Prioritetsparameter så att varje test ska köras mot den prioritet som tilldelats dem.
Nu som du kan se har vi tilldelat prioritet till varje testfall betyder att testfall kommer att exekveras det lägre prioritetsvärdet 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); } }
Förklaring av koden
Efter att ha tilldelat prioritet till varje testfall, kör ovanstående kod med testNG som visas i Video-2 som nämns nedan.
Här kan du se att testfall är prioriterade. Testfall med lägre prioritet exekveras först, dvs nu sker en sekventiell exekvering enligt prioritet i testfallen. Därför passerar alla testfall nu.
Notera konsolen av förmörkelse:
Produktion :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Nummer 0 har högsta prioritet (det kommer att köras först) och prioriteten fortsätter baserat på det givna numret, dvs 0 har högsta prioritet än 1. 1 har högsta prioritet än 2 och så vidare.
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
Här har vi angett prioriteringarna som 0,1,3,6,9. Så, metod med 0 som prioritet exekveras först och sedan metod med prioritet-1 och så vidare. Här kommer inte metodnamnet i alfabetisk ordning att beaktas eftersom vi angav prioriteringarna
Metoder med samma prioritet
Det kan finnas en chans att metoder kan ha samma prioritet. I dessa fall tar testng hänsyn till den alfabetiska ordningen för metodnamnen vars prioritet är samma.
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
Här exekveras 'e' och 'd' baserat på deras prioritetsvärden. Men metoderna 'a' och 'c' innehåller samma prioritetsvärde(6). Så här tar testng hänsyn till den alfabetiska ordningen för 'a' och 'c' och utför dem därefter.
Kombinera både prioriterade (har samma prioritet) och oprioriterade metoder
I det här fallet kommer vi att täcka två fall i en testklass.
- Metoder med samma prioritetsvärde.
- Mer än en oprioriterad metod.
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"); } }
Produktion:
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
Förklaring:
Första preferens: Icke-prioriterade metoder: 'c' och 'b': Baserat på alfabetisk ordning kördes 'b' först och sedan 'c'.
Andra preferens: Prioriterade metoder: 'a', 'e' och 'd': 'e' kördes först eftersom det hade högsta prioritet(0). Eftersom prioriteringen av 'a'- och 'd'-metoderna var samma, tog testng hänsyn till den alfabetiska ordningen för deras metodnamn. Så mellan dem utfördes 'a' först och sedan 'd'.
Skiftlägeskänslig i TestNG
Bara för din information finns det en standardsyntax för att definiera prioritet i testNG dvs @Test (prioritet=4), anta att du definierar det i någon annan syntax @Test (PRIORITET=1) då kommer din IDE att visa det som ett kompileringsfel. Se bilden nedan:
Slutsats
Som du har sett att om det finns ett krav på att köra en uppsättning testfall i en specifik sekvens så kan det enkelt göras med Budget använder testNG som ett körverktyg.
Denna handledning är möjlig tack vare bidrag från Ramandeep Singh och Rama Krishna Gadde