testng annotations listeners
Tento výukový program vysvetľuje rôzne typy anotácií a poslucháčov TestNG. Dozviete sa tiež, ako používať anotácie a poslucháčov TestNG s príkladmi:
Tu spustíme základný program TestNG pomocou anotácií TestNG a tiež si pozrieme úlohu poslucháčov TestNG a ako ich používať pri testovaní.
=> Prečítajte si tréningovú sériu Easy TestNG.
Čo sa dozviete:
Čo sú anotácie TestNG?
Jedná sa o program alebo obchodnú logiku, ktoré sa používajú na riadenie toku metód. V TestNG hrajú veľmi dôležitú úlohu. Tieto anotácie sa v prípade každého projektu líšia podľa požiadaviek. Tok anotácií zostáva v každom programe rovnaký napriek rôznym požiadavkám.
Existujú rôzne typy anotácií TestNG, ktoré robia TestNG ľahším a lepším ako JUnit. Každá z týchto anotácií bude prebiehať pri konkrétnej udalosti v TestNG.
Typy anotácií v TestNG
Ďalej uvádzame zoznam anotácií a ich atribútov, ktoré sa používajú v TestNG. Pozrime sa na ne podrobne.
Predtým
- @BeforeSuite: Táto metóda sa vykoná pred spustením všetkých testov v balíku.
- @BeforeTest: Táto metóda sa vykoná pred vyhlásením každej testovacej sekcie v balíku.
- @BeforeClass: Táto metóda sa vykoná pred prvou testovacou metódou v aktuálnej triede.
- @BeforeMethod: Táto metóda sa vykoná pred každou testovacou metódou.
- @BeforeGroups: Táto metóda sa vykoná skôr, ako bude uvedená akákoľvek skúšobná metóda určenej skupiny.
- @Test : Označí triedu alebo metódu ako súčasť testu. Alebo môžeme povedať, že sa z nej stáva metóda ako testovacia metóda.
Po
- @AfterSuite: Táto metóda sa vykoná po spustení všetkých testov v balíku.
- @AfterTest: Táto metóda sa vykoná po deklarovaní každej testovacej sekcie v balíku.
- @Po hodine: Táto metóda sa vykoná po poslednej testovacej metóde triedy.
- @AfterMethod: Táto metóda sa vykoná po vykonaní každej testovacej metódy.
- @AfterGroups: Táto metóda sa vykoná po vykonaní poslednej testovacej metódy určenej skupiny.
Pracovný tok anotácií
Keď vykonáme súbor TestNG.xml, poznámky k TestNG sa vykonajú v nasledujúcom poradí:
Pred balíkom-> Pred testom-> Pred triedou-> Pred metódou-> @ Test -> Po metóde-> Po triede-> Po skúške-> Po suite
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Test má mnoho ďalších atribútov, ktoré nám pomáhajú efektívnejšie vykonávať naše testovacie prípady.
Ďalej uvádzame typy atribútov a ich popisy s príkladmi.
# 1) alwaysRun: Ak je nastavená hodnota true, táto metóda bude fungovať, aj keď bude závisieť od metódy, ktorá zlyhala.
Príklad: Test (alwaysRun = true)
# 2) dataProvider : Toto zobrazuje meno poskytovateľa údajov pre túto metódu. Má iba atribúty, t. J. Meno. Môžeme ho použiť, keď testujeme náš softvér s viacerými množinami údajov v čase vstupu alebo behu. Toto sa tiež nazýva testovanie na základe údajov. Pomocou tohto atribútu môžeme robiť testovanie na základe dát.
Príklad: @dataProvider (name = 'TestData')
# 3) dataProviderClass : Tento atribút vám umožní určiť triedu poskytovateľa údajov, ktorá bude obsahovať poskytovateľa údajov, ktorého bude metóda @Test používať.
Príklad: @Test (dataProvider = „Test údajov klienta“, dataProviderClass = ClientDetailsTest.class)
# 4) záleží na skupinách : Tento atribút závisí od zoznamu skupín, t. J. Testovacia metóda sa začne vykonávať až po vykonaní závislých skupín.
Poznámka : Ak niektorý z testov v skupinách závislých na testoch zlyhá, tento test preskočí.
Nižšie je uvedený príklad:
@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) dependsOnMethods : Táto anotácia závisí od zoznamu metód. To znamená, že testovacia metóda sa začne vykonávať až po vykonaní závislých metód.
Poznámka : Ak niektorý z testov v závislých metódach zlyhá, tento test preskočí.
Príklad:
@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: Atribúty testovacej metódy môžeme nastaviť na hodnotu true a toto vynúti vykonanie testu, aj keď niektoré testy v skupine závisia od zlyhania.
Napríklad:
@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) popis : Toto poskytuje popis metódy. Spravidla obsahuje jednoriadkový súhrn.
Príklad:
@Test(description = “Regression Test Summary”)
# 8) povolené : Tento atribút pomáha určiť, či chceme spustiť / vykonať konkrétnu testovaciu metódu v aktuálnom balíku / triede alebo nie. Niekedy z nejakých dôvodov nechceme spustiť niekoľko testov, napríklad požiadavka / funkcia sa často mení, a nechceme narušiť aktuálny chod konkrétnej funkcie.
V týchto prípadoch môžeme daný test jednoducho ignorovať / deaktivovať nastavením tejto funkcie ako @Test (enabled = false).
Príklad:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); }
# 9) expectExceptions : Tento atribút zobrazuje zoznam výnimiek, ktoré testovacia metóda vyvolá za behu. Ak pre metódu nie sú vyvolané žiadne výnimky alebo iné výnimky, potom je test označený ako zlyhanie.
Príklad:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) skupiny : Tento atribút sa používa na určenie skupín, do ktorých testovacia metóda patrí.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) priorita : To pomáha pri určovaní priorít testovacích metód, zatiaľ čo predvolená priorita začína od 0 a testy sa vykonávajú vzostupne.
Príklad:
@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”); }
Výsledky: Nižšie sú uvedené výsledky podľa priority, aj keď prvému testu nebolo priradené žiadne číslo, predvolene sa nastavila jeho priorita na 0 a vykonávanie sa uskutočnilo vzostupne.
Úspešné: launchApp
Úspešné: loginApp
Úspešné: checkTrans
# 12) časový limit : Tento atribút pomáha určiť hodnotu časového limitu pre test (zvyčajne sa používa v milisekundách). Ak test trvá dlhšie ako zadaná hodnota časového limitu, je test označený ako neúspešný. Tento časový limit môžeme použiť na vykonanie testu výkonnosti, aby sme sa ubezpečili, že sa metóda vracia v rozumnom čase.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Tento atribút pomáha určiť, koľkokrát by sa mala vyvolať testovacia metóda.
@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();
Výkon:
Názov stránky je Google
Názov stránky je Google
Názov stránky je Google
Názov stránky je Google
Názov stránky je Google
# 14) invocationTimeOut: Toto je maximálny čas (počet milisekúnd), ktorý by mal tento test trvať pri všetkých počtoch vyvolaní. Táto metóda musí byť použitá spolu s metódou počítania vyvolania, inak by bola ignorovaná.
Príklad:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Vyššie uvedený príklad ukazuje, že vykonanie tohto testu bude trvať celkovo 4 sekundy a zakaždým, keď sa test vyvolá / spustí, bude trvať 1 sekundu.
# 15) @DataProvider : Táto metóda pomáha pri poskytovaní údajov o testovacej metóde. Najskôr musíme deklarovať metódu anotovanú @DataProvider a potom túto metódu použiť v požadovanej testovacej metóde pomocou atribútu „DataProvider“ v anotácii @Test.
Poskytovateľ údajov vráti pole objektov, najmä dvojrozmerné pole objektov () (). Prvé pole predstavuje množinu údajov a druhé pole obsahuje parametre.
@DataProvider (name = „Test“) - tu predstavuje meno meno poskytovateľa údajov. Ak názov nie je uvedený, potom sa názov poskytovateľa údajov automaticky nastaví na názov metódy.
Príklad:
@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 : Používa sa na určenie metódy ako továrne na poskytovanie objektov, ktoré má TestNG používať pre svoje testovacie triedy. Pomocou @Factory môžeme vytvárať dynamické testy za behu a malo by nám vrátiť objekt poľa.
Príklad:
Urobme si príklad, aby sme tomu lepšie porozumeli. Vytvoríme dve triedy, tj. FactorySample.Java a 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; } }
Výkon : Google bol úspešne spustený
Gmail bol úspešne prihlásený
Rozdiel medzi anotáciami @Factory a @DataProvider
Medzi oboma anotáciami je zásadný rozdiel. V súvislosti s týmito dvoma anotáciami existuje veľa zmätkov, napríklad kde ich použiť a prečo?
Poďme nájsť odpovede.
@DataProvider: Táto anotácia bude parametrizovať konkrétnu skúšobnú metódu a vykoná test v konkrétnom čísle. krát na základe údajov poskytnutých touto metódou.
Napríklad, ak existujú dva parametre, potom sa testovacia metóda vykoná dvakrát. Napríklad, ak sa chceme zakaždým prihlásiť na stránku s rôznymi množinami používateľských mien a hesiel, je to užitočné, pretože musíme poskytnúť parametre, ktoré sa majú otestovať.
@Factory : Týmto sa vykonajú všetky testovacie metódy prítomné v súbore testovacej triedy pri použití samostatnej inštancie tejto triedy. Je to užitočné, ak chceme testovaciu triedu spustiť viackrát.
Napríklad , ak musíme otestovať prihlasovaciu funkciu akejkoľvek aplikácie alebo webu a keďže musíme tento test spustiť viackrát, je lepšie použiť @Factory, kde môžeme vytvoriť viac inštancií testu a spustiť ich.
Pozrime sa na tieto príklady, aby sme spoznali rozdiel.
Príklad @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); }
Poznámka : Vo vyššie uvedenom programe sme poskytli dve údaje a výsledkom programu by bolo:
Mená sú: Mihir 145632
Mená sú: Kumar 28242
To ukazuje, že ak zvýšime počet údajov v metóde správy, potom sa metóda tlače vykoná rovnako často.
@ Továrenský príklad :
TestNG Factory je veľmi užitočný, keď musíme spustiť viac testovacích tried pomocou jednej testovacej triedy.
Pozrime sa na príklad.
Za týmto účelom musíme vytvoriť dve testovacie triedy, v ktorých je niekoľko testovacích metód.
Testovací údaj 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } }
Údaje o teste 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } }
Teraz musíme definovať metódu @Factory, ktorá vráti pole objektov vyššie definovaných tried.
Výrobný 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; } }
Výkon:
Testovacia metóda Test1
Skúšobná metóda Test2
ZARIADENÉ: test1
ZARIADENÉ: test2
Poslucháči typu TestNG s typmi
Jednoducho povedané, poslucháči počúvajú udalosť definovanú v selénovom skripte a podľa toho sa k nej správajú. Hlavným účelom je vytváranie protokolov a prispôsobenie správ TestNG.
V TestNG je k dispozícii veľa typov poslucháčov.
Napríklad , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListener, ITest
Pokiaľ však ide o testovanie, používame iba niektoré z nich, ako je uvedené nižšie:
# 1) ISuiteListener
Toto je poslucháč testovacích balíkov. Skladá sa z dvoch metód t.j. onStart () a onFinish () .
Kedykoľvek implementujeme tohto poslucháča, zaručí to, že koncový používateľ vyvolá metódy onStart () a onFinish () pred a po spustení balíka TestNG.
Podrobnosti metódy:
void onStart (ISuite suite) : Táto metóda je vyvolaná pred spustením Suite Runner.
void onFinish (ISuite suite) : Táto metóda je vyvolaná potom, čo Suite Runner spustil všetky testovacie balíčky.
Príklad:
@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
Tento poslucháč funguje rovnako ako ISuiteListener. Jediný rozdiel je však v tom, že uskutočňuje hovor pred testom a po ňom, a nie v suite. Je poslucháčom testovacej prevádzky a má v sebe sedem metód.
(i) onStart () :Táto metóda je vyvolaná po vytvorení inštancie testovacej triedy a pred volaním akejkoľvek metódy konfigurácie.
Príklad:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish () :Táto metóda sa vyvolá po spustení všetkých testov a vyvolaní všetkých konfiguračných metód.
Príklad:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Táto metóda sa vyvolá vždy predtým, ako sa vyvolá test. ITestResult je iba čiastočne vyplnený odkazmi na triedu, metódu, počiatočné hodnoty a stav.
Metóda: void onTestStart (ITestResult result)
Príklad:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Táto metóda sa vyvolá vždy, keď je test úspešný.
Metóda: void onTestSuccess (ITestResult result)
Príklad:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Táto metóda sa vyvolá vždy, keď test zlyhá.
Metóda: void onTestFailure (ITestResult result)
Príklad:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Táto metóda sa vyvolá vždy, keď sa vynechá test.
Metóda: void onTestSkipped (ITestResult result)
Príklad:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Táto metóda je vyvolaná zakaždým, keď metóda zlyhala, ale bola anotovaná percentom úspešnosti a zlyhanie ju udržiava v percentách úspešnosti.
Metóda: void onTestFailedButWithinSuccessPercentage (výsledok ITestResult)
Príklad:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) IExecutionListener
Je to poslucháč, ktorý monitoruje začiatok a koniec behu TestNG. Má dve metódy t.j. onExecutionStart () a onExecutionFinish () .
Metóda onExecutionStart () sa volá skôr, ako TestNG začne spúšťať sady a metóda onExecutionFinish () sa volá po dokončení TestNG so spustením všetkých testovacích balíkov.
Metóda:
void onExecutionStart ()
void onExecutionFinish ()
Príklad:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) IInvokedMethodListener
Je to poslucháč, ktorý je vyvolaný pred a po vyvolaní metódy TestNG. Tento poslucháč je vyvolaný iba pre konfigurácie a testovacie metódy. Má v sebe iba dve metódy, t. J. AfterInvocation a beforeInvocation.
- predvolanie: Vyvolať pred každou metódou.
- afterInvocation: Vyvolávať po každej metóde.
Metóda:
void beforeInvocation (metóda IInvokedMethod, ITestResult testResult)
void afterInvocation (metóda IInvokedMethod, ITestResult testResult)
Príklad:
@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
Táto trieda sa používa na zmenu zoznamu testovacích metód, ktoré bude TestNG bežať. Použitím tejto metódy môžeme zmeniť poradie zoznamu testovacích metód.
Je použiteľné iba na tie metódy, ktoré nemajú žiadne závislé látky a tie metódy, ktoré nezávisia od iných testovacích metód, budú odovzdané v parametroch. Toto rozhranie vráti zoznam testovacích metód, ktoré je potrebné spustiť, ale iným spôsobom.
Metóda:
ako používať príkaz diff na porovnanie dvoch súborov
zachytenie java.util.List (metódy java.util.List, kontext ITestContext)
Príklad:
@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
Toto implementujú klienti na účely generovania správy. Táto metóda sa vyvolá, keď sa spustí celá sada, a parametre poskytnú všetky výsledky testu, ktoré sa stali počas tohto spustenia.
Metóda:
void generateReport (java.util.List xmlSuites, java.util.List suites, java.lang.String outputDirectory)
Príklad:
@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(); }
Záver
V tomto článku sme videli, ako môžu byť poznámky TestNG užitočné pri uľahčení logiky nášho programu. Podľa potreby sa používajú anotácie.
Môžete odovzdať parametre do anotácií a tiež vykonať Testovanie na základe údajov. Testovacie prípady môžete spúšťať v skupinách a ušetriť čas. S poslucháčmi môžete dokonca generovať prehľady. Nemyslíte si, že je to úžasné?
TestNG.xml bude podrobne vysvetlený v našom pripravovanom výučbe. Tento súbor XML je chrbticou rámca TestNG a pomôže nám pri vykonávaní testovacích prípadov.
=> Vyskúšajte tu perfektného výcvikového sprievodcu TestNG.
Odporúčané čítanie
- Naučte sa, ako používať poznámky TestNG v seléne (s príkladmi)
- Tvrdenia v seléne pomocou rámcov Junit a TestNG
- Úvod do rámca JUnit a jeho použitie v selénovom skripte - selén výučba # 11
- 30+ najlepších návodov na selén: Naučte sa selén na skutočných príkladoch
- Príklad TestNG: Ako vytvoriť a používať súbor TestNG.xml
- JMeter Listeners: Analýza výsledkov s rôznymi poslucháčmi
- Ako používať rámec TestNG na vytváranie skriptov selénu - návod na testovanie selénu TestNG # 12
- Výukový program Eclipse: Integrácia TestNG do Eclipse Java IDE