TestNG Tutorial: Hvad er, kommentarer & Ramme i selen

Indholdsfortegnelse:

Anonim

Hvad er TestNG?

TestNG er en automatiseret testramme, hvor NG står for "Next Generation". TestNG er inspireret af JUnit, der bruger annotationerne (@). TestNG overvinder ulemperne ved JUnit og er designet til at gøre end-to-end test let.

Ved hjælp af TestNG kan du generere en ordentlig rapport, og du kan let få at vide, hvor mange testsager der er bestået, mislykkedes og springet over. Du kan udføre de mislykkede testsager separat.

For eksempel:

  • Antag, at du har fem testcases, der skrives en metode til hver testcase (Antag, at programmet er skrevet ved hjælp af hovedmetoden uden at bruge testNG). Når du kører dette program først, udføres tre metoder med succes, og den fjerde metode mislykkes. Ret derefter de fejl, der findes i den fjerde metode, nu vil du kun køre den fjerde metode, fordi de første tre metoder alligevel udføres med succes. Dette er ikke muligt uden brug af TestNG.
  • TestNG i Selen giver en mulighed, dvs. testng-failed.xml-fil i test-outputmappe. Hvis du kun vil køre mislykkede testsager, betyder det, at du kører denne XML-fil. Det udfører kun mislykkede testsager.

Ved siden af ​​ovenstående koncept lærer du mere om TestNG, ligesom hvad er fordelene ved TestNG, hvordan man opretter testmetoder ved hjælp af @test-kommentarer, hvordan man konverterer disse klasser til test-suite-fil og udfører gennem formørkelsen såvel som fra kommandolinjen .

I denne TestNG-tutorial lærer du

  • Hvorfor bruge TestNG med selen?
  • Fordele ved TestNG i forhold til JUnit
  • Opret testcase ved hjælp af TestNG-kommentarer
  • Sådan oprettes en ny TestNG-testfil
    • Kodning af vores første TestNG-testeksempeleksempel
    • Kører testen
  • Kontrollerer rapporter oprettet af TestNG
  • Annoteringer brugt i TestNG
  • Flere testsager
  • Parametre
    • Flere parametre
    • Resumé af TestNG-kommentarer

Hvorfor bruge TestNG med selen?

Standardselen-tests genererer ikke et korrekt format til testresultaterne. Ved hjælp af TestNG i selen kan vi generere testresultater.

De fleste Selen-brugere bruger dette mere end Junit på grund af dets fordele. Der er så mange funktioner i TestNG, men vi vil kun fokusere på de vigtigste, som vi kan bruge i Selen. Følgende er nøglefunktionerne i Selen TestNG:

  • Generer rapporten i et korrekt format, der inkluderer et antal testcases, antallet af testsager, der er bestået, antallet af testsager mislykkedes, og antallet af testsager, der er sprunget over.
  • Flere testtilfælde kan grupperes lettere ved at konvertere dem til testng.xml-fil. I hvilke du kan prioritere, hvilken testsag der skal udføres først.
  • Den samme testcase kan udføres flere gange uden sløjfer bare ved hjælp af nøgleordet kaldet 'invocation count.'
  • Ved hjælp af testng kan du udføre flere testcases på flere browsere, dvs. cross browser-test.
  • TestNG-rammen kan let integreres med værktøjer som TestNG Maven, Jenkins osv.
  • Kommentarer, der er brugt til testningen, er meget lette at forstå f.eks: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver har ingen indbygget mekanisme til generering af rapporter. TestNG kan generere rapporten i et læsbart format som det, der er vist nedenfor.
  • TestNG forenkler den måde, testene er kodet på. Der er ikke mere behov for en statisk hovedmetode i vores tests. Handlingens rækkefølge reguleres af letforståelige kommentarer, der ikke kræver, at metoder er statiske.
  • Ufangede undtagelser håndteres automatisk af TestNG uden at afslutte testen for tidligt. Disse undtagelser rapporteres som mislykkede trin i rapporten.

Fordele ved TestNG i forhold til JUnit

Der er tre store fordele ved TestNG i forhold til JUnit:

  • Kommentarer er lettere at forstå
  • Testcases kan grupperes lettere
  • Parallel test er mulig

Kommentarer i TestNG er kodelinjer, der kan kontrollere, hvordan metoden nedenfor dem udføres . Forud for dem er @ symbolet altid. Et meget tidligt og hurtigt TestNG-eksempel er nedenstående.

