Vadnica za TestNG: Kaj je, Opombe & Okvir v selenu

Kazalo:

Anonim

Kaj je TestNG?

TestNG je sistem za avtomatizacijsko testiranje, v katerem NG pomeni "naslednja generacija". TestNG temelji na JUnit, ki uporablja pripise (@). TestNG premaga pomanjkljivosti JUnit-a in je zasnovan tako, da olajša testiranje od konca do konca.

S testNG lahko ustvarite ustrezno poročilo in zlahka spoznate, koliko testnih primerov je bilo opravljenih, neuspešnih in preskočenih. Neuspešne testne primere lahko izvedete ločeno.

Na primer:

  • Denimo, da imate pet testnih primerov, za vsak test je napisana ena metoda (predpostavimo, da je program napisan z glavno metodo brez uporabe testNG). Ko najprej zaženete ta program, se tri metode uspešno izvedejo, četrta metoda pa ni uspela. Nato popravite napake, prisotne v četrti metodi, zdaj želite zagnati le četrto metodo, ker so prve tri metode vseeno uspešno izvedene. Brez uporabe TestNG to ni mogoče.
  • TestNG v programu Selenium ponuja možnost, tj. Datoteko testng-failed.xml v mapi test-output. Če želite zagnati samo neuspešne testne primere, pomeni, da zaženete to datoteko XML. Izvajal bo le neuspešne testne primere.

Poleg zgornjega koncepta boste izvedeli še več o TestNG, na primer, kakšne so prednosti TestNG, kako ustvariti testne metode z uporabo @test pripisov, kako pretvoriti te razrede v datoteko testne zbirke in izvajati s pomočjo mrka, pa tudi iz ukazne vrstice .

V tej vadnici TestNG se boste naučili

  • Zakaj uporabljati TestNG s selenom?
  • Prednosti TestNG pred JUnit
  • Ustvarite testni primer z uporabo pripisov TestNG
  • Kako ustvariti novo testno datoteko TestNG
    • Kodiranje našega prvega primera testnega primera NG
    • Izvajanje testa
  • Preverjanje poročil, ki jih je ustvaril TestNG
  • Pripisi, uporabljeni v TestNG
  • Več testnih primerov
  • Parametri
    • Več parametrov
    • Povzetek opomb TestNG

Zakaj uporabljati TestNG s selenom?

Privzeti testi s selenom ne ustvarijo ustrezne oblike rezultatov. Z uporabo TestNG v selenu lahko ustvarimo rezultate testa.

Večina uporabnikov selena to zaradi svojih prednosti uporablja bolj kot Junit. Funkcij TestNG je toliko, vendar se bomo osredotočili le na najpomembnejše, ki jih lahko uporabimo v selenu. Sledijo ključne značilnosti selena TestNG:

  • Ustvarite poročilo v ustrezni obliki, vključno s številom zagonov testnih primerov, številom opravljenih testnih primerov, številom neuspešnih testnih primerov in številom preskočenih testnih primerov.
  • Več testnih primerov je lažje združiti, če jih pretvorite v datoteko testng.xml. V katerem lahko določite prioritete, kateri testni primer je treba najprej izvesti.
  • Isti testni primer je mogoče večkrat izvesti brez zank, samo s pomočjo ključne besede, imenovane "invocation count".
  • Z uporabo testng lahko izvedete več testnih primerov v več brskalnikih, tj. Navzkrižno brskanje.
  • Okvir TestNG je mogoče enostavno integrirati z orodji, kot so TestNG Maven, Jenkins itd.
  • Pripombe, uporabljene pri preizkušanju, je zelo enostavno razumeti, na primer: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver nima izvornega mehanizma za ustvarjanje poročil. TestNG lahko ustvari poročilo v berljivi obliki, kot je prikazana spodaj.
  • TestNG poenostavlja kodiranje testov. V naših testih ni več potrebna statična glavna metoda. Zaporedje dejanj urejajo lahko razumljivi pripisi, ki ne zahtevajo, da so metode statične.
  • Neulovljene izjeme TestNG samodejno obdela, ne da bi predčasno zaključil preskus. Te izjeme so poročane kot neuspeli koraki v poročilu.

Prednosti TestNG pred JUnit

Tri pomembne prednosti TestNG-ja pred JUnit-om so:

  • Pripise je lažje razumeti
  • Testne primere lahko lažje razvrstimo v skupine
  • Možno je vzporedno testiranje

Pripisi v TestNG so vrstice kode, ki lahko nadzorujejo izvajanje metode pod njimi . Pred njimi je vedno znak @. Zelo zgoden in hiter primer TestNG je tisti, ki je prikazan spodaj.

