testng annotations listeners
Ovaj vodič objašnjava različite vrste bilješki i slušatelja TestNG-a. Također ćete naučiti kako koristiti TestNG napomene i slušatelje s primjerima:
Ovdje ćemo pokrenuti osnovni program TestNG pomoću oznaka TestNG, a također ćemo vidjeti ulogu slušatelja TestNG i kako ih koristiti u testiranju.
=> Pročitajte seriju Easy TestNG Training.
Što ćete naučiti:
Što su TestNG napomene?
To su programska ili poslovna logika koja se koristi u kontroli protoka metoda. Oni igraju vrlo važnu ulogu u TestNG-u. Te se bilješke razlikuju u svakom projektu prema zahtjevima. Tok bilješki ostaje isti u svakom programu unatoč različitim zahtjevima.
Postoje različite vrste TestNG napomena koje čine TestNG lakšim i boljim od JUnit-a. Svaka od ovih napomena pokrenut će se na određenom događaju u TestNG-u.
Vrste bilješki u TestNG-u
Dolje su navedeni popisi napomena i njihovi atributi koji se koriste u TestNG-u. Istražimo ih detaljno i njihove običaje.
Prije
- @BeforeSuite: Ova će se metoda izvršiti prije pokretanja svih testova u paketu.
- @BeforeTest: Ova će se metoda izvršiti prije nego što se svaki testni odjeljak deklarira u paketu.
- @BeforeClass: Ova će se metoda izvršiti prije prve ispitne metode u trenutnoj klasi.
- @BeforeMethod: Ova će se metoda izvršiti prije svake ispitne metode.
- @BeforeGroups: Ova će se metoda izvršiti prije nego što se navede bilo koja metoda ispitivanja navedene skupine.
- @Test : Označava nastavu ili metodu kao dio testa. Ili možemo reći da to čini metodu kao ispitnu metodu.
Nakon
- @AfterSuite: Ova će se metoda izvršiti nakon pokretanja svih testova u paketu.
- @AfterTest: Ova će se metoda izvršiti nakon što se svaki probni odjeljak deklarira u paketu.
- @Nakon nastave: Ova će se metoda izvršiti nakon posljednje ispitne metode u klasi.
- @AfterMethod: Ova će se metoda izvršiti nakon izvršavanja svake testne metode.
- @AfterGroups: Ova će se metoda izvršiti nakon izvršavanja posljednje ispitne metode navedene skupine.
Tok rada napomena
Kada izvršimo datoteku TestNG.xml, bilješke TestNG izvršavat će se u sljedećem slijedu:
Prije Suite-> Prije testa-> Prije nastave-> Prije metode-> @Test -> Poslije metode-> Nakon predavanja-> Nakon testa-> Poslije skupa
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Test ima puno drugih atributa koji nam pomažu u učinkovitijem izvršavanju testnih slučajeva.
Ispod su vrste atributa i njihovi opisi s primjerima.
# 1) alwaysRun: Ako se postavi na true, ova će se metoda izvoditi čak i ako ovisi o metodi koja nije uspjela.
Primjer: Test (alwaysRun = true)
# 2) dataProvider : Ovo prikazuje ime davatelja podataka za ovu metodu. Ima atribute samo tj. Ime. Možemo ga koristiti kada testiramo svoj softver s više skupova podataka u vrijeme unosa ili vrijeme izvođenja. Ovo je također poznato kao testiranje na temelju podataka. Pomoću ovog atributa možemo izvršiti testiranje na temelju podataka.
Primjer: @dataProvider (name = ”TestData”)
# 3) dataProviderClass : Ovaj atribut omogućit će vam da odredite klasu davatelja podataka koja će sadržavati davatelja podataka koju će koristiti metoda @Test.
Primjer: @Test (dataProvider = “Test podataka klijenta”, dataProviderClass = ClientDetailsTest.class)
# 4) zavisiOnGroups : Ovaj atribut ovisi o popisu grupa, tj. Metoda ispitivanja započet će izvršavanje tek nakon izvršavanja ovisnih grupa.
Bilješka : Ako bilo koji test u skupinama koje ovise o tome ne uspije, preskočit će taj test.
Ispod je primjer:
@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 : Ova napomena ovisi o popisu metoda. To znači da će test metoda započeti izvršavanje tek nakon izvršavanja ovisnih metoda.
Bilješka : Ako bilo koji test u ovisnim metodama ne uspije, preskočit će ga.
Primjer:
@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 metode ispitivanja možemo postaviti na true, a to će prisiliti test da se izvrši čak i ako neki od testova u grupi ovise o neuspjehu.
Na primjer:
@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 : Ovo daje opis metode. Općenito sadrži sažetak u jednom retku.
Primjer:
@Test(description = “Regression Test Summary”)
# 8) omogućeno : Ovaj atribut pomaže u određivanju želimo li pokrenuti / izvršiti određenu testnu metodu u trenutnom paketu / klasi ili ne. Ponekad ne želimo pokrenuti nekoliko testova iz nekih razloga kao što se zahtjev / funkcija često mijenja i ne želimo ometati trenutno pokretanje za tu određenu funkciju.
U tim slučajevima možemo jednostavno zanemariti / onemogućiti taj određeni test postavljanjem ove značajke kao @Test (enabled = false).
Primjer:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); }
# 9) očekivani izuzeci : Ovaj atribut prikazuje popis iznimaka koje će test metoda ubaciti u vrijeme izvođenja. Ako se za metodu ne izuzmu izuzeci ili bilo koja druga iznimka, tada se test označava kao neuspjeh.
Primjer:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) grupe : Ovaj se atribut koristi za određivanje grupa kojima metoda ispitivanja pripada.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) prioritet : Ovo pomaže u određivanju prioriteta metoda ispitivanja, dok zadani prioritet započinje s 0, a testovi se izvršavaju rastućim redoslijedom.
Primjer:
@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: Ispod su rezultati prema prioritetu, iako prvom testu nije dodijeljen broj, prioritet je prema zadanim postavkama uzeo 0 i izvršenje je rađeno uzlaznim redoslijedom.
Prošlo: launchApp
Prošlo: loginApp
Prošlo: checkTrans
# 12) vremensko ograničenje : Ovaj atribut pomaže u određivanju vrijednosti vremenskog ograničenja za test (obično se koristi u milisekundama). Ako test uzima više od navedene vrijednosti vremenskog ograničenja, tada se test označava kao neuspješan. Ovo vremensko ograničenje možemo iskoristiti za testiranje izvedbe kako bismo bili sigurni da se metoda vraća u razumnom roku.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Ovaj atribut pomaže u određivanju broja poziva na metodu ispitivanja.
@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();
Izlaz:
Naslov stranice je Google
Naslov stranice je Google
Naslov stranice je Google
Naslov stranice je Google
Naslov stranice je Google
# 14) invocationTimeOut: To je maksimalno vrijeme (br. Milisekundi) koje bi ovaj test trebao proći za sve brojeve poziva. Ova metoda mora se koristiti zajedno s metodom brojanja poziva, inače bi se zanemarila.
Primjer:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Gornji primjer pokazuje da će izvođenju ovog testa trebati ukupno 4 sekunde, a svaki put kad se test pozove / pokrene, trebalo bi mu 1 sekundu da se izvrši.
# 15) @DataProvider : Ova metoda pomaže u pružanju podataka za test metodu. Prvo moramo deklarirati metodu označenu @DataProvider, a zatim je koristiti u traženoj testnoj metodi koristeći atribut 'DataProvider' u anotaciji @Test.
Davatelj podataka vraća niz objekata, posebno dvodimenzionalni niz objekata () (). Prvi niz predstavlja skup podataka, a drugi niz sadrži parametre.
@DataProvider (name = 'Test') - Ovdje naziv predstavlja ime davatelja podataka. Ako ime nije dano, tada će se naziv pružatelja podataka automatski postaviti na naziv metode.
Primjer:
@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) @ tvornica : Ovim se određuje metoda kao tvornica za pružanje objekata koji će TestNG koristiti za svoje klase ispitivanja. Korištenjem @Factory možemo stvoriti dinamičke testove u vrijeme izvođenja i on bi trebao vratiti objekt niza.
Primjer:
Uzmimo primjer da bismo ga bolje razumjeli. Stvorit ćemo dvije klase tj. FactorySample.Java i 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; } }
Izlaz : Google je uspješno pokrenut
Gmail se uspješno prijavio
Razlika između bilješki @Factory i @DataProvider
Između obje bilješke postoji osnovna razlika. Mnogo je zabune u vezi s ove dvije bilješke poput toga gdje ih koristiti i zašto?
Pronađimo odgovore.
@DataProvider: Ova će napomena parameterizirati određenu metodu ispitivanja i izvršiti test u određenom br. puta na temelju podataka pruženih ovom metodom.
Na primjer, ako postoje dva parametra, tada će se metoda ispitivanja izvršiti dva puta. Na primjer, ako se želimo svaki put prijaviti na web mjesto s različitim skupovima korisničkih imena i lozinki, tada je to korisno jer moramo osigurati parametre za testiranje.
@Tvornica : Ovim će se izvršiti sve metode ispitivanja prisutne unutar datoteke klase testa, dok se koristi zasebna instanca te klase. Ovo je korisno ako želimo pokretati test klasu bilo koji broj puta.
Na primjer , ako moramo testirati funkciju prijave bilo koje aplikacije ili web stranice i budući da moramo testirati više puta, bolje je upotrijebiti @Factory gdje možemo stvoriti više instanci testa i pokrenuti testove.
Pogledajmo ove primjere kako bismo znali razliku.
Primjer @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); }
Bilješka : U gore navedenom programu dali smo dva podatka i rezultat programa bi bio:
Imena su: Mihir 145632
Imena su: Kumar 28242
To pokazuje da ako povećamo broj podataka u metodi poruka, tada će se metoda ispisa izvršiti isti broj puta.
Primjer @ tvornice :
Tvornica TestNG vrlo je korisna kada moramo pokrenuti više klasa testa pomoću jedne klase testa.
Pogledajmo primjer.
Za to moramo izraditi dvije klase ispitivanja s nekoliko metoda ispitivanja.
Podaci o ispitivanju 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } }
Podaci o ispitivanju 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } }
Sada moramo definirati metodu @Factory koja vraća objektni niz gore definiranih klasa.
Tvornič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; } }
Izlaz:
Test1 metoda ispitivanja
Test2 metoda ispitivanja
PROŠLO: test1
PROŠLO: test2
Slušajte slušatelje s vrstama
Jednostavno rečeno, slušatelji slušaju događaj definiran u skripti Selenium i ponašaju se u skladu s tim. Glavna svrha je stvaranje dnevnika i prilagodba izvještaja TestNG.
U TestNG-u su dostupne mnoge vrste slušatelja.
Na primjer , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListner
Međutim, što se tiče testiranja, koristimo samo nekoliko njih kako je objašnjeno u nastavku:
# 1) ISuiteListener
Ovo je preslušavač testnih paketa. Sastoji se od dvije metode tj. onStart () i onFinish () .
Kad god implementiramo ovaj slušatelj, jamčit će da će krajnji korisnik pozvati metode onStart () i onFinish () prije i nakon pokretanja paketa TestNG.
Pojedinosti o metodi:
void onStart (ISuite paket) : Ova se metoda poziva prije pokretanja Suite Runnera.
void onFinish (ISuite suite) : Ova se metoda poziva nakon što je Suite Runner pokrenuo sve testne pakete.
Primjer:
@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
Ovaj slušatelj radi baš kao i ISuiteListener. Međutim, jedina je razlika što poziva prije i nakon testa, a ne Suite. Slušatelj je za probno trčanje i ovaj slušatelj ima sedam metoda.
(i) onStart () :Ova se metoda poziva nakon instancije klase ispitivanja i prije nego što se pozove bilo koja metoda konfiguracije.
Primjer:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish () :Ova se metoda poziva nakon izvođenja svih testova i poziva svih metoda konfiguracije.
Primjer:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Ova se metoda poziva svaki put prije nego što se pozove test. ITestResult je samo djelomično ispunjen referencama na klasu, metodu, početne milise i status.
Metoda: poništi onTestStart (rezultat ITestResult)
Primjer:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Ova se metoda poziva svaki put kada test uspije.
Metoda: poništenje onTestSuccess (rezultat ITestResult)
Primjer:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Ova se metoda poziva svaki put kada test ne uspije.
Metoda: poništi onTestFailure (rezultat ITestResult)
Primjer:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Ova se metoda poziva svaki put kada se preskoči test.
Metoda: void onTestSkipped (rezultat ITestResult)
Primjer:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Ova se metoda poziva svaki put kad metoda ne uspije, ali je označena postotkom uspjeha, a neuspjeh je zadržava unutar postotka uspjeha.
Metoda: poništava onTestFailedButWithinSuccessPercentage (rezultat ITestResult)
Primjer:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) IExecutionListener
Slušatelj je koji nadgleda početak i kraj TestNG izvođenja. Ima dvije metode tj. onExecutionStart () i onExecutionFinish () .
metoda onExecutionStart () poziva se prije nego što TestNG počne izvoditi suite, a metoda onExecutionFinish () nakon što se TestNG izvrši s izvođenjem svih testnih paketa.
Metoda:
void onExecutionStart ()
void onExecutionFinish ()
Primjer:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) IInvokedMethodListener
Slušatelj je koji se poziva prije i nakon što metodu pozove TestNG. Ovaj se slušatelj poziva samo za konfiguracije i metode ispitivanja. U sebi ima samo dvije metode, tj. Nakon poziva i prije poziva.
- prije poziva: Prizivajte prije svake metode.
- nakon poziva: Prizivajte nakon svake metode.
Metoda:
void beforeInvocation (metoda IInvokedMethod, ITestResult testResult)
void afterInvocation (IInvokedMethod metoda, ITestResult testResult)
Primjer:
@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
Ova se klasa koristi za izmjenu popisa metoda ispitivanja koje će TestNG izvoditi. Korištenjem ove metode možemo preurediti popis metoda ispitivanja.
Primjenjiv je samo na one metode koje nemaju ovisnike, a one metode koje ne ovise o bilo kojim drugim metodama ispitivanja bit će proslijeđene u parametrima. Ovo sučelje vratit će popis metoda ispitivanja koje treba pokrenuti, ali na drugačiji sortirani način.
Metoda:
selen webdriver tutorial java eclipse pdf
presretanje java.util.List (metode java.util.List, kontekst ITestContext)
Primjer:
@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 klijenti provode za generiranje izvješća. Ova će se metoda pozvati nakon što se pokrene sav paket i parametri daju sve rezultate ispitivanja koji su se dogodili tijekom tog izvođenja.
Metoda:
void generiraj izvještaj (java.util.List xmlSuites, java.util.List suites, java.lang.String outputDirectory)
Primjer:
@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čak
U ovom smo članku vidjeli kako TestNG napomene mogu biti korisne za olakšavanje naše programske logike. Po potrebi se koriste bilješke.
Parametre možete proslijediti bilješkama i također izvršiti testiranje na temelju podataka. Test slučajeve možete izvoditi u skupinama i uštedjeti vrijeme. Sa slušateljima čak možete generirati izvješća. Ne mislite li da je ovo predivno?
TestNG.xml bit će detaljno objašnjen u našem nadolazećem vodiču. Ova XML datoteka je okosnica okvira TestNG i pomoći će nam u izvršavanju naših test slučajeva.
=> Ovdje pogledajte Savršen vodič za trening za TestNG.
Preporučena literatura
- Naučite kako koristiti TestNG napomene u selenu (s primjerima)
- Tvrdnje u selenu korištenjem Junit i TestNG okvira
- Uvod u JUnit Framework i njegovu upotrebu u skripti za selenij - Vodič za selen br. 11
- 30+ najboljih vodiča za selen: naučite selen na stvarnim primjerima
- Primjer TestNG: Kako stvoriti i koristiti datoteku TestNG.xml
- Slušatelji JMeter: Analiza rezultata s različitim slušateljima
- Kako se koristi TestNG Framework za stvaranje skripti za selen - TestNG Selen Tutorial # 12
- Vodič za Eclipse: Integriranje TestNG-a u Eclipse Java IDE