Selenium WebDriver: TestNG za upravljanje testnih primerov in ustvarjanje poročil



Ta vadnica za Selenium WebDriver vam bo pomagala razumeti potrebo po uporabi TestNG s selenijem za upravljanje testnih primerov in ustvarjanje podrobnih poročil o testih.

V prejšnjem blogu sem vas naučil, kako izvesti prvi test Selenium WebDriver. V tem blogu bom obravnaval napredne koncepte Selenium WebDriver. Že nekajkrat sem omenil, da ima Selenium WebDriver omejitve glede vodenja testnih primerov in ustvarjanja poročil o testih. Torej, kaj je alternativa? Tako priljubljeno orodje, kot je selenij, mora vsekakor imeti rešitev, kajne? Seveda! Za premagovanje te omejitve lahko uporabimo kombinacijo selena in TestNG, kar bo tema razprave v tem blogu.

razlika med izvedbami in razširitvami jave

Če ste selenij šele nov in želite uvod v osnovne koncepte, lahko pot začnete od tu: ? Vendar pa lahko drugi začnejo s testNG za selen iz tega spletnega dnevnika.Vedeti morate tudi, da organizacije aktivno lovijo strokovnjake s , zaradi česar je preizkuševalcev programske opreme pomembno znanje.





Razvijalci programske opreme po vsem svetu se bodo soglasno strinjali, da pisanje kode v testnih primerih prihrani dobršen del njihovega časa za odpravljanje napak. Zakaj? To je zato, ker testni primeri pomagajo pri ustvarjanju robustne kode brez napak. Kako to naredi? Z razdelitvijo celotne kode na manjše testne primere in nato z ocenjevanjem vsakega od teh testnih primerov, da preide / ne uspe, lahko ustvarimo kodo brez napak. Ker Selenium v ​​testnih primerih ne podpira izvajanja kode, moramo za isto uporabiti TestNG. Tu se TestNG prilega okvirju Selenium.

TestNG pomeni Preizkusite naslednjo generacijo in je odprtokodni okvir za avtomatizacijo preskusov, ki ga navdihujejo JUnit in NUnit. No, ne samo navdih, ampak nadgradnja teh dveh okvirov. Torej se lahko vprašate, kakšna je nadgradnja tukaj?Nadgradnja s TestNG je v tem, da zagotavlja dodatne funkcije, kot so: testne opombe, razvrščanje v skupine, določanje prioritet, parametriranje in tehnike zaporedja v kodi, kar prej ni bilo mogoče.



Poleg upravljanja testnih primerov lahko z uporabo TestNG dobite celo podrobna poročila o testih. V povzetku bo prikazan testni primer, ki ni uspel, skupaj s skupino, katere del je bil, in razredom, v katerega spada. Ko je mogoče napake natančno locirati na ta način, jih je mogoče takoj odpraviti na olajšanje razvijalcev. Spodnja slika prikazuje delovanje TestNG.

testng - selenov spletni pogon

Torej, kako TestNG opravi delo? Na to vprašanje bomo odgovorili vnaslednji odsek tega bloka z vajami za Selenium WebDriver, kjer bom razpravljal o tem, kako upravljati različne testne primere s pomočjo TestNG.



Selen WebDriver s testNG

Testne primere lahko definirate in vodite na enega od naslednjih načinov:

  1. Preizkusni pripisi
  2. Prednostno razvrščanje
  3. Onemogočanje testnih primerov
  4. Odvisnost metode
  5. Združevanje v skupine
  6. Trditve
  7. Ustvarjanje poročila

Naj začnem razlagativsako od teh funkcionalnosti.

Preizkusni pripisi

Najprej si zastavimo to vprašanje: Zakaj moramo uporabljati pripise? Kdaj jih lahko uporabimo? Pripisi v seleniju se uporabljajo za nadzor nad naslednjo izvedeno metodo. Testne opombe so definirane pred vsako metodo v testni kodi. Če nobena metoda nima predpone z opombami, bo ta metoda prezrta in ne bo izvedena kot del testne kode. Za njihovo določitev je treba metode preprosto označiti z „ @Test ‘. Oglejte si na primer spodnji delček kode.

