testng annotations listeners
Ta vadnica pojasnjuje različne vrste pripisov in poslušalcev TestNG. Naučili se boste tudi, kako uporabljati opombe in poslušalce TestNG s primeri:
Tu bomo zagnali osnovni program TestNG z uporabo pripisov TestNG in si ogledali tudi vlogo poslušalcev TestNG in kako jih uporabiti pri testiranju.
=> Preberite serijo Easy TestNG Training Series.
Kaj se boste naučili:
Kaj so pripisi TestNG?
To so programska ali poslovna logika, ki se uporabljata za nadzor pretoka metod. V TestNG igrajo zelo pomembno vlogo. Te opombe se razlikujejo v vsakem projektu glede na zahteve. Pretok opomb ostaja enak v vseh programih, kljub različnim zahtevam.
Obstajajo različne vrste pripisov TestNG, ki olajšajo in izboljšajo TestNG kot JUnit. Vsak od teh pripisov se bo izvajal ob določenem dogodku v programu TestNG.
Vrste zapisov v TestNG
Spodaj so navedeni seznami pripisov in njihovi atributi, ki se uporabljajo v TestNG. Podrobno jih raziščimo in njihovo uporabo.
Prej
- @BeforeSuite: Ta metoda se bo izvedla, preden se bodo zagnali vsi testi v paketu.
- @BeforeTest: Ta metoda se bo izvedla, preden bo vsak paket preizkušen v zbirki.
- @BeforeClass: Ta metoda se bo izvedla pred prvo preskusno metodo v trenutnem razredu.
- @BeforeMethod: Ta metoda se bo izvedla pred vsako preskusno metodo.
- @BeforeGroups: Ta metoda se bo izvedla, preden bo navedena katera koli preskusna metoda iz navedene skupine.
- @Test : Označi razred ali metodo kot del testa. Lahko pa rečemo, da je metoda testna metoda.
Po
- @AfterSuite: Ta metoda se bo izvedla po izvedbi vseh testov v paketu.
- @AfterTest: Ta metoda se bo izvedla po objavi vsakega preskusnega odseka v zbirki.
- @Po pouku: Ta metoda se bo izvedla po zadnji preskusni metodi v razredu.
- @AfterMethod: Ta metoda se bo izvedla po izvedbi vsake preskusne metode.
- @AfterGroups: Ta metoda se bo izvedla po izvedbi zadnje preskusne metode določene skupine.
Tok dela opomb
Ko zaženemo datoteko TestNG.xml, se pripisi TestNG izvedejo v naslednjem zaporedju:
Pred Suite-> Pred preskusom-> Pred predavanjem-> Pred načinom-> @Test -> Po metodi-> Po pouku-> Po preizkusu-> Po paketu
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite @Test ima veliko drugih lastnosti, ki nam pomagajo pri učinkovitejšem izvajanju testnih primerov.
Spodaj so vrste atributov in njihovi opisi s primeri.
# 1) alwaysRun: Če je nastavljena na true, se ta metoda izvaja, tudi če je odvisna od metode, ki ni uspela.
Primer: Test (alwaysRun = true)
# 2) dataProvider : Prikaže ime ponudnika podatkov za to metodo. Ima samo atribute, to je ime. Uporabljamo ga lahko, ko programsko opremo preizkusimo z več nabori podatkov ob vhodnem času ali času izvajanja. To je znano tudi kot testiranje na podlagi podatkov. S tem atributom lahko izvedemo testiranje na podlagi podatkov.
Primer: @dataProvider (name = 'TestData')
# 3) dataProviderClass : Ta atribut vam omogoča, da določite razred ponudnika podatkov, ki bo vseboval ponudnika podatkov, ki ga bo uporabljala metoda @Test.
Primer: @Test (dataProvider = “Preizkus podatkov o strankah”, dataProviderClass = ClientDetailsTest.class)
# 4) dependOnGroups : Ta atribut je odvisen od seznama skupin, tj.preizkusna metoda se začne izvajati šele po izvedbi odvisnih skupin.
Opomba : Če kateri od testov v skupinah, ki so odvisne od tega, ne uspe, bo preskus preskočil.
Spodaj je primer:
@Test(groups= “homepage”) public void homepageTest(){ System.out.println('Home Page displayed successfully'); } @Test(groups= “transactionspage”) Public void transactionpageTest(){ System.out.println(“Transaction Page displayed successfully”); } @Test(dependsOnGroups={“homepage”, “transactionspage”}) public void dependOnGroupTest1(){ System.out.println(“dependency tested successful”); # 5) zavisiOnMethods : Ta pripis je odvisen od seznama metod. To pomeni, da se bo testna metoda začela izvajati šele po izvedbi odvisnih metod.
Opomba : Če kateri od preskusov odvisnih metod ne uspe, preskoči.
Primer:
@Test public void loginTest() { System.out.println(“Login Tested Successfully”); } @Test public void homepageTest() { System.out.println(“Home Page Tested Successfully”); } @Test(dependsOnMethods={“ loginTest”, “homepageTest”}) public void smokeTest() { System.out.println(“Smoke Tests were done successfully”);# 6) alwaysRun = true: Atribute v testni metodi lahko nastavimo na true in to bo prisilno, da se test izvede, tudi če so nekateri testi v skupini odvisni od neuspeha.
Na primer:
@Test public void launchAppTest() { System.out.println(“Application launched Successfully”); } @Test public void loginAppTest() { System.out.println(“Application logged in Successfully”); } @Test(dependsOnMethods={“launchAppTest”, “loginAppTest”}, alwaysRun=true) public void smokeTest() { System.out.println(“Smoke Test were done successfully”); } # 7) opis : Tu je opis metode. Na splošno vsebuje povzetek v eni vrstici.
Primer:
@Test(description = “Regression Test Summary”)# 8) omogočeno : Ta atribut pomaga pri določanju, ali želimo zagnati / izvršiti določeno preskusno metodo v trenutnem paketu / razredu ali ne. Včasih zaradi nekaterih razlogov ne želimo izvesti nekaj preskusov, kot je zahteva / funkcija, ki se pogosto spreminja, in ne želimo motiti trenutnega izvajanja te funkcije.
V teh primerih lahko ta test preprosto prezremo / onemogočimo tako, da to funkcijo nastavimo kot @Test (omogočeno = napačno).
Primer:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); } # 9) pričakovane izjeme : Ta atribut prikazuje seznam izjem, ki jih bo testna metoda vrgla v času izvajanja. Če za metodo ne pride do nobenih izjem ali katere koli druge izjeme, je test označen kot napaka.
Primer:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }# 10) skupine : Ta atribut se uporablja za določanje skupin, ki jim testna metoda pripada.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); } # 11) prednost : To pomaga pri določanju prednosti preskusnih metod, medtem ko se privzeta prednost začne z 0, preizkusi pa se izvedejo v naraščajočem vrstnem redu.
Primer:
@Test Public void launchApp(){ System.out.println(“Application was launched successfully”): } @Test (priority = 1) Public void loginApp(){ System.out.println(“Application logged in successfully”); } @Test (priority = 2) Public void checkTrans(){s System.out.println(“Checked Transactions successfully”); } Rezultati: Spodaj so prikazani rezultati glede na prioriteto, čeprav prvemu preizkusu ni bila dodeljena nobena številka, je bila prednostno nastavljena na 0 in izvedba je bila izvedena v naraščajočem vrstnem redu.
Opravljeno: launchApp
Opravljeno: loginApp
Opravljeno: checkTrans
# 12) časovna omejitev : Ta atribut pomaga pri določanju vrednosti časovne omejitve za test (običajno se uporablja v milisekundah). Če test zavzame več kot določeno vrednost časovne omejitve, je test označen kot neuspešen. To časovno omejitev lahko uporabimo za preizkus učinkovitosti, da zagotovimo, da se metoda vrne v razumnem času.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }# 13) invocationCount : Ta atribut pomaga pri določanju, kolikokrat je treba uporabiti preskusno metodo.
@Test(invocationCount = 5) public void loginTest() { WebDriver driver = new FirefoxDriver(); driver.get('http://www.google.com'); System.out.println('Page Title is ' + driver.getTitle()); driver.quit();Izhod:
Naslov strani je Google
Naslov strani je Google
Naslov strani je Google
Naslov strani je Google
Naslov strani je Google
# 14) invocationTimeOut: To je najdaljši čas (št. Milisekund), ki naj ga preizkus traja za vsa števila klicev. To metodo je treba uporabiti skupaj z metodo štetja klicev, sicer bi jo prezrli.
Primer:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }Zgornji primer kaže, da bo za izvajanje tega preizkusa trajalo skupno 4 sekunde, in vsakič, ko se preizkus sproži / zažene, bi trajalo 1 sekundo.
# 15) @DataProvider : Ta metoda pomaga pri zagotavljanju podatkov za preskusno metodo. Najprej moramo prijaviti metodo, ki jo označuje @DataProvider, nato pa jo uporabiti v zahtevani preskusni metodi z uporabo atributa “DataProvider” v pripisu @Test.
Ponudnik podatkov vrne matriko predmetov, zlasti dvodimenzionalno matriko predmetov () (). Prvo polje predstavlja nabor podatkov, drugo polje pa vsebuje parametre.
@DataProvider (name = “Test”) - Tu ime predstavlja ime ponudnika podatkov. Če ime ni podano, bo ime DataProviderja samodejno nastavljeno na ime metode.
Primer:
@DataProvider(name = “Name”) public object()() credentials(){ return new object ()() { { “Mohan”, “23”}, { “Shikhar”, “30”} }; } //Now we are calling the Data Provider object by its name @Test(DataProvider = “Name”) Public void testData(String sName, int age) { System.out.println(“Data is: (Name, age)”); }# 16) @Factory : Uporablja se za določanje metode kot tovarne za zagotavljanje objektov, ki jih bo TestNG uporabil za svoje preskusne razrede. Z uporabo @Factory lahko med izvajanjem ustvarimo dinamične teste, ki bi morali vrniti objekt polja.
Primer:
Vzemimo primer, da ga bolje razumemo. Ustvarili bomo dva razreda, to je FactorySample.Java in FactoryTest.Java
FactorySample.Java
public class FactorySample { @Test public void googleTest() { System.out.println(“Google was launched successfully”); } @Test public void gmailLogin() { System.out.println(“Gmail logged in successfully”); }FactoryTest.Java
public class FactoryTest { @Factory() public Object() testFact() { FactorySample fs = new FactorySample(2); fs(0) = new googleTest(); fs(1) = new gmailLogin(); return fs; } }Izhod : Google je bil uspešno zagnan
Gmail se je uspešno prijavil
Razlika med pripisoma @Factory in @DataProvider
Med obema opombama je osnovna razlika. Glede teh dveh pripisov je veliko zmede, na primer kje jih uporabiti in zakaj?
Poiščimo odgovore.
@DataProvider: Ta pripis bo parametriziral določeno preskusno metodo in izvedel preskus v določeni št. krat na podlagi podatkov, ki jih zagotavlja ta metoda.
Na primer, če sta dva parametra, se preskusna metoda izvede dvakrat. Če se na primer želimo vsakič prijaviti na spletno mesto z različnimi nabori uporabniških imen in gesel, je to koristno, saj moramo zagotoviti parametre za preizkušanje.
@Factory : To bo izvedlo vse preskusne metode, ki so prisotne v datoteki preizkusnega razreda, medtem ko uporabljate ločen primerek tega razreda. To je koristno, če želimo testni razred izvajati poljubno številokrat.
Na primer , če moramo preizkusiti prijavno funkcijo katere koli aplikacije ali spletnega mesta in ker moramo ta test izvesti večkrat, je bolje uporabiti @Factory, kjer lahko ustvarimo več primerkov testa in zaženemo teste.
Oglejmo si te primere, da bomo vedeli razliko.
Primer @DataProvider :
@DataProvider public Object()() message(){ return new Object ()(){{“Mihir” , new Integer (145632)}, {“Kumar”, new Integer (28242)}}; } @Test (dataProvider=”message”) public void PrintMsg(String name, Integer id){ System.out.println(“Names are: “+name+” “+id); } Opomba : V zgornjem programu smo navedli dva podatka in rezultat programa bi bil:
Imena so: Mihir 145632
Imena so: Kumar 28242
To kaže, da če povečamo število podatkov v metodi sporočil, se metoda tiskanja izvede enako število krat.
Primer tovarne :
TestNG Factory je zelo uporaben, če moramo izvesti več preizkusnih razredov z enim testnim razredom.
Poglejmo primer.
Za to moramo ustvariti dva preizkusna razreda z nekaj testnimi metodami v njih.
Testni podatki 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } } Testni podatki 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } } Zdaj moramo definirati metodo @Factory, ki vrne objektno matriko zgoraj določenih razredov.
Tovarniški program:
public class TestNGFactory { @Factory() public Object() getTestClass() { Object() tests = new Object(2); tests(0) = new Test Data 1(); tests(1) = new Test Data 2(); return tests; } } Izhod:
Preskusna metoda Test1
Preskusna metoda Test2
MENJEN: test1
MENJEN: test2
Poslušalci TestNG s tipi
Preprosto povedano, poslušalci poslušajo dogodek, definiran v skriptu Selenium, in se temu primerno obnašajo. Glavni namen je ustvariti dnevnike in prilagoditi poročila TestNG.
V programu TestNG je na voljo veliko vrst poslušalcev.
Na primer , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListner
Pri preizkušanju pa jih uporabimo le nekaj, kot je opisano spodaj:
# 1) ISuiteListener
To je poslušalec za testne suite. Sestavljen je iz dveh metod, tj. onStart () in onFinish () .
Vsakič, ko bomo implementirali ta poslušalec, bo zagotovil, da bo končni uporabnik pozval metode onStart () in onFinish () pred in po zagonu paketa TestNG.
Podrobnosti o metodi:
void onStart (paket ISuite) : Ta metoda se prikliče pred zagonom Suite Runner.
void onFinish (ISuite suite) : Ta metoda se prikliče po tem, ko je Suite Runner zagnal vse testne zbirke.
Primer:
@Override public void onStart(ISuite suite) { System.out.println(“TestNG Suite Starts”); } @Override public void onFinish(ISuite suite) { System.out.println(“TestNG Suite Finishes”); } # 2) ITestListener
Ta poslušalec deluje tako kot ISuiteListener. Vendar je edina razlika v tem, da pokliče pred in po preizkusu in ne Suite. Je poslušalec za testni tek in ta poslušalec ima v sebi sedem metod.
(i) onStart () :Ta metoda se pokliče po tem, ko se preizkusni razred ustvari in preden se pokliče katera koli konfiguracijska metoda.
Primer:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); } (ii) onFinish () :Ta metoda se pokliče po izvedbi vseh preskusov in klicanju vseh konfiguracijskih metod.
Primer:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); } (iii) onTestStart () :Ta metoda se prikliče vsakič, preden se sproži test. ITestResult je le delno napolnjen s sklici na razred, metodo, začetne milise in stanje.
Metoda: void onTestStart (rezultat ITestResult)
Primer:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); } (iv) onTestSuccess () :Ta metoda se prikliče vsakič, ko test uspe.
Metoda: void onTestSuccess (rezultat ITestResult)
Primer:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); } (v) onTestFailure () :Ta metoda se prikliče vsakič, ko test ne uspe.
Metoda: void onTestFailure (rezultat ITestResult)
Primer:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }(vi) onTestSkipped () :Ta metoda se sproži vsakič, ko preskus preskočite.
Metoda: void onTestSkipped (rezultat ITestResult)
Primer:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); } (vii) onTestFailedButWithinSuccessPercentage :Ta metoda se prikliče vsakič, ko metoda ni uspela, vendar je bila označena z odstotkom uspešnosti, napaka pa jo ohranja znotraj odstotka uspešnosti.
Metoda: void onTestFailedButWithinSuccessPercentage (rezultat ITestResult)
Primer:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); } # 3) IExecutionListener
To je poslušalec, ki spremlja začetek in konec izvajanja TestNG. Ima dve metodi, tj. onExecutionStart () in onExecutionFinish () .
Metoda onExecutionStart () se pokliče, preden TestNG začne izvajati suite, metoda onExecutionFinish () pa po izvedbi TestNG z izvajanjem vseh testnih zbirk.
Metoda:
void onExecutionStart ()
void onExecutionFinish ()
Primer:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }# 4) IInvokedMethodListener
Poslušalec se pokliče pred in po tem, ko TestNG prikliče metodo. Ta poslušalec se prikliče samo za konfiguracije in preskusne metode. V njej sta samo dve metodi, to je afterInvocation in beforeInvocation.
- pred pozivom: Prikličite pred vsako metodo.
- po pozivu: Pokličite po vsaki metodi.
Metoda:
void beforeInvocation (metoda IInvokedMethod, ITestResult testResult)
void afterInvocation (metoda IInvokedMethod, ITestResult testResult)
Primer:
@Override public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { System.out.println('before invocation of ' + method.getTestMethod().getMethodName()); } @Override public void afterInvocation(IInvokedMethod method, ITestResult testResult) { System.out.println('after invocation of ' + method.getTestMethod().getMethodName()); }# 5) IMethodInterceptor
Ta razred se uporablja za spreminjanje seznama testnih metod, ki jih bo TestNG izvajal. Z uporabo te metode lahko preuredimo seznam testnih metod.
Uporablja se samo za tiste metode, ki nimajo odvisnih oseb, in tiste metode, ki niso odvisne od nobene druge preskusne metode, bodo posredovane v parametrih. Ta vmesnik bo vrnil seznam preskusnih metod, ki jih je treba zagnati, vendar na drugačen način.
Metoda:
kako odpreti datoteko swf na
prestrezanje java.util.List (metode java.util.List, kontekst ITestContext)
Primer:
@Override public Listintercept(Listmethods, ITestContext context) { List result = new ArrayList(); for (IMethodInstance m : methods) { Test test = m.getMethod().getMethod().getAnnotation(Test.class); Setgroups = new HashSet(); for (String group : test.groups()) { groups.add(group); } if (groups.contains('sanity')) { result.add(m); } else { String testMethod = m.getMethod().getMethodName(); System.out.println(testMethod + ' not a SANITY test so not included'); } } return result; } # 6) IReporter
To stranke izvedejo za ustvarjanje poročila. Ta metoda se bo sprožila, ko se bo zagnala vsa zbirka, parametri pa bodo dali vse rezultate testa, ki so se zgodili med tem zagonom.
Metoda:
void generiraj poročilo (java.util.List xmlSuites, java.util.List suites, java.lang.String outputDirectory)
Primer:
@Override public void generateReport(List xmlSuites, List suites, String outdir) { try { writer = createWriter(outdir); } catch (IOException e) { System.err.println('Unable to create output file'); e.printStackTrace(); return; } startHtml(writer); writeReportTitle(reportTitle); generateSuiteSummaryReport(suites); generateMethodSummaryReport(suites); generateMethodDetailReport(suites); endHtml(writer); writer.flush(); writer.close(); } Zaključek
V tem članku smo videli, kako so lahko opombe TestNG koristne za lažjo logiko našega programa. Po potrebi se uporabljajo pripisi.
Parametre lahko posredujete pripisom in opravite tudi testiranje na podlagi podatkov. Testne primere lahko izvajate v skupinah in prihranite čas. S poslušalci lahko celo ustvarite poročila. Se vam ne zdi to čudovito?
TestNG.xml bo podrobno razložen v naši prihajajoči vadnici. Ta datoteka XML je hrbtenica okvira TestNG in nam bo pomagala pri izvajanju naših testnih primerov.
=> Tukaj si oglejte Perfect TestNG Training Guide.
Priporočeno branje
- Naučite se uporabljati pripombe TestNG v selenu (s primeri)
- Trditve v selenu z uporabo okvirov Junit in TestNG
- Uvod v JUnit Framework in njegovo uporabo v skriptu selena - Vadnica za selen # 11
- 30+ najboljših vaj za selen: Naučite se selen z resničnimi primeri
- Primer TestNG: Kako ustvariti in uporabiti datoteko TestNG.xml
- Poslušalci JMeter: Analiza rezultatov z različnimi poslušalci
- Kako uporabiti ogrodje TestNG za ustvarjanje skriptov za selen - Vadnica # 12 za TestNG Selenium
- Vadnica za Eclipse: Vključevanje TestNG v Eclipse Java IDE