TestNG-handledning: Vad är, kommentarer & Ram i selen

Innehållsförteckning:

Anonim

Vad är TestNG?

TestNG är ett ramverk för automatiseringstestning där NG står för "Next Generation". TestNG är inspirerad av JUnit som använder anteckningarna (@). TestNG övervinner nackdelarna med JUnit och är utformat för att göra det enkelt att testa.

Med TestNG kan du skapa en ordentlig rapport och du kan enkelt lära dig hur många testfall som passeras, misslyckades och hoppas över. Du kan utföra misslyckade testfall separat.

Till exempel:

  • Antag att du har fem testfall, en metod skrivs för varje testfall (Antag att programmet skrivs med huvudmetoden utan att använda testNG). När du kör det här programmet först körs tre metoder framgångsrikt och den fjärde metoden misslyckades. Korrigera sedan felen i den fjärde metoden, nu vill du bara köra den fjärde metoden eftersom de första tre metoderna ändå körs framgångsrikt. Detta är inte möjligt utan att använda TestNG.
  • TestNG i Selen ger ett alternativ, dvs. testng-failed.xml-fil i test-output-mappen. Om du bara vill köra misslyckade testfall betyder det att du kör den här XML-filen. Det kör bara misslyckade testfall.

Förutom ovanstående koncept kommer du att lära dig mer om TestNG, som vad är fördelarna med TestNG, hur man skapar testmetoder med @test-anteckningar, hur man konverterar dessa klasser till testfiler och körs genom förmörkelsen såväl som från kommandoraden .

I denna TestNG-handledning lär du dig

  • Varför använda TestNG med selen?
  • Fördelar med TestNG jämfört med JUnit
  • Skapa testfall med TestNG-kommentarer
  • Hur man skapar en ny TestNG-testfil
    • Kodning av vårt första testNG-testfallsexempel
    • Kör testet
  • Kontrollerar rapporter skapade av TestNG
  • Kommentarer som används i TestNG
  • Flera testfall
  • Parametrar
    • Flera parametrar
    • Sammanfattning av TestNG-anteckningar

Varför använda TestNG med selen?

Selen-standardtester genererar inte ett korrekt format för testresultaten. Med TestNG i selen kan vi generera testresultat.

De flesta Selen-användare använder detta mer än Junit på grund av dess fördelar. Det finns så många funktioner i TestNG, men vi kommer bara att fokusera på de viktigaste som vi kan använda i Selen. Följande är de viktigaste funktionerna i Selen TestNG:

  • Skapa rapporten i rätt format inklusive ett antal testfall, antalet testfall som godkänts, antalet testfall misslyckats och antalet testfall som hoppats över.
  • Flera testfall kan grupperas lättare genom att konvertera dem till testng.xml-fil. I vilken du kan prioritera vilket testfall som ska utföras först.
  • Samma testfall kan utföras flera gånger utan loopar bara genom att använda nyckelord som kallas 'invocation count'.
  • Med testng kan du utföra flera testfall i flera webbläsare, dvs genom att testa flera webbläsare.
  • TestNG-ramverket kan enkelt integreras med verktyg som TestNG Maven, Jenkins, etc.
  • Kommentarer som används vid testningen är mycket lätta att förstå ex: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver har ingen inbyggd mekanism för att generera rapporter. TestNG kan generera rapporten i ett läsbart format som det som visas nedan.
  • TestNG förenklar sättet som testerna kodas på. Det finns inget mer behov av en statisk huvudmetod i våra tester. Handlingssekvensen regleras av lättförståeliga anteckningar som inte kräver att metoder ska vara statiska.
  • Ofångade undantag hanteras automatiskt av TestNG utan att testet avslutas i förtid. Dessa undantag rapporteras som misslyckade steg i rapporten.

Fördelar med TestNG jämfört med JUnit

Det finns tre stora fördelar med TestNG jämfört med JUnit:

  • Kommentarer är lättare att förstå
  • Testfall kan grupperas lättare
  • Parallell testning är möjlig

Kommentarer i TestNG är kodrader som kan styra hur metoden nedanför dem ska köras . De föregås alltid av @ -symbolen. Ett mycket tidigt och snabbt TestNG-exempel är det som visas nedan.