paket testng import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.annotations.AfterClass import org.testng.annotations.AfterMethod import org.testng.annotations.BeforeClass import org.testng.annotations .BeforeMethod import org.testng.annotations.Test javni razred TestAnnotations {@Test public void myTestMethod () {System.out.println ('Inside method: - myTestMethod') WebDriver driver = new FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') Niz naslova = driver.getTitle () System.out.println (title) driver.quit ()} @BeforeMethod public void beforeMethod () {System.out.println (' This kos kode se izvede pred metodo: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod () {System.out.println (' Ta del kode se izvede po metodi: - myTestMethod ')} @BeforeClass javna praznina predClass () {Syste m.out.println ('Ta del kode se izvrši pred izvedbo razreda')} @AfterClass public void afterClass () {System.out.println ('Ta del kode se izvede po izvedbi razreda')} }

V zgornji kodi bi opazili, da nisem opredelil 'glavne' metode. Vendar imam opredeljenih 5 drugih metod. So 'myTestMethod', 'beforeMethod', 'afterMethod', 'beforeClass' in 'afterClass'. Upoštevajte tudi vrstni red definiranja metod v kodi, ker se ne bodo izvajale v istem vrstnem redu.

Metoda 'myTestMethod' je označena s @Test , in to je glavna metoda ali del kode, ki jo je treba izvesti. Druge označene metode se bodo izvajale pred in po izvedbi te metode. Ker je 'beforeMethod' označen z @BeforeMethod , bo izveden, preden se izvede 'myTestMethod'. Podobno je izraz 'afterMethod' označen z @AfterMethod , zato bo izveden po 'myTestMethod'.

Vendar je oznaka 'beforeClass' označena s @BeforeClass , kar pomeni, da se bo izvedel še preden se izvede sam razred. Ime našega razreda je tukaj TestAnotacije , zato bo pred začetkom izvajanja razreda izveden del kode znotraj 'beforeClass'. Podobno je izraz 'afterClass' označen z @AfterMethod , in bo tako izveden po pouku TestAnotacije se izvrši.

Če imate še vedno zmedo glede vrstnega reda izvrševanja, vam bo spodnji delček zagotovo pomagal.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod 5. Test 6. AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

Rezultat zgornje kode bo:

Ta del kode se izvede pred izvedbo razreda Ta del kode se izvede pred metodo: - myTestMethod Inside method: - myTestMethod 1493192682118 geckodriver INFO Listening on 127.0.0.1: 13676 1493192682713 mozprofile :: profile INFO Uporaba poti profila C: UsersVardhanAppDataLocalTemp ust_st .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Zagon brskalnika C: Programske datoteke (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO Povezava z Marionetto na localhost: 59792 [datoteka GPU: pipe: c / 109: c /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, vrstica 346 1493192688316 Marionet INFO Poslušanje na pristanišču 59792 26. april 2017 13:14:49 org. openqa.selenium.remote.ProtocolHandshake createSession INFO: Zaznano narečje: W3C Napaka JavaScript: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, vrstica 1: TypeError: document.getElementsByTagNa me (...) [0] je nedefiniran okvir selena | Practiceform 1493192695134 Marionette INFO Nove povezave ne bodo več sprejete 26. april 2017 13:14:57 org.openqa.selenium.os.UnixProcess uniči TEŽKO: Proces ni mogoče ubiti s PID 6724 Ta del kode se izvede po metodi: - myTestMethod Ta del kode se izvede po izvedbi razreda PASSED: myTestMethod =================================== ============ Privzeti test Zaženi testi: 1, Napake: 0, Preskoči: 0 ======================== ======================= ============================= ==================== Privzeti paket Skupno število preizkusov: 1, Napake: 0, Preskoki: 0 =============== ================================

Kot lahko vidite iz zgornjega izhoda, je število preizkusov 1 in neuspešnih 0. To pomeni, da je koda uspešna. Tudi vrstni red izvajanja metod bo v vrstnem redujazprej omenjeno.

Ko zaženete to kodo v računalniku, bo Selenium WebDriver ustvaril brskalnik Firefox, se pomaknil do obrazca za prakso Selenium Framework, zaprl primerek brskalnika in prikazal enake rezultate, kot je prikazano zgoraj v IDE Eclipse.

V svoji kodi sem uporabil samo 5 različnih pripisov. Obstaja pa še veliko pripisov, s katerimi lahko nadzorujemo naslednjo izvedeno metodo. Celoten seznam pripisov je razložen vtabelaspodaj:

@BeforeSuite - Metoda, označena z @BeforeSuite se bo izvajal, preden se bodo zagnali vsi testi v zbirki.

@AfterSuite - Metoda, označena z @AfterSuite se bo zagnal po izvedbi vseh preskusov v zbirki.

@BeforeTest - Metoda, označena z @BeforeTest se bo izvajal, preden se zažene katera koli testna metoda, ki pripada razredu.

@AfterTest - Metoda, označena z @AfterTest se bo zagnal po tem, ko bodo zagnane vse testne metode, ki pripadajo razredu.

@BeforeGroup - Metoda, označena z @BeforeGroup bo tekel, preden se zažene vsaka skupina.

@AfterGroup - Metoda, označena z @AfterGroup bo tekel po zagonu vsake skupine.

@BeforeClass - Metoda, označena z @BeforeClass se bo izvajal enkrat, preden bo priklicana prva preskusna metoda v trenutnem razredu.

@Po pouku - Metoda, označena z @Po pouku se bo izvajal enkrat, ko bodo zagnane vse preskusne metode v trenutnem razredu.

@BeforeMethod - Metoda, označena z @BeforeMethod se bo izvajal, preden se zažene katera koli preskusna metoda v razredu.

@AfterMethod - Metoda, označena z @AfterMethod se bo izvajal po zagonu vsake preskusne metode v razredu.

@Test - Metoda, označena z @Test je glavna preskusna metoda v celotnem programu. Okoli te metode se bodo izvajale druge označene metode.

Posnetek zaslona poročila TestNG jespodaj: -

Prednostno razvrščanje

Govorili smo o tem, kako različne metode, ki jih je mogoče opredeliti tako, da se izvajajo okoli @Test metoda. Kaj pa, če jih imate več @Test in želite med njimi določiti vrstni red izvrševanja?

kakšna je razlika med html in xml

V tem primeru lahkoPjih razvrstite tako, da dodelite številko označenim testnim primerom. Manjša je številka, večja je prednost. Prednost lahko določimo kot parametre med definiranjem testnih primerov. Če pa nobena prednostna naloga ni dodeljena, se označene preskusne metode izvedejo po abecednem vrstnem redu preskusov. Oglejte si parametre testnih pripisov v spodnjem deluKoda.

@Test (Priority = 2) javna statična praznina FirstTest () {system.out.println ('To je testni primer številka dve zaradi prioritete št.2')} @Test (Priority = 1) javna statična void SecondTest () { system.out.println ('To je testni primer številka ena zaradi prioritete št. 1')} @Test public static void FinalTest () {system.out.println ('To je zadnji testni primer, ker ni prioritete') )}

Onemogočanje testnih primerov

Naj vam pokažem še nekaj zanimivega. Kaj če imate kodo, ki obsega milijon vrstic, sestavljeno iz stotine testnih primerov, in želite onemogočiti samo eno preskusno metodo? Namesto tega vam ni treba izbrisati nobenega dela kode, lahko preprosto onemogočimo to preskusno metodo.

Dejanje onemogočanja testnega primera se izvede tudi s pomočjo parametrov. Lahko nastavimo omogočeno atribut 'false'. Privzeto bodo omogočeni vsi testni primeri, zato jih ni treba določiti vsakič, ko pišemo test. Oglejte si parametre tretje in četrte metode v spodnjem deluKoda.

@Test (Priority = 2, enabled = True) public static void FirstTest () {system.out.println ('To je testni primer številka dva zaradi prednostne naloge 2')} @Test (Priority = 1, enabled = True ) public static void SecondTest () {system.out.println ('To je testni primer številka ena zaradi prioritete št. 1')} @Test (omogočeno = false) public static void SkippedTest () {system.out.println ( 'To je preskočen testni primer, ker je bil onemogočen')} @Test (omogočeno = True) javna statična void FinalTest () {system.out.println ('To je zadnji testni primer, ki je omogočen in nima prednostne naloge ')}

Odvisnost metode

Zdaj v primeru, da želite, da se del kode izvede samo, če izpolnjuje pogoj ali le, če se določena metoda uspešno izvede, lahko to storimo z uporabo zavisiOnMethod (). To je v bistvu pogoj odvisnosti metode, kjer se bo metoda izvajala, odvisno od druge metode. Če dodatno nastavimo vednoRun atribut true, potem bo metoda izvedena ne glede na pogoj neuspešnosti / prenosa odvisne metode. Oglejte si kodo v spodnjem delčku kode.

@Test javna statična void FirstTest () {system.out.println ('To je prvi testni primer, ki se izvede')} @Test (dependOnMethods = {'FirstTest'}) javna statična void SecondTest () {system.out. println ('To je drugi testni primer, ki ga je treba izvesti. To je odvisna metoda')} @Test (dependOnMethods = {'SecondTest'}) public static void FinalTest () {system.out.println ('To je zadnji test Primer Vseeno bo izveden. ')}

To nas pri preizkusu pripelje do še enega pomembnega vidikapripisov, ki je Združevanje v skupine .

Združevanje v skupine

Zdaj morate vedeti, da bo v kodi obstajal več načinov kot del našega testnega primera. Recimo, da obstaja 100 testnih primerov, vendar želimo v naslednjem testu izvesti le 20 testnih primerov. Mislite, da lahko to storimo? Seveda lahko.

Lahko uporabimo skupin atribut za ta namen. Številnim testnim primerom lahko dodelimo ime skupine in se kasneje odločimo za izvedbo skupine namesto celotne kode. Oglejte si spodnji delček kode, da ga razumetekako ustvariti skupine.

@Test (groups = {'MyGroup'}) public static void FirstTest () {system.out.println ('To je del skupine: MyGroup')} @Test (groups = {'MyGroup'})) public static void SecondTest () {system.out.println ('To je tudi del skupine: MyGroup')} @Test javna statična void ThirdTest () {system.out.println ('Ampak, to ni del Skupina: MyGroup ')}

Trditve TestNG

To nas zdaj pripelje do naslednje teme v TestNG, ki je trditev. Kot že ime pove, lahko trditve v testnih metodah uporabimo za določitev pogoja za uspešno / neuspešno preizkušanje. Na podlagi resničnega / napačnega stanja izjave bodo testi prestali / neuspeli.

V spodnjo kodo sem vključil 3 preskusne metode, pri čemer imata prva in tretja metoda pogoj, druga metoda pa neuspeh. Kodo si oglejte sami.

paket testng import org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.AfterMethod trditve javnega razreda {@BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} public boolean isEqual (int a, int b) {if (a == b ) {return true} else {return false}} @Test public void testEquality1 () {Assert.assertEquals (true, isEqual (10, 10)) System.out.println ('To je pogoj za sprejem')} @Test public void testEquality2 () {Assert.assertEquals (true, isEqual (10, 11)) System.out.println ('To je pogoj napake')} @Test public void getTitle () {Gonilnik WebDriver = nov gonilnik FirefoxDriver (). get ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (title, 'Gmail') System.out.println ('To je spet pogoj za sprejem')} }

