TestNG Opplæring: Hva er, merknader og amp; Rammeverk i Selen

Innholdsfortegnelse:

Anonim

Hva er TestNG?

TestNG er et rammeverk for automatiseringstesting der NG står for "Next Generation". TestNG er inspirert av JUnit som bruker kommentarene (@). TestNG overvinner ulempene med JUnit og er designet for å gjøre end-to-end testing enkel.

Ved å bruke TestNG kan du generere en skikkelig rapport, og du kan enkelt bli kjent med hvor mange testsaker som er bestått, mislyktes og hoppes over. Du kan utføre de mislykkede testtilfellene hver for seg.

For eksempel:

  • Anta at du har fem testtilfeller, det skrives en metode for hver testtilfelle (Anta at programmet er skrevet ved hjelp av hovedmetoden uten å bruke testNG). Når du kjører dette programmet først, kjøres tre metoder vellykket, og den fjerde metoden mislyktes. Korriger deretter feilene som er tilstede i den fjerde metoden, nå vil du bare kjøre den fjerde metoden fordi de tre første metodene uansett er utført vellykket. Dette er ikke mulig uten å bruke TestNG.
  • TestNG i Selenium gir et alternativ, dvs. testng-failed.xml-fil i test-output-mappen. Hvis du bare vil kjøre mislykkede testtilfeller, betyr det at du kjører denne XML-filen. Det vil bare utføre mislykkede testtilfeller.

Ved siden av konseptet ovenfor vil du lære mer om TestNG, som hva er fordelene med TestNG, hvordan du lager testmetoder ved hjelp av @test-merknader, hvordan du konverterer disse klassene til testing av suite-filer og utfører gjennom formørkelsen så vel som fra kommandolinjen .

I denne TestNG-opplæringen vil du lære

  • Hvorfor bruke TestNG med selen?
  • Fordeler med TestNG over JUnit
  • Opprett testtilfelle ved hjelp av TestNG-merknader
  • Hvordan lage en ny TestNG-testfil
    • Koding av vårt første TestNG Test Case Eksempel
    • Kjører testen
  • Kontrollerer rapporter opprettet av TestNG
  • Kommentarer brukt i TestNG
  • Flere testtilfeller
  • Parametere
    • Flere parametere
    • Sammendrag av TestNG-merknader

Hvorfor bruke TestNG med selen?

Standard selentester genererer ikke et riktig format for testresultatene. Ved å bruke TestNG i selen kan vi generere testresultater.

De fleste Selen-brukere bruker dette mer enn Junit på grunn av fordelene. Det er så mange funksjoner i TestNG, men vi vil bare fokusere på de viktigste som vi kan bruke i Selen. Følgende er hovedtrekkene i Selen TestNG:

  • Generer rapporten i riktig format, inkludert et antall testsaker, antall testsaker som er bestått, antall testsaker mislyktes og antall testsaker som hoppes over.
  • Flere testtilfeller kan grupperes lettere ved å konvertere dem til testng.xml-fil. I hvilken du kan prioritere hvilken testsak som skal utføres først.
  • Den samme testsaken kan utføres flere ganger uten løkker, bare ved å bruke nøkkelordet kalt 'påkallingsantall'.
  • Ved å bruke testng kan du utføre flere testtilfeller på flere nettlesere, dvs. teste nettlesere.
  • TestNG-rammeverket kan enkelt integreres med verktøy som TestNG Maven, Jenkins, etc.
  • Kommentarer som brukes i testingen er veldig enkle å forstå f.eks: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver har ingen integrert mekanisme for å generere rapporter. TestNG kan generere rapporten i et lesbart format som det som er vist nedenfor.
  • TestNG forenkler måten testene blir kodet på. Det er ikke lenger behov for en statisk hovedmetode i testene våre. Handlingsrekkefølgen reguleres av lettfattelige merknader som ikke krever at metodene er statiske.
  • Ufangede unntak håndteres automatisk av TestNG uten å avslutte testen for tidlig. Disse unntakene rapporteres som mislykkede trinn i rapporten.

Fordeler med TestNG over JUnit

Det er tre store fordeler med TestNG fremfor JUnit:

  • Kommentarer er lettere å forstå
  • Test tilfeller kan grupperes lettere
  • Parallell testing er mulig

Kommentarer i TestNG er kodelinjer som kan kontrollere hvordan metoden under dem blir utført . De er alltid foran med @ -symbolet. Et veldig tidlig og raskt TestNG-eksempel er det som er vist nedenfor.