Annotationer vil blive diskuteret senere i afsnittet "Annotations used in TestNG", så det er helt ok, hvis du endnu ikke forstår ovenstående TestNG-eksempel. Det er bare vigtigt at bemærke for nu, at annoteringer i TestNG er lettere at kode og forstå end i JUnit.

Evnen til at køre tests parallelt er tilgængelig i TestNG, men ikke i JUnit, så TestNG-rammen foretrækkes mere af testere, der bruger Selen Grid.

Opret testcase ved hjælp af TestNG-kommentarer

Nu lærer vi, hvordan vi opretter vores første testtilfælde ved hjælp af TestNG-kommentarer i selen:

Før vi opretter en testcase, skal vi først konfigurere et nyt TestNG-projekt i Eclipse og navngive det som "FirstTestNGProject".

Opsætning af et nyt TestNG-projekt

Trin 1: Klik på Filer> Ny> Java-projekt

Trin 2: Skriv "FirstTestNGProject" som projektnavnet, og klik derefter på Næste.

Trin 3: Vi begynder nu at importere TestNG-bibliotekerne til vores projekt. Klik på fanen "Biblioteker" og derefter "Tilføj bibliotek

... "

Trin 4: I dialogboksen Tilføj bibliotek skal du vælge "TestNG" og klikke på Næste.

Trin 5: Klik på Udfør.

Du skal bemærke, at TestNG er inkluderet på listen Biblioteker.

Trin 6: Vi tilføjer nu de JAR-filer, der indeholder Selenium API. Disse filer findes i Java-klientdriveren, som vi downloadede fra http://docs.seleniumhq.org/download/, da vi installerede Selenium og Eclipse i de foregående kapitler.

Naviger derefter til, hvor du har placeret Selenium JAR-filerne.

Når du har tilføjet de eksterne JAR'er, skal din skærm se sådan ud.

Trin 7: Klik på Udfør, og kontroller, at vores FirstTestNGProject er synlig i Eclipse's Pakke Explorer-vindue.

Sådan oprettes en ny TestNG-testfil

Nu hvor vi er færdige med at oprette vores projekt i denne TestNG-tutorial, lad os oprette en ny TestNG-fil.

Trin 1: Højreklik på "src" -pakkemappen, og vælg derefter Ny> Andet

...

Trin 2: Klik på mappen TestNG, og vælg "TestNG klasse". Klik på Næste.

Trin 3: Indtast nedenstående værdier i de relevante indtastningsfelter, og klik på Udfør. Bemærk, at vi har navngivet vores Java-fil som "FirstTestNGFile".

Eclipse skal automatisk oprette skabelonen til vores TestNG-fil vist nedenfor.

Kodning af vores første TestNG-testeksempeleksempel

Lad os nu oprette vores første testsag, der vil kontrollere, om Mercury Tours hjemmeside er korrekt. Indtast din kode som vist i nedenstående TestNG-eksempel:

pakke første testpakke;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;offentlig klasse første testfil {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@Prøveoffentlig ugyldig bekræftelseHomepageTitle () {System.out.println ("lancering af Firefox-browser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);String expectTitle = "Velkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);driver.close ();}}

Bemærk følgende.

  • TestNG kræver ikke, at du har en hovedmetode ().
  • Metoder behøver ikke at være statiske.
  • Vi brugte @Test-kommentaren. @Test bruges til at fortælle, at metoden under det er en test case . I dette tilfælde har vi indstillet metoden verificereHomepageTitle () til at være vores testsag, så vi placerede en '@Test'-kommentar over den.
  • Da vi bruger annoteringer i TestNG, havde vi brug for at importere pakken org.testng.annotations. *.
  • Vi brugte klassen Assert. Assert-klassen bruges til at udføre verifikationsoperationer i TestNG . For at bruge det skal vi importere org.testng.Assert-pakken.

Du kan have flere testsager (derfor flere @Test-kommentarer) i en enkelt TestNG-fil. Dette vil blive tacklet mere detaljeret senere i afsnittet "Annoteringer brugt i TestNG."

Kører testen

For at køre testen skal du blot køre filen i Eclipse som du normalt gør. Eclipse giver to output - den ene i konsolvinduet og den anden i vinduet TestNG-resultater.

Kontrollerer rapporter oprettet af TestNG