Kommentarer kommer att diskuteras senare i avsnittet "Anmärkningar som används i TestNG", så det är helt ok om du inte förstår ovanstående TestNG-exempel ännu. Det är bara viktigt att notera för tillfället att kommentarer i TestNG är lättare att koda och förstå än i JUnit.

Möjligheten att köra tester parallellt finns i TestNG men inte i JUnit, så TestNG-ramverket är mer föredraget av testare som använder Selen Grid.

Skapa testfall med TestNG-kommentarer

Nu ska vi lära oss att skapa vårt första testfall med TestNG-anteckningar i selen:

Innan vi skapar ett testfall ska vi först ställa in ett nytt TestNG-projekt i Eclipse och namnge det som "FirstTestNGProject".

Ställa in ett nytt TestNG-projekt

Steg 1: Klicka på Arkiv> Nytt> Java-projekt

Steg 2: Skriv "FirstTestNGProject" som projektnamn och klicka sedan på Nästa.

Steg 3: Vi börjar nu importera TestNG-biblioteken till vårt projekt. Klicka på fliken "Bibliotek" och sedan på "Lägg till bibliotek

... "

Steg 4: Välj "TestNG" i dialogrutan Lägg till bibliotek och klicka på Nästa.

Steg 5: Klicka på Slutför.

Du bör lägga märke till att TestNG ingår i bibliotekslistan.

Steg 6: Vi lägger nu till JAR-filerna som innehåller Selenium API. Dessa filer finns i Java-klientdrivrutinen som vi laddade ner från http://docs.seleniumhq.org/download/ när vi installerade Selenium och Eclipse i föregående kapitel.

Navigera sedan dit du har placerat Selen JAR-filerna.

När du har lagt till externa JAR ska din skärm se ut så här.

Steg 7: Klicka på Slutför och verifiera att vårt FirstTestNGProject syns i Eclipses fönster för paketutforskare.

Hur man skapar en ny TestNG-testfil

Nu när vi är färdiga med att konfigurera vårt projekt i denna TestNG-handledning, låt oss skapa en ny TestNG-fil.

Steg 1: Högerklicka på paketmappen "src" och välj sedan Ny> Övrigt

...

Steg 2: Klicka på mappen TestNG och välj alternativet "TestNG class". Klicka på Nästa.

Steg 3: Skriv värdena som anges nedan i lämpliga inmatningsrutor och klicka på Slutför. Lägg märke till att vi har namngett vår Java-fil som "FirstTestNGFile".

Eclipse ska automatiskt skapa mallen för vår TestNG-fil som visas nedan.

Kodning av vårt första testNG-testfallsexempel

Låt oss nu skapa vårt första testfall som kontrollerar om Mercury Tours hemsida är korrekt. Skriv din kod som visas i TestNG-exemplet nedan:

paketet första testpaketet;importera org.openqa.selenium. *;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Sträng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-drivrutin;@Testapublic void verifyHomepageTitle () {System.out.println ("startar Firefox-webbläsaren");System.setProperty ("webdriver.gecko.driver", driverPath);drivrutin = ny FirefoxDriver ();driver.get (baseUrl);String expectTitle = "Välkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);driver.close ();}}

Lägg märke till följande.

  • TestNG kräver inte att du har en huvudmetod ().
  • Metoder behöver inte vara statiska.
  • Vi använde @Test-anteckningen. @Test används för att berätta att metoden under det är ett testfall . I det här fallet har vi ställt in metoden verifieraHomepageTitle () som vårt testfall, så vi placerade en '@Test'-kommentar ovanför den.
  • Eftersom vi använder anteckningar i TestNG behövde vi importera paketet org.testng.annotations. *.
  • Vi använde Assert-klassen. Assert-klassen används för att utföra verifieringsoperationer i TestNG . För att kunna använda det måste vi importera paketet org.testng.Assert.

Du kan ha flera testfall (därför flera @Test-anteckningar) i en enda TestNG-fil. Detta kommer att hanteras mer detaljerat senare i avsnittet "Anmärkningar som används i TestNG."

Kör testet

För att köra testet kör du bara filen i Eclipse som du normalt gör. Eclipse ger två utgångar - en i konsolfönstret och den andra i testfönstret TestNG.

Kontrollerar rapporter skapade av TestNG

Konsolfönstret i Eclipse ger en textbaserad rapport om våra testfallresultat medan TestNG-resultatfönstret ger oss en grafisk.

Skapa HTML-rapporter

TestNG har förmågan att generera rapporter i HTML-format.

Steg 1: Efter att ha kört vår FirstTestNGFile som vi skapade i föregående avsnitt högerklickar du på projektnamnet (FirstTestNGProject) i Project Explorer-fönstret och klickar sedan på alternativet "Uppdatera".

Steg 2: Lägg märke till att en "test-output" -mapp skapades. Expandera den och leta efter en index.html-fil. Denna HTML-fil är en rapport om resultaten från den senaste testkörningen.

Steg 3: Dubbelklicka på filen index.html för att öppna den i Eclipses inbyggda webbläsare. Du kan uppdatera den här sidan när som helst när du kör om testet genom att helt enkelt trycka på F5 precis som i vanliga webbläsare.

Kommentarer som används i TestNG

I föregående avsnitt har du introducerats till @Test-anteckningen. Nu ska vi studera mer avancerade anteckningar och deras användning.

Flera testfall

Vi kan använda flera @Test-anteckningar i en enda TestNG-fil. Som standard körs metoder som antecknats av @Test alfabetiskt. Se koden nedan. Även om metoderna c_test, a_test och b_test inte är ordnade alfabetiskt i koden kommer de att köras som sådana.

Kör den här koden och klicka på "Kronologisk vy" på den genererade index.html-sidan.

Parametrar

Om du vill att metoderna ska köras i en annan ordning, använd parametern "prioritet". Parametrar är nyckelord som ändrar kommentarens funktion .

  • Parametrar kräver att du tilldelar dem ett värde. Du gör det här genom att placera ett bredvid dem och sedan följt av värdet.
  • Parametrar är inneslutna i ett par parenteser som placeras direkt efter kommentaren som kodavsnittet nedan.

TestNG kommer att utföra @Test-anteckningen med det lägsta prioritetsvärdet upp till det största. Det finns inget behov av att dina prioriterade värden ska vara konsekutiva.

TestNG HTML-rapporten kommer att bekräfta att metoderna utfördes baserat på det stigande prioritetsvärdet.

Flera parametrar

Bortsett från "prioritet" har @Test en annan parameter som heter "alwaysRun" som bara kan ställas in antingen "true" eller "false". För att använda två eller flera parametrar i en enda kommentar, separera dem med ett komma som det som visas nedan.

@Test (prioritet = 0, alltidRun = sant)

@BeforeTest och @AfterTest

@BeforeTest

metoder under denna kommentar kommer att utföras före det första testfallet i TestNG-filen .

@AfterTest

metoder under denna kommentar kommer att köras efter att alla testfall i TestNG-filen har körts .

Tänk på koden nedan.

paketet första testpaketet;importera org.openqa.selenium. *;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Sträng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-drivrutin;@BeforeTestpublic void launchBrowser () {System.out.println ("startar Firefox-webbläsaren");System.setProperty ("webdriver.gecko.driver", driverPath);drivrutin = ny FirefoxDriver ();driver.get (baseUrl);}@Testapublic void verifyHomepageTitle () {String expectTitle = "Välkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Genom att tillämpa den logik som presenteras av tabellen och koden ovan kan vi förutsäga att sekvensen genom vilken metoder kommer att köras är:

  • 1 st - launchBrowser ()
  • 2: a - verifiera HomepageTitle ()
  • 3 rd - terminateBrowser ()

Placeringen av anteckningsblocken kan bytas ut utan att det påverkar den kronologiska ordningen med vilken de kommer att köras . Låt oss förstå med ett TestNG-exempel och försöka ordna annoteringsblocken så att din kod ser ut som den nedan.

paketet första testpaketet;importera org.openqa.selenium. *;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Sträng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-drivrutin;@AfterTest // Jumbledpublic void terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("startar Firefox-webbläsaren");System.setProperty ("webdriver.gecko.driver", driverPath);drivrutin = ny FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledpublic void verifyHomepageTitle () {String expectTitle = "Välkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}}

Kör koden ovan och märker det

@BeforeMethod och @AfterMethod

@BeforeMethod

metoder under denna anteckning kommer att utföras före varje metod i varje testfall .

@AfterMethod

metoder under denna anteckning kommer att utföras efter varje metod i varje testfall.

Anta att vi i Mercury Tours vill verifiera titlarna på målsidorna för de två länkarna nedan.

Flödet av vårt test skulle vara:

  • Gå till hemsidan och verifiera dess titel.
  • Klicka på REGISTRERA och verifiera titeln på målsidan.
  • Gå tillbaka till hemsidan och kontrollera om den fortfarande har rätt titel.
  • Klicka på SUPPORT och verifiera titeln på målsidan.
  • Gå tillbaka till hemsidan och kontrollera om den fortfarande har rätt titel.

Koden nedan illustrerar hur @BeforeMethod och @AfterMethod används för att effektivt utföra scenariot som nämns ovan.

paketet första testpaketet;importera org.openqa.selenium. *;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.Assert;importera org.testng.annotations. *;@Testapublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Sträng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-drivrutin;offentlig sträng förväntad = null;public Sträng faktisk = null;@BeforeTestpublic void launchBrowser () {System.out.println ("startar Firefox-webbläsaren");System.setProperty ("webdriver.gecko.driver", driverPath);drivrutin = ny FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String expectTitle = "Välkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@Test (prioritet = 0)offentligt ogiltigt register () {driver.findElement (By.linkText ("REGISTER")). klicka ();förväntat = "Register: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, förväntad);}@Test (prioritet = 1)offentligt ogiltigt stöd () {driver.findElement (By.linkText ("SUPPORT")). klicka ();expected = "Under Construction: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, förväntad);}@AfterMethodoffentligt ogiltigt goBackToHomepage () {driver.findElement (By.linkText ("Hem")). klicka ();}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Efter att ha utfört detta test bör din TestNG rapportera följande sekvens.

Enkelt uttryckt ska @BeforeMethod innehålla metoder som du behöver köra före varje testfall medan @AfterMethod ska innehålla metoder som du behöver köra efter varje testfall.

Sammanfattning av TestNG-anteckningar

@BeforeSuite : Den kommenterade metoden körs innan alla tester i den här sviten har körts.

@AfterSuite : Den kommenterade metoden körs efter att alla tester i den här sviten har körts.

@BeforeTest : Den kommenterade metoden körs innan någon testmetod som tillhör klasserna i taggen körs.

@AfterTest : Den antecknade metoden körs efter att alla testmetoder som tillhör klasserna i taggen har körts.

@BeforeGroups : Listan över grupper som denna konfigurationsmetod kommer att köras före. Denna metod körs garanterat strax innan den första testmetoden som tillhör någon av dessa grupper åberopas.

@AfterGroups : Listan över grupper som denna konfigurationsmetod kommer att köras efter. Denna metod kommer garanterat att köras strax efter att den sista testmetoden som tillhör någon av dessa grupper har åberopats.

@BeforeClass : Den kommenterade metoden körs innan den första testmetoden i den aktuella klassen åberopas.

@AfterClass : Den kommenterade metoden körs efter att alla testmetoder i den aktuella klassen har körts.

@BeforeMethod : Den kommenterade metoden körs före varje testmetod.

@AfterMethod : Den kommenterade metoden körs efter varje testmetod.

@Test : Den kommenterade metoden är en del av ett testfall

Slutsats

  • TestNG är ett testramverk som kan göra Selen-tester lättare att förstå och generera rapporter som är lätta att förstå.
  • De största fördelarna med TestNG jämfört med JUnit är följande.
    • Kommentarer är lättare att använda och förstå.
    • Testfall kan grupperas lättare.
    • TestNG tillåter oss att skapa parallella tester.
  • Konsolfönstret i Eclipse genererar ett textbaserat resultat medan TestNG-fönstret är mer användbart eftersom det ger oss en grafisk utgång av testresultatet plus andra meningsfulla detaljer som:
    • Varaktighet för varje metod.
    • Den kronologiska ordningen med vilken metoder utfördes
  • TestNG kan generera HTML-baserade rapporter.
  • Kommentarer kan använda parametrar precis som de vanliga Java TestNG-metoderna.
  • TestNG Dataprovider är ett sätt att skicka parametrar till testfunktionen som skickar olika värden i testfall i en enda körning.