TestNG är ett testramverk som täcker olika typer av testkonstruktioner som ett enhetstest, funktionstest, slut-till-slut-test, UI-test och integrationstest.
Du kan köra en eller flera testfall i din Testng-kod.
Om testprioritet inte är definierad medan flera testfall körs, tilldelar TestNG alla @Test en prioritet som noll (0).
Nu, medan du kör; lägre prioriteringar kommer att planeras först.
I den här handledningen lär du dig -
- Demo av TestNG-kod utan prioritet
- Demo av TestNG-kod utan prioritet i alfabetisk ordning
- Hur man ställer in prioritet i TestNG
- Metoder med samma prioritet
- Kombinera både prioriterade (med samma prioritet) och icke-prioriterade metoder
Demo av TestNG-kod utan prioritet
Låt oss ta ett scenario där sekvensering krävs för att klara alla testfall:
Scenario: Skapa en kod där du måste utföra en Google-sökning med ett specifikt nyckelord, säg "Facebook". Kontrollera nu att webbläsarens titel har ändrats till "Facebook - Google Search".
Obs! Varje steg som du kodar ska vara i separata metoder
Metod 1 : Öppna webbläsare säg Firefox (openBrowser ())
Metod 2 : Starta Google.com (launchGoogle ())
Metod 3 : Utför en sökning med "Facebook" (performSearchAndClick1stLink ())
Metod 4 : Verifiera Googles söksidans titel (FaceBookPageTitleVerification ())
Kod för vårt scenario :
importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations.Test;offentlig klass Priority_In_testNG {WebDriver-drivrutin;// Metod 1: Öppna Brower säger Firefox@Testaoffentligt ogiltigt openBrowser () {drivrutin = ny FirefoxDriver ();}// Metod 2: Starta Google.com@Testapublic void launchGoogle () {driver.get ("http://www.google.co.in");}// Metod 3: Utför en sökning med "Facebook"@Testapublic void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//* **@ title = 'Sök']")). sendKeys ("Facebook");}// Metod 4: Verifiera titeln på Googles söksida.@Testaoffentligt ogiltigt FaceBookPageTitleVerification () kastar undantag {driver.findElement (By.xpath (".//* ** @ value = 'Sök']")). klicka ();Tråd. Sömn (3000);Assert.assertEquals (driver.getTitle (). Innehåller ("Facebook - Google-sökning"), sant);}}
Förklaring av kod
Som nämnts ovan har vi skapat fyra testfall för att utföra varje åtgärd i oberoende metoder.
- Den första metoden (openBrowser) anger att initialisera Firefox-webbläsaren.
- Den andra metoden (launchGoogle) säger att starta Google.com är i den initialiserade webbläsaren.
- Den tredje metoden (peformSeachAndClick1stLink) anger att en sökning utförs i sökrutan (med xpath (".//*(@title='Search ']") med en sökterm som Facebook och
- Den fjärde och sista metoden (FaceBookPageTitleVerification) säger att klicka på Googles sökikon 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 som misslyckas. Orsaken till misslyckandet: eftersom det finns ett beroende av tidigare testfall att godkännas kommer endast det aktuella körande testfallet att skickas.
I detta fall,
- Den första metoden som körs är openBrowser (). Det passerade eftersom det inte har något beroende.
- Den andra metoden som körs ä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 så kan alla andra steg klara. Detta är därför anledningen till att mina testfall misslyckas.
GÅNG: openBrowserFAILED: FaceBookPageTitleVerificationFAILED: launchGoogleFAILED: peformSeachAndClick1stLink
Demo av TestNG-kod utan prioritet i alfabetisk ordning
Om vi inte nämner någon prioritet kommer testng att utföra @Test-metoderna baserat på alfabetisk ordning på deras metodnamn oavsett deras implementeringsplats i koden.
paketet com.guru.testngannotations;importera org.testng.annotations.Test;offentlig klass TestNG_Priority_Annotations {@Testaoffentligt ogiltigt c_method () {System.out.println ("Jag är i metod C");}@Testaoffentligt ogiltigt b_method () {System.out.println ("Jag är i metod B");}@Testaoffentligt ogiltigt a_method () {System.out.println ("Jag är i metod A");}@Testaoffentligt ogiltigt e_method () {System.out.println ("Jag är i metod E");}@Testaoffentligt ogiltigt d_method () {System.out.println ("Jag är i metod D");}}
Produktion
Jag är i metod A.Jag är i metod BJag är i metod CJag är i metod DJag är i metod E
Även om vi definierade metoderna på ett slumpmässigt sätt (c, b, a, e, d), körde testng metoderna baserat på deras metodnamn genom att beakta alfabetisk ordning och detsamma återspeglades också i utdata.
Hur man ställer in prioritet i TestNG
Som du har sett i föregående exempel att sekvensering krävs för att klara detta scenario, så kommer vi att ändra den tidigare kodkoden med Priority Parameter så att varje test ska gå mot den prioritet som tilldelats dem.
Nu som du kan se har vi tilldelat prioritet till varje testfall innebär att testfall kommer det lägre prioritetsvärdet att köras först.
Prioritet i testNG i aktion
importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations.Test;offentlig klass Priority_In_testNG {WebDriver-drivrutin;// Metod 1: Öppna webbläsaren säger Firefox@Test (prioritet = 1)offentligt ogiltigt openBrowser () {drivrutin = ny FirefoxDriver ();}// Metod 2: Starta Google.com@Test (prioritet = 2)public void launchGoogle () {driver.get ("http://www.google.co.in");}// Metod 3: Utför en sökning med "Facebook"@Test (prioritet = 3)public void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//* **@ title = 'Sök']")). sendKeys ("Facebook");}// Metod 4: Verifiera titeln på Googles söksida.@Test (prioritet = 4)offentligt ogiltigt FaceBookPageTitleVerification () kastar undantag {driver.findElement (By.xpath (".//* ** @ value = 'Sök']")). klicka ();Tråd. Sömn (3000);Assert.assertEquals (driver.getTitle (). Innehåller ("Facebook - Google-sökning"), sant);}}
Förklaring av kod
Efter att ha tilldelat varje testfas prioritet, kör ovanstående kod med testNG som visas i Video-2 som nämns nedan.
Här kan du se att testfall prioriteras. Testfall med lägre prioritet exekveras först, dvs. nu finns det en sekventiell körning enligt prioritet i testfallet. Därför passerar alla testfall nu.
Observera konsol för förmörkelse:
Utgång :
GÅNG: openBrowserPASSAD: launchGoogleGÅNG: peformSearchAndClick1stLinkPASSAD: FaceBookPageTitleVerification
Nummer 0 har högsta prioritet (det kommer att köras först) och prioriteten fortsätter baserat på det angivna numret, dvs 0 har högsta prioritet än 1. 1 har högsta prioritet än 2 och så vidare.
paketet com.guru.testngannotations;importera org.testng.annotations.Test;offentlig klass TestNG_Priority_Annotations {@Test (prioritet = 6)offentligt ogiltigt c_method () {System.out.println ("Jag är i metod C");}@Test (prioritet = 9)offentligt ogiltigt b_method () {System.out.println ("Jag är i metod B");}@Test (prioritet = 1)offentligt ogiltigt a_method () {System.out.println ("Jag är i metod A");}@Test (prioritet = 0)offentligt ogiltigt e_method () {System.out.println ("Jag är i metod E");}@Test (prioritet = 3)offentligt ogiltigt d_method () {System.out.println ("Jag är i metod D");}}
Produktion
Jag är i metod EJag är i metod A.Jag är i metod DJag är i metod CJag är i metod B
Här har vi angett prioriteringarna som 0,1,3,6,9. Så, metod som har 0 som prioritet körs först och sedan metod som har prioritet-1 och så vidare. Här kommer inte alfabetisk ordningsmetodnamn att beaktas eftersom vi har angett prioriteringarna
Metoder med samma prioritet:
Det kan finnas en chans att metoder kan innehålla samma prioritet. I dessa fall beaktar testng den alfabetiska ordningen på metodnamnen vars prioritet är densamma.
paketet com.guru.testngannotations;importera org.testng.annotations.Test;offentlig klass TestNG_Priority_Annotations {@Test (prioritet = 6)offentligt ogiltigt c_method () {System.out.println ("Jag är i metod C");}@Test (prioritet = 9)offentligt ogiltigt b_method () {System.out.println ("Jag är i metod B");}@Test (prioritet = 6)offentligt ogiltigt a_method () {System.out.println ("Jag är i metod A");}@Test (prioritet = 0)offentligt ogiltigt e_method () {System.out.println ("Jag är i metod E");}@Test (prioritet = 3)offentligt ogiltigt d_method () {System.out.println ("Jag är i metod D");}}
Produktion
Jag är i metod EJag är i metod DJag är i metod A.Jag är i metod CJag är i metod B
Här körs 'e' och 'd' baserat på deras prioritetsvärden. Men metoderna 'a' och 'c' innehåller samma prioritetsvärde (6). Så här testng tar hänsyn till den alfabetiska ordningen på 'a' och 'c' och utför dem därefter.
Kombinera både prioriterade (med samma prioritet) och icke-prioriterade metoder:
I det här fallet täcker vi två fall i en testng-klass.
- Metoder med samma prioritetsvärde.
- Mer än en icke-prioriterad metod.
paketet com.guru.testngannotations;importera org.testng.annotations.Test;offentlig klass TestNG_Priority_Annotations {@Testa()offentligt ogiltigt c_method () {System.out.println ("Jag är i metod C");}@Testa()offentligt ogiltigt b_method () {System.out.println ("Jag är i metod B");}@Test (prioritet = 6)offentligt ogiltigt a_method () {System.out.println ("Jag är i metod A");}@Test (prioritet = 0)offentligt ogiltigt e_method () {System.out.println ("Jag är i metod E");}@Test (prioritet = 6)offentligt ogiltigt d_method () {System.out.println ("Jag är i metod D");}}
Produktion:
Jag är i metod BJag är i metod CJag är i metod EJag är i metod A.Jag är i metod D
GÅNG: b_metodGÅNG: c_metodGÅNG: e_metodGÅNG: en_metodGÅNG: d_metod
Förklaring:
Första preferens: Icke-prioriterade metoder: 'c' och 'b': Baserat på alfabetisk ordning utfördes 'b' först och sedan 'c'.
Andra preferens: Prioriterade metoder: 'a', 'e' och 'd': 'e' kördes först eftersom den hade högsta prioritet (0). Eftersom prioriteringarna för 'a' och 'd' -metoder var desamma, betraktade testng den alfabetiska ordningen på 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) , antar att du definierar den i någon annan syntax säg @Test (PRIORITY = 1) då visar din IDE det som ett kompileringsfel . Se bilden nedan:
Slutsats:
Som du har sett att om det finns ett krav att köra en uppsättning testfall i specifik sekvens kan det enkelt göras med Prioritet med testNG som ett körverktyg.
Denna handledning är möjlig tack vare bidrag från Ramandeep Singh och Rama Krishna Gadde