testng annotations listeners
Tento výukový program vysvětluje různé typy anotací a posluchačů TestNG. Dozvíte se také, jak používat anotace a posluchače TestNG s příklady:
Zde spustíme základní program TestNG používající anotace TestNG a také uvidíme roli posluchačů TestNG a jejich použití při testování.
=> Přečtěte si tréninkovou sérii Easy TestNG.
Co se naučíte:
Co jsou poznámky TestNG?
Jedná se o programovou nebo obchodní logiku, která se používá při řízení toku metod. V TestNG hrají velmi důležitou roli. Tyto anotace se u každého projektu liší podle požadavků. Tok anotací zůstává v každém programu stejný i přes různé požadavky.
Existují různé typy anotací TestNG, díky nimž je TestNG snazší a lepší než JUnit. Každá z těchto anotací bude spuštěna při konkrétní události v TestNG.
Typy poznámek v TestNG
Níže jsou uvedeny seznamy anotací a jejich atributů, které se používají v TestNG. Pojďme je prozkoumat podrobně.
Před
- @BeforeSuite: Tato metoda bude provedena před spuštěním všech testů v sadě.
- @BeforeTest: Tato metoda bude provedena před deklarováním každé testovací sekce v sadě.
- @Před hodinou: Tato metoda bude provedena před první testovací metodou v aktuální třídě.
- @BeforeMethod: Tato metoda bude provedena před každou testovací metodou.
- @BeforeGroups: Tato metoda bude provedena dříve, než bude uvedena jakákoli testovací metoda určené skupiny.
- @Test : Označí třídu nebo metodu jako součást testu. Nebo můžeme říci, že to dělá metodu jako testovací metodu.
Po
- @AfterSuite: Tato metoda bude provedena po spuštění všech testů v sadě.
- @AfterTest: Tato metoda bude provedena po deklaraci každé testovací sekce v sadě.
- @Po hodině: Tato metoda bude provedena po poslední testovací metodě třídy.
- @AfterMethod: Tato metoda bude provedena po provedení každé testovací metody.
- @AfterGroups: Tato metoda bude provedena po provedení poslední testovací metody určené skupiny.
Pracovní tok poznámek
Když spustíme soubor TestNG.xml, poznámky TestNG se provedou v následujícím pořadí:
Před sadou-> Před testem-> Před třídou-> Před metodou-> @Test -> Po metodě-> Po třídě-> Po testu-> Po sadě
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Test má mnoho dalších atributů, které nám pomáhají efektivněji provádět naše testovací případy.
Níže jsou uvedeny typy atributů a jejich popisy s příklady.
# 1) alwaysRun: Při nastavení na true bude tato metoda spuštěna, i když bude záviset na metodě, která selhala.
Příklad: Test (alwaysRun = true)
# 2) dataProvider : Zobrazuje název poskytovatele dat pro tuto metodu. Má pouze atributy, tj. Jméno. Můžeme jej použít, když testujeme náš software s více sadami dat v době vstupu nebo běhu. Toto se také nazývá testování založené na datech. Pomocí tohoto atributu můžeme provádět testování na základě dat.
Příklad: @dataProvider (name = 'TestData')
# 3) dataProviderClass : Tento atribut vám umožní určit třídu poskytovatele dat, která bude obsahovat poskytovatele dat, který bude metoda @Test používat.
Příklad: @Test (dataProvider = „Test dat klienta“, dataProviderClass = ClientDetailsTest.class)
# 4) záleží na skupinách : Tento atribut závisí na seznamu skupin, tj. Testovací metoda zahájí provádění až po provedení závislých skupin.
Poznámka : Pokud některý z testů ve skupinách, které jsou závislé na, selže, pak tento test přeskočí.
Níže je uveden pří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) závisí na metodách : Tato anotace závisí na seznamu metod. To znamená, že testovací metoda zahájí provádění až po provedení závislých metod.
Poznámka : Pokud některý z testů v metodách, které jsou závislé, selže, tento test přeskočí.
Pří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: Můžeme nastavit atributy testovací metody na true a to vynutí provedení testu, i když některé testy ve skupině závisí na selhání.
Napří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 metody. Obecně obsahuje jednořádkový souhrn.
Příklad:
@Test(description = “Regression Test Summary”)
# 8) povoleno : Tento atribut pomáhá určit, zda chceme spustit / spustit konkrétní testovací metodu v aktuální sadě / třídě nebo ne. Někdy nechceme spustit několik testů z nějakých důvodů, jako je požadavek / funkce se často mění a nechceme narušit aktuální běh pro danou funkci.
V těchto případech můžeme daný test jednoduše ignorovat / deaktivovat nastavením této funkce jako @Test (enabled = false).
Pří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 atribut zobrazuje seznam výjimek, které testovací metoda vyvolá v době běhu. Pokud pro metodu nejsou vyvolány žádné výjimky nebo jiné výjimky, je test označen jako selhání.
Příklad:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) skupiny : Tento atribut se používá k určení skupin, do kterých testovací metoda patří.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) priorita : To pomáhá při stanovení priorit testovacích metod, zatímco výchozí priorita začíná na 0 a testy se provádějí ve vzestupném pořadí.
Pří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ýsledek: Níže jsou uvedeny výsledky podle priority, i když prvnímu testu nebylo přiděleno žádné číslo, ve výchozím nastavení byla priorita 0 a provedení bylo provedeno ve vzestupném pořadí.
Úspěšné: launchApp
Úspěšné: loginApp
Úspěšně: checkTrans
# 12) časový limit : Tento atribut pomáhá při určování hodnoty časového limitu pro test (obvykle se používá jako milisekundy). Pokud test trvá déle než zadaná hodnota časového limitu, je test označen jako neúspěšný. Tento časový limit můžeme použít k provedení testu výkonu, abychom se ujistili, že se metoda vrací v rozumné době.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Tento atribut pomáhá při určování počtu vyvolání testovací metody.
@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ýstup:
Název stránky je Google
Název stránky je Google
Název stránky je Google
Název stránky je Google
Název stránky je Google
# 14) invocationTimeOut: Toto je maximální čas (počet milisekund), který by měl tento test trvat pro všechny počty vyvolání. Tuto metodu je třeba použít spolu s metodou počtu vyvolání, jinak by byla ignorována.
Příklad:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Výše uvedený příklad ukazuje, že provedení tohoto testu bude trvat celkem 4 sekundy a při každém vyvolání / spuštění testu bude jeho provedení trvat 1 sekundu.
# 15) @DataProvider : Tato metoda pomáhá při zadávání údajů pro zkušební metodu. Nejprve musíme deklarovat metodu anotovanou @DataProvider a poté použít tuto metodu v požadované testovací metodě pomocí atributu „DataProvider“ v anotaci @Test.
Poskytovatel dat vrátí pole objektů, zejména dvourozměrné pole objektů () (). První pole představuje datovou sadu a druhé pole obsahuje parametry.
@DataProvider (name = “Test”) - Zde název představuje jméno poskytovatele dat. Pokud název není uveden, název DataProvider se automaticky nastaví na název metody.
Pří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žívá se k určení metody jako továrny pro poskytování objektů, které má TestNG používat pro své testovací třídy. Pomocí @Factory můžeme vytvořit dynamické testy za běhu a mělo by vrátit objekt pole.
Příklad:
Vezměme si příklad, abychom tomu lépe porozuměli. Vytvoříme dvě třídy, 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ýstup : Google byl úspěšně spuštěn
Gmail byl úspěšně přihlášen
Rozdíl mezi poznámkami @Factory a @DataProvider
Mezi oběma anotacemi je základní rozdíl. Ohledně těchto dvou anotací existuje spousta zmatků, například kde je použít a proč?
Najdeme odpovědi.
@DataProvider: Tato anotace bude parametrizovat konkrétní testovací metodu a provede test v konkrétním čísle. krát na základě údajů poskytnutých touto metodou.
Například, pokud existují dva parametry, bude testovací metoda provedena dvakrát. Například pokud se chceme pokaždé přihlásit na web s různými sadami uživatelských jmen a hesel, je to užitečné, protože musíme poskytnout parametry, které chceme otestovat.
@Továrna : Tím se provedou všechny testovací metody přítomné v souboru testovací třídy při použití samostatné instance této třídy. To je užitečné, pokud chceme testovací třídu spustit několikrát.
Například , pokud musíme otestovat přihlašovací funkci jakékoli aplikace nebo webu a protože musíme tento test spustit vícekrát, je lepší použít @Factory, kde můžeme vytvořit více instancí testu a spustit testy.
Podívejme se na tyto příklady, abychom poznali rozdíl.
@DataProvider Příklad :
@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 : Ve výše uvedeném programu jsme poskytli dvě data a výsledek programu by byl:
Jména jsou: Mihir 145632
Jména jsou: Kumar 28242
To ukazuje, že pokud zvýšíme počet dat v metodě zprávy, pak metoda tisku provede stejný počet opakování.
@ Tovární příklad :
TestNG Factory je velmi užitečný, když musíme spustit více testovacích tříd pomocí jedné testovací třídy.
Podívejme se na příklad.
K tomu musíme vytvořit dvě testovací třídy s několika testovacími metodami uvnitř nich.
Testovací data 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } }
Testovací data 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } }
Nyní musíme definovat metodu @Factory, která vrací pole objektů výše definovaných tříd.
Tovární 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ýstup:
Zkušební metoda Test1
Zkušební metoda Test2
PROŠLO: test1
PROŠLO: test2
Posluchači TestNG s typy
Jednoduše řečeno, posluchači poslouchají událost definovanou v selenovém skriptu a podle toho se chovají. Hlavním účelem je vytvářet protokoly a přizpůsobovat zprávy TestNG.
V TestNG je k dispozici mnoho typů posluchačů.
Například , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListener, ITest
Pokud však jde o testování, používáme pouze několik z nich, jak je popsáno níže:
# 1) ISuiteListener
Toto je posluchač testovacích sad. Skládá se ze dvou metod, tj. onStart () a onFinish () .
Kdykoli implementujeme tohoto posluchače, zaručí to, že koncový uživatel vyvolá metody onStart () a onFinish () před a po spuštění sady TestNG.
Podrobnosti metody:
void onStart (ISuite suite) : Tato metoda je vyvolána před spuštěním Suite Runner.
void onFinish (ISuite suite) : Tato metoda je vyvolána poté, co Suite Runner spustil všechny testovací sady.
Pří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 posluchač funguje stejně jako ISuiteListener. Jediný rozdíl je však v tom, že se jedná o hovor před a po Testu, nikoli o sadu. Je posluchačem pro testovací běh a tento posluchač má v sobě sedm metod.
(i) onStart () :Tato metoda je vyvolána po vytvoření instance testovací třídy a před voláním jakékoli metody konfigurace.
Příklad:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish () :Tato metoda je vyvolána po spuštění všech testů a volání všech konfiguračních metod.
Příklad:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Tato metoda je vyvolána pokaždé, než bude vyvolán test. ITestResult je pouze částečně vyplněn odkazy na třídu, metodu, počáteční milis a stav.
Metoda: void onTestStart (ITestResult result)
Příklad:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Tato metoda je vyvolána pokaždé, když je test úspěšný.
Metoda: void onTestSuccess (výsledek ITestResult)
Příklad:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Tato metoda je vyvolána pokaždé, když test selže.
Metoda: void onTestFailure (ITestResult result)
Příklad:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Tato metoda je vyvolána pokaždé, když je test přeskočen.
Metoda: void onTestSkipped (ITestResult result)
Příklad:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Tato metoda je vyvolána pokaždé, když je metoda neúspěšná, ale byla anotována s procentem úspěchu a selhání ji udržuje v rámci procenta úspěchu.
Metoda: void onTestFailedButWithinSuccessPercentage (výsledek ITestResult)
Pří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 posluchač, který sleduje začátek a konec běhu TestNG. Má dvě metody, tj. onExecutionStart () a onExecutionFinish () .
Metoda onExecutionStart () je volána dříve, než TestNG začne spouštět sady a metoda onExecutionFinish () je volána po provedení TestNG s spuštěním všech testovacích sad.
Metoda:
void onExecutionStart ()
void onExecutionFinish ()
Pří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 posluchač, který je vyvolán před a po vyvolání metody TestNG. Tento posluchač je vyvolán pouze pro konfigurace a testovací metody. Má v sobě pouze dvě metody, tj. AfterInvocation a beforeInvocation.
- před vyvoláním: Vyvolat před každou metodou.
- afterInvocation: Vyvolat po každé metodě.
Metoda:
void beforeInvocation (metoda IInvokedMethod, ITestResult testResult)
void afterInvocation (IInvokedMethod method, ITestResult testResult)
Pří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
Tato třída se používá ke změně seznamu testovacích metod, které TestNG bude spuštěno. Pomocí této metody můžeme změnit pořadí testovacích metod.
Platí pouze pro ty metody, které nemají žádné závislé osoby, a ty metody, které nezávisí na jiných testovacích metodách, budou předány v parametrech. Toto rozhraní vrátí seznam testovacích metod, které je třeba spustit, ale jiným tříděným způsobem.
Metoda:
jaký je nejlepší youtube video převodník
zachycení java.util.List (metody java.util.List, kontext ITestContext)
Pří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 je implementováno klienty za účelem vygenerování zprávy. Tato metoda bude vyvolána, jakmile bude spuštěna celá sada a parametry poskytnou všechny výsledky testu, ke kterým došlo během daného běhu.
Metoda:
void generateReport (java.util.List xmlSuites, java.util.List suites, java.lang.String outputDirectory)
Pří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ávěr
V tomto článku jsme viděli, jak mohou být poznámky TestNG užitečné při usnadňování logiky našeho programu. Poznámky se používají podle potřeby.
Můžete předat parametry do anotací a provést také Testování na základě dat. Testovací případy můžete spustit ve skupinách a ušetřit čas. S posluchači můžete dokonce generovat zprávy. Nemyslíte si, že je to úžasné?
TestNG.xml bude podrobně vysvětlen v našem nadcházejícím tutoriálu. Tento soubor XML je páteří rámce TestNG a pomůže nám při provádění testovacích případů.
=> Zde se podívejte na průvodce výcvikem Perfect TestNG.
Doporučené čtení
- Naučte se používat poznámky TestNG v selenu (s příklady)
- Tvrzení v selenu pomocí rámců Junit a TestNG
- Úvod do rámce JUnit a jeho použití v selenovém skriptu - výuka selenu č. 11
- 30+ nejlepších návodů na selen: Naučte se selen se skutečnými příklady
- Příklad TestNG: Jak vytvořit a použít soubor TestNG.xml
- Posluchači JMeter: Analýza výsledků s různými posluchači
- Jak používat rámec TestNG pro vytváření skriptů selenu - výukový program TestNG selenu č. 12
- Výukový program Eclipse: Integrace TestNG do prostředí Eclipse Java IDE