O opombah bomo razpravljali kasneje v razdelku "Pripombe, ki se uporabljajo v TestNG", zato je povsem v redu, če zgoraj še ne razumete zgornjega primera TestNG. Zaenkrat je pomembno opozoriti, da je pripise v TestNG lažje kodirati in razumeti kot v JUnit.

Možnost vzporednega izvajanja testov je na voljo v programu TestNG, v programu JUnit pa ne, zato je okvir TestNG bolj zaželen od preizkuševalcev, ki uporabljajo mrežo Selenium.

Ustvarite testni primer z uporabo pripisov TestNG

Zdaj se bomo naučili, kako ustvariti svoj prvi testni primer z uporabo TestNG Annotations v selenu:

Preden ustvarimo testni primer, najprej nastavimo nov projekt TestNG v programu Eclipse in ga poimenujmo kot "FirstTestNGProject".

Vzpostavitev novega projekta TestNG

1. korak: Kliknite Datoteka> Novo> Projekt Java

2. korak: Vnesite "FirstTestNGProject" kot ime projekta in kliknite Naprej.

3. korak: Zdaj bomo začeli uvažati knjižnice TestNG v naš projekt. Kliknite zavihek "Knjižnice" in nato "Dodaj knjižnico"

... "

4. korak: V pogovornem oknu Dodaj knjižnico izberite "TestNG" in kliknite Naprej.

5. korak: kliknite Dokončaj.

Opazite, da je TestNG vključen na seznam knjižnic.

6. korak: Zdaj bomo dodali datoteke JAR, ki vsebujejo selenium API. Te datoteke najdete v gonilniku odjemalca Java, ki smo ga prenesli s spletnega mesta http://docs.seleniumhq.org/download/, ko smo v prejšnjih poglavjih namestili Selenium in Eclipse.

Nato se pomaknite do mesta, kjer ste postavili datoteke Selenium JAR.

Po dodajanju zunanjih JAR-ov mora biti zaslon videti tako.

7. korak: Kliknite Dokončaj in preverite, ali je naš FirstTestNGProject viden v oknu Raziskovalec paketov Eclipse.

Kako ustvariti novo testno datoteko TestNG

Zdaj, ko smo končali z nastavitvijo našega projekta v tej vadnici za TestNG, ustvarimo novo datoteko TestNG.

1. korak: Z desno miškino tipko kliknite mapo paketov "src" in izberite Novo> Drugo

...

2. korak: Kliknite mapo TestNG in izberite možnost "TestNG class". Kliknite Naprej.

3. korak: Vnesite spodnje vrednosti v ustrezna vnosna polja in kliknite Dokončaj. Upoštevajte, da smo datoteko Java poimenovali kot "FirstTestNGFile".

Eclipse bi moral samodejno ustvariti predlogo za našo datoteko TestNG, prikazano spodaj.

Kodiranje našega prvega primera testnega primera NG

Ustvarimo zdaj naš prvi testni primer, ki bo preveril, ali je domača stran Mercury Tours pravilna. Vnesite kodo, kot je prikazano v spodnjem primeru TestNG:

paket prvi testngpaketa;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni gonilnik WebDriver;@Testpublic void verifyHomepageTitle () {System.out.println ("zagon brskalnika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.get (baseUrl);String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (dejanski naslov, pričakovani naslov);driver.close ();}}

Upoštevajte naslednje.

  • TestNG ne zahteva, da imate metodo main ().
  • Metode niso nujno statične.
  • Uporabili smo pripis @Test. @Test se uporablja za dokazovanje, da je metoda v njem testni primer . V tem primeru smo za testni primer nastavili metodo verifyHomepageTitle (), zato smo nad njo postavili pripis »@Test«.
  • Ker v TestNG uporabljamo pripise, smo morali uvoziti paket org.testng.annotations. *.
  • Uporabili smo razred Assert. Razred Assert se uporablja za izvajanje postopkov preverjanja v TestNG . Če ga želimo uporabiti, moramo uvoziti paket org.testng.Assert.

V eni datoteki TestNG imate lahko več testnih primerov (torej več pripisov @Test). To bo podrobneje obravnavano kasneje v poglavju "Pripisi, uporabljeni v TestNG."

Izvajanje testa

Če želite zagnati test, preprosto zaženite datoteko v Eclipse, kot običajno. Eclipse bo zagotovil dva izhoda - enega v oknu konzole in drugega v oknu TestNG Results.

Preverjanje poročil, ki jih je ustvaril TestNG

Okno konzole v programu Eclipse daje besedilno poročilo o rezultatih naših testnih primerov, medtem ko nam okno Rezultati TestNG daje grafično poročilo.

Ustvarjanje poročil HTML

TestNG ima možnost ustvarjanja poročil v obliki HTML.

1. korak: Po zagonu datoteke FirstTestNGFile, ki smo jo ustvarili v prejšnjem razdelku, z desno miškino tipko kliknite ime projekta (FirstTestNGProject) v oknu Raziskovalec projektov in kliknite možnost »Osveži«.

2. korak: Upoštevajte, da je bila ustvarjena mapa "test-output". Razširite jo in poiščite datoteko index.html. Ta datoteka HTML je poročilo o rezultatih zadnjega preizkusa.

3. korak: Dvokliknite datoteko index.html, da jo odprete v vgrajenem spletnem brskalniku Eclipse. To stran lahko osvežite kadar koli po ponovnem zagonu testa, tako da preprosto pritisnete F5, tako kot v običajnih spletnih brskalnikih.

Pripisi, uporabljeni v TestNG

V prejšnjem razdelku ste se seznanili s pripisom @Test. Zdaj bomo preučevali naprednejše pripise in njihovo uporabo.

Več testnih primerov

V eni datoteki TestNG lahko uporabimo več pripisov @Test. Privzeto se metode, označene z @Test, izvajajo po abecedi. Glejte spodnjo kodo. Čeprav metode c_test, a_test in b_test v kodi niso razporejene po abecedi, bodo izvedene kot take.

Zaženite to kodo in na ustvarjeni strani index.html kliknite »Kronološki pogled«.

Parametri

Če želite, da se metode izvajajo v drugačnem vrstnem redu, uporabite parameter "prioriteta". Parametri so ključne besede, ki spreminjajo funkcijo pripisa .

  • Parametri zahtevajo, da jim dodelite vrednost. To storite tako, da poleg njih postavite in nato vrednost.
  • Parametri so zaprti v par oklepajev, ki so postavljeni takoj za pripisom, kot je spodnji delček kode.

TestNG bo izvedel pripis @Test z najnižjo vrednostjo prioritete do največje. Ni treba, da so vaše prednostne vrednosti zaporedne.

Poročilo TestNG HTML bo potrdilo, da so bile metode izvedene na podlagi naraščajoče vrednosti prednosti.

Več parametrov

@Test ima poleg "prioritet" še en parameter, imenovan "alwaysRun", ki ga lahko nastavite samo na "true" ali "false". Če želite v enem pripisu uporabiti dva ali več parametrov, jih ločite z vejico , kot je prikazana spodaj.

@Test (prioritet = 0, alwaysRun = true)

@BeforeTest in @AfterTest

@BeforeTest

metode pod tem pripisom bodo izvedene pred prvim testnim primerom v datoteki TestNG .

@AfterTest

metode pod tem pripisom bodo izvedene po izvedbi vseh testnih primerov v datoteki TestNG .

Upoštevajte spodnjo kodo.

paket prvi testngpaketa;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni gonilnik WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("zagon brskalnika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (dejanski naslov, pričakovani naslov);}@AfterTestjavna praznina terminateBrowser () {driver.close ();}}

Z uporabo logike, predstavljene v zgornji tabeli in kodi, lahko predvidimo, da je zaporedje, po katerem se bodo izvajale metode:

  • 1. st - launchBrowser ()
  • 2 nd - verifyHomepageTitle ()
  • 3. mesto - terminateBrowser ()

Postavitev blokov pripisov je mogoče zamenjati, ne da bi to vplivalo na kronološki vrstni red, po katerem se bodo izvajali . Razumejmo s primerom TestNG in poskusimo prerazporediti bloke pripisov tako, da bi bila vaša koda podobna spodnji.

paket prvi testngpaketa;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;javni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni gonilnik WebDriver;@AfterTest // Jumbledjavna praznina terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("zagon brskalnika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledpublic void verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (dejanski naslov, pričakovani naslov);}}

Zaženite zgornjo kodo in opazite to

@BeforeMethod in @AfterMethod

@BeforeMethod

metode pod tem pripisom bodo izvedene pred vsako metodo v vsakem testnem primeru .

@AfterMethod

metode pod tem pripisom bodo izvedene po vsaki metodi v vsakem testnem primeru.

Recimo, da v Mercury Tours radi preverimo naslove ciljnih strani spodnjih povezav.

Tok našega testa bi bil:

  • Pojdite na domačo stran in preverite njen naslov.
  • Kliknite REGISTRACIJA in preverite naslov ciljne strani.
  • Vrnite se na domačo stran in preverite, ali ima še vedno pravi naslov.
  • Kliknite PODPORA in preverite naslov ciljne strani.
  • Vrnite se na domačo stran in preverite, ali ima še vedno pravi naslov.

Spodnja koda prikazuje, kako se @BeforeMethod in @AfterMethod uporabljata za učinkovito izvajanje zgoraj omenjenega scenarija.

paket prvi testngpaketa;uvoz org.openqa.selenium. *;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Testjavni razred firsttestngfile {javni String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";javni gonilnik WebDriver;javni niz se pričakuje = null;javni niz dejansko = null;@BeforeTestpublic void launchBrowser () {System.out.println ("zagon brskalnika firefox");System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String očekujeTitle = "Dobrodošli: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (dejanski naslov, pričakovani naslov);}@Test (prioriteta = 0)javni register neveljavnih () {driver.findElement (By.linkText ("REGISTER")). click ();pričakovano = "Registriraj se: Mercury Tours";dejansko = driver.getTitle ();Assert.assertEquals (dejansko, pričakovano);}@Test (prioriteta = 1)javna podpora za neveljavnost () {driver.findElement (By.linkText ("PODPORA")). click ();pričakovano = "V izdelavi: živo srebro";dejansko = driver.getTitle ();Assert.assertEquals (dejansko, pričakovano);}@AfterMethodjavna void goBackToHomepage () {driver.findElement (By.linkText ("Domov")). click ();}@AfterTestjavna praznina terminateBrowser () {driver.close ();}}

Po izvedbi tega testa mora TestNG sporočiti naslednje zaporedje.

Preprosto povedano, @BeforeMethod mora vsebovati metode, ki jih morate zagnati pred vsakim testnim primerom, medtem ko mora @AfterMethod vsebovati metode, ki jih morate zagnati po vsakem testnem primeru.

Povzetek opomb TestNG

@BeforeSuite : Označena metoda se bo zagnala, preden se bodo zagnali vsi testi v tej zbirki.

@AfterSuite : Pripisana metoda se bo zagnala po tem, ko bodo v tej zbirki zagnani vsi testi.

@BeforeTest : Označena metoda se bo zagnala, preden se zažene katera koli testna metoda, ki spada v razrede znotraj oznake.

@AfterTest : Pripisana metoda se bo zagnala, ko bodo zagnane vse preskusne metode, ki spadajo v razrede znotraj oznake.

@BeforeGroups : Seznam skupin, do katerih se bo ta način konfiguracije pred tem izvajal. Zagotovljeno je, da se ta metoda izvaja tik pred priklicem prve preskusne metode, ki pripada kateri koli od teh skupin.

@AfterGroups : Seznam skupin, po katerih se bo ta način konfiguracije zagnal. Zagotovljeno je, da se bo ta metoda izvajala kmalu po tem, ko bo priklicana zadnja preskusna metoda, ki spada v katero koli od teh skupin.

@BeforeClass : Pripisana metoda se bo zagnala, preden bo priklicana prva preskusna metoda v trenutnem razredu.

@AfterClass : Pripisana metoda se bo zagnala, ko bodo izvedene vse preskusne metode v trenutnem razredu.

@BeforeMethod : Označena metoda se bo zagnala pred vsako preskusno metodo.

@AfterMethod : Pripisana metoda se bo zagnala po vsaki preskusni metodi.

@Test : Označena metoda je del testnega primera

Zaključek

  • TestNG je testni okvir, ki omogoča lažje razumevanje testov Selenium in ustvarjanje enostavno razumljivih poročil.
  • Glavne prednosti TestNG pred JUnit so naslednje.
    • Pripise je lažje uporabljati in razumeti.
    • Testne primere lahko lažje razvrstimo v skupine.
    • TestNG nam omogoča ustvarjanje vzporednih testov.
  • Okno konzole v Eclipse ustvari rezultat na podlagi besedila, medtem ko je okno TestNG bolj uporabno, ker nam daje grafični izid rezultata testa in druge pomembne podrobnosti, kot so:
    • Izvedbe vsake metode.
    • Kronološki vrstni red izvedbe metod
  • TestNG lahko ustvarja poročila na osnovi HTML.
  • Pripisi lahko uporabljajo parametre, tako kot običajne metode Java TestNG.
  • TestNG Dataprovider je način za posredovanje parametrov v preskusno funkcijo, ki v enem primeru prenese različne vrednosti v testnih primerih.