Ko pogledate poročilo, ki se ustvari po tej izvedbi, boste opazili, da je od treh preizkusov eden neuspešen in dva opravljena. Druga pomembna točka, ki jo je treba opozoriti, je, da se v primeru, ko trditev ne uspe, drugi ukazi / vrstice kode v tem testu preskočijo. Šele ko je trditev uspešna, se v tem preizkusu izvede naslednja vrstica kode. Oglejte si spodnji izhod kje system.out.println je izvedel samo za prvo in tretjo metodo.

1493277977348 geckodriver INFO Poslušanje na 127.0.0.1:47035 1493277977993 mozprofile :: profil INFO Uporaba profila profila C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette INfo Startz Infoz Vzhodni program Firefo. Povezava z Marionette na localhost: 50758 [GPU 6920] OPOZORILO: napaka cevi: 109: datoteka c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, vrstica 346 1493277981742 Marionette INFO Poslušanje na pristanišču 50758 27. april 2017 12:56:22 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Zaznano narečje: W3C To je spet pogoj za prehod To je pogoj za prehod PASSED: getTitle PASSED: testEquality1 FAILED: testEquality2 java.lang.AssertionError: pričakovano [false], vendar najdeno [true] na org.testng.Assert.fail (Assert.java:93) na org.testng.Assert.failNotEquals (Assert.java: 512) na org.testng.Assert.assertE qualsImpl (Assert.java:134) na org.testng.Assert.assertEquals (Assert.java:115) na org.testng.Assert.assertEquals (Assert.java:304) na org.testng.Assert.assertEquals (Assert.java : 314) at testng.Assertions.testEquality2 (Assertions.java:38) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) at sun.reflect.DelegorkeMethodAnject. Vir) na java.lang.reflect.Method.invoke (neznan vir) na org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) na org.testng.internal.Invoker.invokeMethod (Invoker.java:661) na org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) na org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) na org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:126 ) na org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) na org.testng.TestRunner.privateRun (TestRunner.java:744) na org.testng.TestRu nner.run (TestRunner.java:602) na org.testng.SuiteRunner.runTest (SuiteRunner.java:380) na org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) na org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) na org.testng.SuiteRunner.run (SuiteRunner.java:289) na org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) na org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) na org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) na org.testng.TestNG.runSuitesLocally (TestNG.java:1226) na org.testng.TestNG.runSuites (TestNG.java:1144) na org.testng. TestNG.run (TestNG.java:1115) na org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) na org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) na org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ========================================= ======== Privzeti test Zaženi testi: 3, Napake: 1, Preskoči: 0 ============================ =================== ================================= ================ Privzeti paket Skupno opravljenih preskusov: 3, Napake: 1, Preskoči: 0 ===================================== ============