Konsolvinduet i Eclipse giver en tekstbaseret rapport om vores test case-resultater, mens vinduet TestNG Results giver os en grafisk.

Generering af HTML-rapporter

TestNG har evnen til at generere rapporter i HTML-format.

Trin 1: Efter at have kørt vores FirstTestNGFile, som vi oprettede i det foregående afsnit, skal du højreklikke på projektnavnet (FirstTestNGProject) i vinduet Project Explorer og derefter klikke på "Opdater".

Trin 2: Bemærk, at der blev oprettet en "test-output" -mappe. Udvid det, og se efter en index.html-fil. Denne HTML-fil er en rapport om resultaterne af den seneste testkørsel.

Trin 3: Dobbeltklik på den index.html-fil for at åbne den i Eclipses indbyggede webbrowser. Du kan opdatere denne side når som helst, efter du har kørt din test igen ved blot at trykke på F5 ligesom i almindelige webbrowsere.

Annoteringer brugt i TestNG

I det forrige afsnit er du blevet introduceret til @Test-kommentaren. Nu skal vi studere mere avancerede kommentarer og deres anvendelser.

Flere testsager

Vi kan bruge flere @Test-kommentarer i en enkelt TestNG-fil. Metoder, der er kommenteret af @Test, udføres som standard alfabetisk. Se koden nedenfor. Selvom metoderne c_test, a_test og b_test ikke er arrangeret alfabetisk i koden, vil de blive udført som sådan.

Kør denne kode, og klik på "Kronologisk visning" på den genererede index.html-side.

Parametre

Hvis du ønsker, at metoderne skal udføres i en anden rækkefølge, skal du bruge parameteren "prioritet". Parametre er nøgleord, der ændrer kommentarens funktion .

  • Parametre kræver, at du tildeler en værdi til dem. Det gør du ved at placere et ved siden af ​​dem og derefter efterfulgt af værdien.
  • Parametre er omsluttet af et par parenteser, som placeres lige efter kommentaren, som f.eks. Kodestykket vist nedenfor.

TestNG udfører @Test-kommentaren med den laveste prioritetsværdi op til den største. Der er ikke behov for, at dine prioritetsværdier er fortløbende.

TestNG HTML-rapporten bekræfter, at metoderne blev udført baseret på den stigende værdi af prioritet.

Flere parametre

Bortset fra "prioritet" har @Test en anden parameter kaldet "alwaysRun", som kun kan indstilles til enten "true" eller "false". For at bruge to eller flere parametre i en enkelt kommentar skal du adskille dem med et komma som det, der er vist nedenfor.

@Test (prioritet = 0, altidRun = sand)

@BeforeTest og @AfterTest

@BeforeTest

Metoder under denne kommentar vil blive udført før den første testtilfælde i TestNG-filen .

@AfterTest

Metoder under denne kommentar udføres, når alle testsager i TestNG-filen er udført .

Overvej koden nedenfor.

