testng annotations listeners
Овај водич објашњава различите врсте напомена и слушалаца ТестНГ-а. Такође ћете научити како да користите ТестНГ напомене и слушаоце са примерима:
Овде ћемо покренути основни ТестНГ програм користећи ТестНГ напомене, а такође ћемо видети улогу ТестНГ слушалаца и како их користити у тестирању.
=> Прочитајте серију Еаси ТраинингНГ Траининг.
Шта ћете научити:
Шта су ТестНГ напомене?
То су програмска или пословна логика која се користи у контроли протока метода. Они играју веома важну улогу у ТестНГ-у. Ове напомене се разликују у сваком пројекту у складу са захтевима. Ток напомена остаје исти у сваком програму упркос различитим захтевима.
Постоје различите врсте ТестНГ напомена које чине ТестНГ лакшим и бољим од ЈУнит-а. Свака од ових напомена покреће се на одређеном догађају у ТестНГ-у.
Врсте напомена у ТестНГ-у
Доље су дате листе напомена и њихови атрибути који се користе у ТестНГ-у. Истражимо их детаљно и њихову употребу.
пре него што
- @БефореСуите: Овај метод ће се извршити пре него што се покрену сви тестови у пакету.
- @БефореТест: Ова метода ће се извршити пре него што се сваки одељак за тестирање објави у пакету.
- @Пре наставе: Ова метода ће се извршити пре прве методе испитивања у тренутној класи.
- @БефореМетход: Ова метода ће се извршити пре сваке методе испитивања.
- @БефореГроупс: Овај метод ће се извршити пре него што се помене било који метод испитивања наведене групе.
- @Тест : Означава класу или методу као део теста. Или можемо рећи да чини методу тест методом.
После
- @АфтерСуите: Овај метод ће се извршити након покретања свих тестова у пакету.
- @АфтерТест: Ова метода ће се извршити након што се сваки одељак за тестирање објави у пакету.
- @После часа: Овај метод ће се извршити након последњег метода испитивања у класи.
- @АфтерМетход: Ова метода ће се извршити након извршавања сваке методе испитивања.
- @АфтерГроупс: Ова метода ће се извршити након извршавања последњег метода испитивања наведене групе.
Ток рада напомена
Када извршимо датотеку ТестНГ.кмл, напомене ТестНГ извршиће се у следећем низу:
Пре скупа-> Пре теста-> Пре предавања-> Пре метода-> @Тест -> После метода-> После предавања-> После теста-> После скупа
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Тест има пуно других атрибута који нам помажу у ефикаснијем извршавању тест случајева.
Испод су врсте атрибута и њихови описи са примерима.
# 1) алваисРун: Ако је постављено на Тачно, ова метода ће се покретати чак и ако зависи од методе која није успела.
Пример: Тест (алваисРун = труе)
# 2) датаПровидер : Ово приказује име добављача података за овај метод. Има само атрибуте, тј. Име. Можемо га користити када тестирамо свој софтвер са више скупова података у време уноса или у току. Ово је такође познато као тестирање на основу података. Помоћу овог атрибута можемо вршити тестирање на основу података.
Пример: @датаПровидер (наме = ”ТестДата”)
# 3) датаПровидерЦласс : Овај атрибут ће вам омогућити да одредите класу добављача података која ће садржати добављача података који ће користити метода @Тест.
Пример: @Тест (датаПровидер = „Тест података клијента“, датаПровидерЦласс = ЦлиентДетаилсТест.цласс)
# 4) депендОнГроупс : Овај атрибут зависи од листе група, тј. Метода испитивања започиње извршење тек након извршавања зависних група.
Белешка : Ако било који од тестова у групама које зависе не успе, прескочиће тај тест.
Испод је пример:
@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) зависиОнМетходс : Ова напомена зависи од листе метода. То значи да ће тест метода започети извршење тек након извршења зависних метода.
Белешка : Ако било који тест у зависним методама не успе, прескочиће га.
Пример:
@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) алваисРун = труе: Атрибуте методе испитивања можемо поставити на Тачно, а то ће присилити тест да се изврши чак и ако неки од тестова у групи зависе од неуспеха.
На пример:
@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) опис : Ово даје опис методе. Генерално, он садржи резиме у једном реду.
Пример:
@Test(description = “Regression Test Summary”)
# 8) омогућено : Овај атрибут помаже у одређивању желимо ли покренути / извршити одређену методу испитивања у тренутном пакету / класи или не. Понекад не желимо да покренемо неколико тестова из неких разлога као што се захтев / функција често мења и не желимо да ометамо тренутно покретање за ту одређену функцију.
У тим случајевима можемо једноставно занемарити / онемогућити тај одређени тест постављањем ове функције као @Тест (енаблед = фалсе).
Пример:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); }
# 9) очекивани изузеци : Овај атрибут приказује листу изузетака које ће тест метода убацити у време извођења. Ако се за метод не изузму изузеци или било који други изузеци, тада се тест означава као неуспех.
Пример:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) групе : Овај атрибут се користи за одређивање група којима метода испитивања припада.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) приоритет : Ово помаже у одређивању приоритета метода испитивања, док задани приоритет почиње са 0, а тестови се извршавају у растућем редоследу.
Пример:
@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”); }
Резултати: Испод су резултати према приоритету, иако првом тесту није додељен ниједан број, приоритет је подразумевано узео као 0 и извршење је изведено у растућем редоследу.
Прошло: лаунцхАпп
Прошло: логинАпп
Прошло: цхецкТранс
# 12) временско ограничење : Овај атрибут помаже у одређивању вредности временског ограничења за тест (обично се користи у милисекундама). Ако тест узима више од наведене вредности временског ограничења, тада се тест означава као неуспешан. Ово временско ограничење можемо користити за тестирање перформанси како бисмо били сигурни да се метода враћа у разумном року.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) инвоцатионЦоунт : Овај атрибут помаже у одређивању броја позива на метод испитивања.
@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();
Излаз:
Наслов странице је Гоогле
Наслов странице је Гоогле
Наслов странице је Гоогле
Наслов странице је Гоогле
Наслов странице је Гоогле
# 14) инвоцатионТимеОут: Ово је максимално време (бр. Милисекунди) које би овај тест требало да предузме за све бројеве призивања. Овај метод се мора користити заједно са методом бројања позива, иначе би се занемарио.
Пример:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Горњи пример показује да ће извршењу овог теста бити потребно укупно 4 секунде, а сваки пут када се тест позове / покрене, требало би му 1 секунду да се изврши.
# 15) @ДатаПровидер : Ова метода помаже у пружању података за тест методу. Прво морамо да декларишемо метод означен @ДатаПровидер, а затим да користимо овај метод у траженој тест методи користећи атрибут „ДатаПровидер“ у анотацији @Тест.
Добављач података враћа низ објеката, посебно дводимензионални низ објеката () (). Први низ представља скуп података, а други низ садржи параметре.
@ДатаПровидер (наме = „Тест“) - Овде име представља име добављача података. Ако име није дато, тада ће се име ДатаПровидер-а аутоматски поставити на име методе.
Пример:
@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) @ Фабрика : Ово се користи за одређивање методе као фабрике за обезбеђивање објеката које ће ТестНГ користити за своје класе испитивања. Коришћењем @Фацтори можемо да креирамо динамичке тестове у време извођења и требало би да врати објект низа.
Пример:
Узмимо пример да бисмо га боље разумели. Направићемо две класе, тј. ФацториСампле.Јава и ФацториТест.Јава
ФацториСампле.Јава
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”); }
ФацториТест.Јава
public class FactoryTest { @Factory() public Object() testFact() { FactorySample fs = new FactorySample(2); fs(0) = new googleTest(); fs(1) = new gmailLogin(); return fs; } }
Оутпут : Гоогле је успешно покренут
Гмаил се успешно пријавио
Разлика између напомена @Фацтори и @ДатаПровидер
Постоји основна разлика између обе напомене. Постоји велика забуна у вези са ове две напомене попут тога где их користити и зашто?
Пронађимо одговоре.
@ДатаПровидер: Ова напомена ће параметеризовати одређену методу испитивања и извршити тест у одређеном бр. пута на основу података пружених овом методом.
На пример, ако постоје два параметра, тада ће се метода испитивања извршити два пута. На пример, ако се желимо сваки пут пријавити на локацију са различитим скуповима корисничких имена и лозинки, онда је ово корисно јер морамо обезбедити параметре за тестирање.
@Фацтори : Ово ће извршити све методе испитивања присутне унутар датотеке класе теста, док се користи засебна инстанца те класе. Ово је корисно ако желимо да покренемо тест класу било који број пута.
На пример , ако морамо да тестирамо функцију пријаве било које апликације или веб странице и пошто морамо да покренимо овај тест више пута, боље је да користимо @Фацтори где можемо да направимо више инстанци теста и да покренемо тестове.
Погледајмо ове примере да бисмо знали разлику.
Пример @ДатаПровидер :
@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); }
Белешка : У горе наведеном програму дали смо два податка и резултат програма би био:
Имена су: Михир 145632
Имена су: Кумар 28242
То показује да ако повећамо број података у методи порука, тада ће се метода штампања извршити исти број пута.
Пример фабрике :
ТестНГ Фацтори је веома користан када морамо да покренемо више класа теста користећи једну класу теста.
Да видимо пример.
За ово морамо да направимо две класе теста са неколико метода испитивања у њима.
ТестДата 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } }
ТестДата 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } }
Сада морамо да дефинишемо методу @Фацтори која враћа низ објеката горе дефинисаних класа.
Фабрички програм:
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; } }
Излаз:
Тест1 метода испитивања
Тест2 метода испитивања
ПРОШЛО: тест1
ПРОШЛО: тест2
Слушајте слушатеље са врстама
Једноставно речено, слушаоци слушају догађај дефинисан у скрипти Селениум и понашају се у складу с тим. Главна сврха је стварање дневника и прилагођавање ТестНГ извештаја.
Постоји много врста слушалаца доступних у програму ТестНГ.
На пример , ИАннотатионТрансформер, ИАннотатионТрансформер2, ИЦонфигурабле, ИЦонфигуратионЛистенер, ИЦонфигуратионЛистенер2, ИЕкецутионЛистенер, ИХоокабле, ИИнвокедМетходЛистенер, ИИнвокедМетходЛистенер2, ИМетходИнтерцептор, ИРепортер, ИСуитеЛистнер
Међутим, што се тиче тестирања, користимо само неколико њих како је објашњено у наставку:
# 1) ИСуитеЛистенер
Ово је преслушавач за пробне пакете. Састоји се од две методе тј. онСтарт () и онФинисх () .
Кад год имплементирамо ово слушало, гарантоваће да ће крајњи корисник позвати методе онСтарт () и онФинисх () пре и после покретања пакета ТестНГ.
Детаљи методе:
воид онСтарт (ИСуите пакет) : Ова метода се позива пре покретања Суите Руннера.
воид онФинисх (ИСуите пакет) : Ова метода се позива након што је Суите Руннер покренуо све пробне пакете.
Пример:
@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) ИТестЛистенер
Овај слушалац ради баш као и ИСуитеЛистенер. Међутим, једина разлика је у томе што се позива пре и после теста, а не у пакету. Слушалац је за пробно трчање и овај слушалац има седам метода.
(и) онСтарт () :Ова метода се позива након инстанцирања класе теста и пре него што се позове било који метод конфигурације.
Пример:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ии) онФинисх () :Ова метода се позива након извођења свих тестова и позива свих метода конфигурације.
Пример:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(иии) онТестСтарт () :Ова метода се позива сваки пут пре него што се позове тест. ИТестРесулт је само делимично попуњен референцама на класу, методу, почетне милисе и статус.
Метод: поништи онТестСтарт (резултат ИТестРесулт)
Пример:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(ив) онТестСуццесс () :Ова метода се позива сваки пут када тест успе.
Метод: поништава онТестСуццесс (резултат ИТестРесулт)
Пример:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(в) онТестФаилуре () :Ова метода се позива сваки пут када тест не успе.
Метод: поништи онТестФаилуре (резултат ИТестРесулт)
Пример:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(ви) онТестСкиппед () :Ова метода се позива сваки пут када се прескочи тест.
Метод: воид онТестСкиппед (резултат ИТестРесулт)
Пример:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(вии) онТестФаиледБутВитхинСуццессПерцентаге :Ова метода се позива сваки пут када метода не успе, али је означена процентом успеха, а неуспех је задржава у оквиру процента успеха.
Метод: воид онТестФаиледБутВитхинСуццессПерцентаге (резултат ИТестРесулт)
Пример:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) ИЕкецутионЛистенер
Слушалац је тај који надгледа почетак и крај покретања ТестНГ-а. Има две методе тј. онЕкецутионСтарт () и онЕкецутионФинисх () .
метода онЕкецутионСтарт () се позива пре него што ТестНГ почне да покреће пакете, а метода онЕкецутионФинисх () након што се ТестНГ заврши са извођењем свих тест пакета.
Метод:
воид онЕкецутионСтарт ()
воид онЕкецутионФинисх ()
Пример:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) ИИнвокедМетходЛистенер
То је преслушач који се позива пре и након што метод позове ТестНГ. Овај преслушач се позива само за конфигурације и методе испитивања. У себи има само две методе, тј. АфтерИнвоцатион и бефореИнвоцатион.
- пре позива: Позовите се пре сваке методе.
- афтерИнвоцатион: Позовите се након сваке методе.
Метод:
воид бефореИнвоцатион (метода ИИнвокедМетход, ИТестРесулт тестРесулт)
воид афтерИнвоцатион (метода ИИнвокедМетход, ИТестРесулт тестРесулт)
Пример:
@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) ИМетходИнтерцептор
Ова класа се користи за промену листе метода испитивања које ће ТестНГ покретати. Коришћењем ове методе можемо преуредити листу метода испитивања.
Применљив је само на оне методе које немају зависнике и оне методе које не зависе од било које друге методе испитивања биће прослеђене у параметрима. Овај интерфејс ће вратити листу метода испитивања које треба покренути, али на другачији сортирани начин.
Метод:
бесплатне веб услуге за сапун за тестирање
пресретање јава.утил.Лист (методе јава.утил.Лист, контекст ИТестЦонтект)
Пример:
@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) ИРепортер
Ово клијенти примењују како би генерисали извештај. Ова метода ће се позвати након што се сав пакет покрене и параметри дају све резултате теста који су се догодили током тог покретања.
Метод:
воид генерирај извештај (јава.утил.Лист кмлСуитес, јава.утил.Лист суитес, јава.ланг.Стринг оутпутДирецтори)
Пример:
@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(); }
Закључак
У овом чланку видели смо како ТестНГ напомене могу бити корисне за олакшавање наше програмске логике. По потреби се користе напомене.
Параметре можете проследити напоменама и такође извршити тестирање на основу података. Тест случајеве можете покретати у групама и уштедети време. Са слушаоцима можете чак и да генеришете извештаје. Зар не мислите да је ово дивно?
ТестНГ.кмл ће бити детаљно објашњен у нашем предстојећем упутству. Ова КСМЛ датотека је окосница оквира ТестНГ и помоћи ће нам у извршавању тестова.
=> Овде погледајте савршен водич за обуку за ТестНГ.
Препоручено читање
- Научите како да користите напомене ТестНГ у селену (са примерима)
- Тврдње у селену помоћу Јунит и ТестНГ оквира
- Увод у ЈУнит Фрамеворк и његову употребу у сценаријуму Селениум - Водич за селен # 11
- 30+ најбољих водича за селен: научите селен на стварним примерима
- Пример ТестНГ: Како створити и користити датотеку ТестНГ.кмл
- Слушаоци ЈМетер: Анализа резултата са различитим слушаоцима
- Како се користи ТестНГ Фрамеворк за креирање скрипта за селен - ТестНГ Селениум Туториал # 12
- Водич за Ецлипсе: Интегрисање ТестНГ-а у Ецлипсе Јава ИДЕ