To je konec konceptov, povezanih z obvladovanjem testnih primerov. Ostala nam je še ena tema, to je generiranje poročil. Ustvarjanje poročil je zadnja tema v tej vadnici za Selenium WebDriver, ker je mogoče poročila ustvariti šele potesti se izvajajo.

prenos datotek v primerek ec2 windows -

Ustvarjanje poročila

Najpomembnejše, na kar morate biti pozorni, je, da bo poročilo ustvarjeno samo z datoteko .xml. To pomeni, naj bo to metoda, razred ali skupina, ki jo želite preizkusiti, vse pa je treba določiti v datoteki .xml.

Torej, najprej lahko v svojem projektu ustvarite novo mapo in v njej ustvarite novo datoteko ter datoteki daste ime in jo shranite s pripono .xml. Novo mapo in datoteko lahko ustvarite z desnim klikom na raziskovalec paketov. Ko ustvarite datoteko, pojdite na zavihek vira z dna okna in vnesite konfiguracije, kot je določeno v spodnjem delčku.

 

Prva vrstica je definicija vrste dokumenta XML. To je standardno in obvezno za vsa poročila o preskusih. Toda druge vrstice so precej samoumevne. Odprte oznake sem uporabil za zbirko, test, razrede in razred. Oznaka razredov ima lahko en ali več razredov. Tako ga lahko uporabimo, če želimo ustvariti poročilo, kjer testiramo več razredov. To je priročno predvsem za razvijalce, ki želijo preizkusiti dolg kos kode.