pakke første testpakke;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;offentlig klasse første testfil {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@BeforeTestoffentlig ugyldig launchBrowser () {System.out.println ("lancering af Firefox-browser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@Prøveoffentlig ugyldig bekræftelseHomepageTitle () {String expectTitle = "Velkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@AfterTestoffentlig ugyldig termineringBrowser () {driver.close ();}}

Ved at anvende logikken præsenteret af tabellen og koden ovenfor kan vi forudsige, at den rækkefølge, hvormed metoder udføres, er:

  • 1. st - launchBrowser ()
  • 2. nd - verificerHomepageTitle ()
  • 3. rd - afslutBrowser ()

Placeringen af ​​annoteringsblokkene kan udveksles uden at påvirke den kronologiske rækkefølge, hvormed de vil blive udført . Lad os forstå det med et TestNG-eksempel og forsøge at omarrangere annoteringsblokkene, så din kode ligner den nedenfor.

pakke første testpakke;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;offentlig klasse første testfil {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@AfterTest // Jumbledoffentlig ugyldig termineringBrowser () {driver.close ();}@BeforeTest // Jumbledoffentlig ugyldig launchBrowser () {System.out.println ("lancering af Firefox-browser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledoffentlig ugyldig bekræftelseHomepageTitle () {String expectTitle = "Velkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}}

Kør koden ovenfor og bemærk det

@BeforeMethod og @AfterMethod

@BeforeMethod

Metoder under denne kommentar vil blive udført før hver metode i hvert test tilfælde .

@AfterMethod

metoder under denne kommentar vil blive udført efter hver metode i hvert test tilfælde.

Antag, at i Mercury Tours vil vi gerne kontrollere titlerne på målsiderne for de to links nedenfor.

Strømmen af ​​vores test ville være:

  • Gå til startsiden og bekræft dens titel.
  • Klik på REGISTER, og bekræft titlen på målsiden.
  • Gå tilbage til hjemmesiden, og kontroller, om den stadig har den rigtige titel.
  • Klik på SUPPORT, og bekræft titlen på dens målside.
  • Gå tilbage til hjemmesiden, og kontroller, om den stadig har den rigtige titel.

Koden nedenfor illustrerer, hvordan @BeforeMethod og @AfterMethod bruges til effektivt at udføre scenariet nævnt ovenfor.

pakke første testpakke;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Prøveoffentlig klasse første testfil {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;offentlig streng forventet = null;offentlig streng faktisk = null;@BeforeTestoffentlig ugyldig launchBrowser () {System.out.println ("lancering af Firefox-browser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodoffentlig ugyldig bekræftelseHomepageTitle () {String expectTitle = "Velkommen: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@Test (prioritet = 0)offentligt ugyldigt register () {driver.findElement (By.linkText ("REGISTER")). klik ();forventet = "Register: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, forventet);}@Test (prioritet = 1)offentlig ugyldig support () {driver.findElement (By.linkText ("SUPPORT")). klik ();forventet = "Under opførelse: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, forventet);}@AfterMethodoffentlig ugyldighed goBackToHomepage () {driver.findElement (By.linkText ("Hjem")). klik ();}@AfterTestoffentlig ugyldig termineringBrowser () {driver.close ();}}

Efter at have udført denne test, skal din TestNG rapportere følgende sekvens.

Kort sagt, @BeforeMethod skal indeholde metoder, du har brug for at køre før hver testtilfælde, mens @AfterMethod skal indeholde metoder, du har brug for at køre efter hver testtilfælde.

Resumé af TestNG-kommentarer

@BeforeSuite : Den annoterede metode køres, før alle test i denne suite er kørt.

@AfterSuite : Den annoterede metode køres, efter at alle test i denne suite er kørt.

@BeforeTest : Den annoterede metode køres, før en testmetode, der hører til klasserne inde i koden, køres.

@AfterTest : Den annoterede metode køres, efter at alle testmetoder, der tilhører klasserne inde i tagget, er kørt.

@BeforeGroups : Listen over grupper, som denne konfigurationsmetode kører før. Denne metode kører garanteret kort før den første testmetode, der tilhører nogen af ​​disse grupper, påberåbes.

@AfterGroups : Listen over grupper, som denne konfigurationsmetode kører efter. Denne metode kører garanteret kort efter, at den sidste testmetode, der hører til nogen af ​​disse grupper, er påberåbt.

@BeforeClass : Den annoterede metode køres, før den første testmetode i den aktuelle klasse påberåbes.

@AfterClass : Den annoterede metode køres, efter at alle testmetoder i den aktuelle klasse er kørt.

@BeforeMethod : Den annoterede metode køres før hver testmetode.

@AfterMethod : Den annoterede metode køres efter hver testmetode.

@Test : Den annoterede metode er en del af en testsag

Konklusion

  • TestNG er en testramme, der er i stand til at gøre Selen-test lettere at forstå og generere rapporter, der er lette at forstå.
  • De vigtigste fordele ved TestNG i forhold til JUnit er følgende.
    • Kommentarer er lettere at bruge og forstå.
    • Testcases kan grupperes lettere.
    • TestNG giver os mulighed for at oprette parallelle tests.
  • Konsolvinduet i Eclipse genererer et tekstbaseret resultat, mens TestNG-vinduet er mere nyttigt, fordi det giver os et grafisk output af testresultatet plus andre meningsfulde detaljer såsom:
    • Varighed af hver metode.
    • Den kronologiske rækkefølge, hvormed metoder blev udført
  • TestNG er i stand til at generere HTML-baserede rapporter.
  • Kommentarer kan bruge parametre ligesom de sædvanlige Java TestNG-metoder.
  • TestNG Dataprovider er en måde at overføre parametre til testfunktionen, der videregiver forskellige værdier i testsager i en enkelt udførelse.