Kommentarer vil bli diskutert senere i avsnittet "Merknader brukt i TestNG", så det er helt ok hvis du ikke forstår det ovennevnte TestNG-eksemplet ennå. Det er bare viktig å merke seg for nå at merknader i TestNG er lettere å kode og forstå enn i JUnit.

Evnen til å kjøre tester parallelt er tilgjengelig i TestNG, men ikke i JUnit, så TestNG-rammeverket er mer foretrukket av testere som bruker Selen Grid.

Opprett testtilfelle ved hjelp av TestNG-merknader

Nå skal vi lære å lage vår første testtilfelle ved hjelp av TestNG-merknader i selen:

Før vi oppretter en testsak, bør vi først sette opp et nytt TestNG-prosjekt i Eclipse og kalle det som "FirstTestNGProject".

Sette opp et nytt TestNG-prosjekt

Trinn 1: Klikk på Fil> Ny> Java-prosjekt

Trinn 2: Skriv "FirstTestNGProject" som prosjektnavnet, og klikk deretter Neste.

Trinn 3: Vi begynner nå å importere TestNG-bibliotekene til prosjektet vårt. Klikk på "Biblioteker" -fanen, og deretter på "Legg til bibliotek

... "

Trinn 4: I dialogboksen Legg til bibliotek velger du "TestNG" og klikker på Neste.

Trinn 5: Klikk Fullfør.

Du bør legge merke til at TestNG er inkludert på biblioteklisten.

Trinn 6: Vi legger nå til JAR-filene som inneholder Selenium API. Disse filene finnes i Java-klientdriveren som vi lastet ned fra http://docs.seleniumhq.org/download/ da vi installerte Selenium og Eclipse i de forrige kapitlene.

Naviger deretter til der du har plassert Selen JAR-filene.

Etter at du har lagt til de eksterne JAR-ene, bør skjermen se slik ut.

Trinn 7: Klikk Fullfør og bekreft at FirstTestNGProject er synlig i Eclipse's Package Explorer-vindu.

Hvordan lage en ny TestNG-testfil

Nå som vi er ferdige med å sette opp prosjektet vårt i denne TestNG-opplæringen, la oss lage en ny TestNG-fil.

Trinn 1: Høyreklikk på "src" -pakkemappen, og velg deretter Ny> Annet

...

Trinn 2: Klikk på TestNG-mappen og velg alternativet "TestNG-klasse". Klikk på Neste.

Trinn 3: Skriv inn verdiene som er angitt nedenfor i de aktuelle inndataboksene, og klikk Fullfør. Legg merke til at vi har kalt Java-filen vår som "FirstTestNGFile".

Formørkelse bør automatisk opprette malen for vår TestNG-fil vist nedenfor.

Koding av vårt første TestNG Test Case Eksempel

La oss nå lage vår første testsak som vil sjekke om Mercury Tours hjemmeside er riktig. Skriv inn koden din som vist i TestNG-eksemplet nedenfor:

pakke førstetestpakke;importer org.openqa.selenium. *;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.Assert;importer org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@Testpublic void verifisereHomepageTitle () {System.out.println ("lanserer Firefox nettleser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);String expectTitle = "Velkommen: Merkur-turer";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);driver.close ();}}

Legg merke til følgende.

  • TestNG krever ikke at du har en hovedmetode ().
  • Metoder trenger ikke være statiske.
  • Vi brukte @Test-merknaden. @Test brukes til å fortelle at metoden under den er en testtilfelle . I dette tilfellet har vi satt verifisereHomepageTitle () -metoden til å være vår testtilfelle, så vi plasserte en '@Test'-kommentar over den.
  • Siden vi bruker merknader i TestNG, trengte vi å importere pakken org.testng.annotations. *.
  • Vi brukte Assert-klassen. Assert-klassen brukes til å utføre verifiseringsoperasjoner i TestNG . For å bruke den, må vi importere org.testng.Assert-pakken.

Du kan ha flere testtilfeller (derfor flere @Test-merknader) i en enkelt TestNG-fil. Dette vil bli taklet mer detaljert senere i avsnittet "Kommentarer brukt i TestNG."

Kjører testen

For å kjøre testen, kjører du bare filen i Eclipse som du vanligvis gjør. Eclipse vil gi to utganger - den ene i konsollvinduet og den andre i TestNG-resultatvinduet.

Kontrollerer rapporter opprettet av TestNG

Konsollvinduet i Eclipse gir en tekstbasert rapport om testresultatene våre, mens TestNG Results-vinduet gir oss en grafisk.

Genererer HTML-rapporter

TestNG har muligheten til å generere rapporter i HTML-format.

Trinn 1: Etter å ha kjørt vår FirstTestNGFile som vi opprettet i forrige seksjon, høyreklikker du prosjektnavnet (FirstTestNGProject) i Project Explorer-vinduet, og deretter klikker du på "Oppdater".

Trinn 2: Legg merke til at en "test-output" -mappe ble opprettet. Utvid den og se etter en index.html-fil. Denne HTML-filen er en rapport om resultatene fra den siste testkjøringen.

Trinn 3: Dobbeltklikk på den index.html filen for å åpne den i Eclipses innebygde nettleser. Du kan oppdatere denne siden når som helst etter at du kjører testen på nytt ved å trykke F5 akkurat som i vanlige nettlesere.

Kommentarer brukt i TestNG

I den forrige delen har du blitt introdusert for @Test-merknaden. Nå skal vi studere mer avanserte merknader og bruken av dem.

Flere testtilfeller

Vi kan bruke flere @Test-merknader i en enkelt TestNG-fil. Som standard utføres metoder som er merket med @Test alfabetisk. Se koden nedenfor. Selv om metodene c_test, a_test og b_test ikke er ordnet alfabetisk i koden, vil de bli utført som sådan.

Kjør denne koden, og klikk på "Kronologisk visning" på den genererte index.html-siden.

Parametere

Hvis du vil at metodene skal kjøres i en annen rekkefølge, bruker du parameteren "prioritet". Parametere er nøkkelord som endrer kommentarfunksjonen .

  • Parametere krever at du tilordner en verdi til dem. Du gjør dette ved å plassere et ved siden av dem, og deretter etterfulgt av verdien.
  • Parametere er omsluttet av et par parenteser som plasseres rett etter kommentaren, som kodebiten vist nedenfor.

TestNG vil utføre @Test-merknaden med den laveste prioritetsverdien opp til den største. Det er ikke behov for at dine prioriterte verdier skal være fortløpende.

TestNG HTML-rapporten vil bekrefte at metodene ble utført basert på den stigende verdien av prioritet.

Flere parametere

Bortsett fra "prioritet", har @Test en annen parameter kalt "alwaysRun" som bare kan settes til enten "true" eller "false". Hvis du vil bruke to eller flere parametere i en enkelt kommentar, skiller du dem med et komma som det som er vist nedenfor.

@Test (prioritet = 0, alwaysRun = true)

@BeforeTest og @AfterTest

@BeforeTest

metoder under denne merknaden vil bli utført før den første testsaken i TestNG-filen .

@AfterTest

Metoder under denne merknaden vil bli utført etter at alle testtilfeller i TestNG-filen er utført .

Tenk på koden nedenfor.

pakke førstetestpakke;importer org.openqa.selenium. *;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.Assert;importer org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@BeforeTestpublic void launchBrowser () {System.out.println ("lanserer Firefox nettleser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifisereHomepageTitle () {String expectTitle = "Velkommen: Merkur-turer";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@AfterTestoffentlig ugyldig terminereBrowser () {driver.close ();}}

Ved å bruke logikken presentert av tabellen og koden ovenfor, kan vi forutsi at sekvensen som metodene vil bli utført med er:

  • 1 st - launchBrowser ()
  • 2. nd - verifiserHomepageTitle ()
  • 3. rd - avslutteBrowser ()

Plasseringen av kommentarblokkene kan byttes uten å påvirke den kronologiske rekkefølgen de vil bli utført på . La oss forstå det med et TestNG-eksempel og prøve å omorganisere kommentarblokkene slik at koden din ser ut som den nedenfor.

pakke førstetestpakke;importer org.openqa.selenium. *;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.Assert;importer org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Streng driverPath = "C: \\ geckodriver.exe";offentlig WebDriver-driver;@AfterTest // Jumbledoffentlig ugyldig terminereBrowser () {driver.close ();}@BeforeTest // Virvletpublic void launchBrowser () {System.out.println ("lanserer Firefox nettleser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledpublic void verifisereHomepageTitle () {String expectTitle = "Velkommen: Merkur-turer";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}}

Kjør koden ovenfor og legg merke til det

@BeforeMethod og @AfterMethod

@BeforeMethod

Metoder under denne merknaden vil bli utført før hver metode i hvert testtilfelle .

@AfterMethod

metoder under denne merknaden vil bli utført etter hver metode i hvert testtilfelle.

Anta at i Mercury Tours vil vi bekrefte titlene på målsidene til de to lenkene nedenfor.

Flyten av testen vår vil være:

  • Gå til hjemmesiden og bekreft tittelen.
  • Klikk på REGISTRER og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og bekreft om den fremdeles har riktig tittel.
  • Klikk på SUPPORT og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og bekreft om den fremdeles har riktig tittel.

Koden nedenfor illustrerer hvordan @BeforeMethod og @AfterMethod brukes til å effektivt utføre scenariet nevnt ovenfor.

pakke førstetestpakke;importer org.openqa.selenium. *;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.Assert;importer org.testng.annotations. *;@Testpublic class firsttestngfile {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;@BeforeTestpublic void launchBrowser () {System.out.println ("lanserer Firefox nettleser");System.setProperty ("webdriver.gecko.driver", driverPath);driver = ny FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifisereHomepageTitle () {String expectTitle = "Velkommen: Merkur-turer";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectedTitle);}@Test (prioritet = 0)offentlig ugyldighetsregister () {driver.findElement (By.linkText ("REGISTER")). klikk ();forventet = "Register: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, forventet);}@Test (prioritet = 1)offentlig ugyldig støtte () {driver.findElement (By.linkText ("SUPPORT")). klikk ();expected = "Under Construction: Mercury Tours";faktisk = driver.getTitle ();Assert.assertEquals (faktisk, forventet);}@AfterMethodoffentlig ugyldig goBackToHomepage () {driver.findElement (By.linkText ("Hjem")). klikk ();}@AfterTestoffentlig ugyldig terminereBrowser () {driver.close ();}}

Etter å ha utført denne testen, bør TestNG rapportere følgende sekvens.

Enkelt sagt, @BeforeMethod skal inneholde metoder du trenger å kjøre før hver testtilfelle, mens @AfterMethod skal inneholde metoder du trenger for å kjøre etter hver testtilfelle.

Sammendrag av TestNG-merknader

@BeforeSuite : Den merkede metoden kjøres før alle testene i denne suiten har kjørt.

@AfterSuite : Den merkede metoden kjøres etter at alle tester i denne suiten har kjørt.

@BeforeTest : Den merkede metoden kjøres før en testmetode som tilhører klassene inne i koden kjøres.

@AfterTest : Den merkede metoden kjøres etter at alle testmetodene som tilhører klassene inne i taggen har kjørt.

@BeforeGroups : Listen over grupper som denne konfigurasjonsmetoden kjører før. Denne metoden vil garantert kjøre kort tid før den første testmetoden som tilhører noen av disse gruppene blir påkalt.

@AfterGroups : Listen over grupper som denne konfigurasjonsmetoden kjører etter. Denne metoden vil garantert kjøre kort tid etter at den siste testmetoden som tilhører noen av disse gruppene er påkalt.

@BeforeClass : Den merkede metoden kjøres før den første testmetoden i gjeldende klasse påkalles.

@AfterClass : Den merkede metoden kjøres etter at alle testmetodene i gjeldende klasse er kjørt.

@BeforeMethod : Den merkede metoden kjøres før hver testmetode.

@AfterMethod : Den merkede metoden kjøres etter hver testmetode.

@Test : Den kommenterte metoden er en del av en testtilfelle

Konklusjon

  • TestNG er et testrammeverk som er i stand til å gjøre Selenium-tester lettere å forstå og generere rapporter som er enkle å forstå.
  • De viktigste fordelene med TestNG fremfor JUnit er følgende.
    • Kommentarer er lettere å bruke og forstå.
    • Test tilfeller kan grupperes lettere.
    • TestNG lar oss lage parallelle tester.
  • Konsollvinduet i Eclipse genererer et tekstbasert resultat mens TestNG-vinduet er mer nyttig fordi det gir oss en grafisk utgang av testresultatet pluss andre meningsfulle detaljer som:
    • Kjøretid for hver metode.
    • Den kronologiske rekkefølgen som metodene ble utført på
  • TestNG er i stand til å generere HTML-baserte rapporter.
  • Kommentarer kan bruke parametere akkurat som de vanlige Java TestNG-metodene.
  • TestNG Dataprovider er en måte å overføre parametere til testfunksjonen som overfører forskjellige verdier i testsaker i en enkelt utførelse.