Kakor koli že, ko se vrnete na naše poročilo, lahko po odprtju teh oznak poimenujete vsak paket ali preizkus ali razred in ne pozabite zapreti vseh odprtih oznak. Ime svojega apartmaja sem dal kot TestNG , ime testa kot Preizkus Pripisi in ime predavanja kot testng.TestAnnotations. Upoštevajte, da je ime predavanja v obliki ' packagename.classname ’ .

Ko zaženete to datoteko kot paket TestNG, se bo izvedba začela in dobili boste podrobna poročila o preizkusu. Rezultat preizkusa boste dobili na zavihku konzole, rezultat paketa paketa pa na naslednjem zavihku. Poročilo, ki sem ga ustvaril za izvajanje svoje kode, jevspodnji posnetek zaslona. Opazili boste, da tokrat obstaja ime zbirke, ime testa, ime razreda, skupaj s časom, potrebnim za izvedbo vsakega od njih.

Če si želite ogledati poročilo HTML (poročilo o indeksu ali poročilo, ki ga lahko pošljete po e-pošti), pojdite na test-output v imeniku projekta v vašem delovnem prostoru. Če jih kliknete, si lahko poročila ogledate tudi pozneje. Spodaj so njihovi posnetki zaslona.

Poročilo o indeksu : -

Poročilo po e-pošti : -

Tako smo prišli do konca tega bloka z vadnicami za Selenium WebDriver. Čas je, da na koncu nastavite eclipse, namestite različne pakete Selenium, namestite TestNG in začnete s pisanjem testnih primerov.

Spodaj si lahko ogledate video tutorial Selenium WebDriver, na katerem so predstavljeni različni koncepti, razloženi v tem blogu.

Trening selena | Okvir TestNG za selen | Edureka

Ta video posnetek Edureka Selenium Training vas bo popeljal skozi podrobne podrobnosti o programu Selenium WebDriver. Ta vadbeni video o Seleniju je idealen tako za začetnike kot za profesionalce, ki želijo razčistiti osnove ukazov WebDriver in se naučiti, kako lahko TestNG uporabljamo s selenom za upravljanje različnih testnih primerov.

Če se želite naučiti selena in si ustvariti kariero na testni domeni, si oglejte naš interaktivni splet v živo tukaj je na voljo 24 * 7 podpora, ki vas vodi skozi celotno obdobje učenja.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje in se vam bomo javili.