testng annotations listeners
Цей підручник пояснює різні типи анотацій та слухачів випробувань. Ви також дізнаєтесь, як використовувати анотації та слухачі TestNG з прикладами:
Тут ми запустимо базову програму TestNG із використанням анотацій TestNG, а також побачимо роль слухачів TestNG та способи їх використання під час тестування.
=> Прочитайте серію навчальних програм Easy TestNG.
Що ви дізнаєтесь:
Що таке анотації TestNG?
Це програмна або бізнес-логіка, яка використовується для управління потоком методів. Вони відіграють дуже важливу роль у TestNG. Ці анотації відрізняються в кожному проекті відповідно до вимог. Потік анотацій залишається незмінним у кожній програмі, незважаючи на різні вимоги.
Існують різні типи анотацій TestNG, які роблять TestNG простішим та кращим, ніж JUnit. Кожна з цих анотацій працюватиме на певній події в TestNG.
Типи анотацій у TestNG
Нижче наведено списки анотацій та їх атрибути, які використовуються в TestNG. Давайте детально вивчимо їх та їх звичаї.
Раніше
- @BeforeSuite: Цей метод буде виконаний до запуску всіх тестів у наборі.
- @BeforeTest: Цей метод буде виконаний до оголошення кожного тестового розділу в наборі.
- @BeforeClass: Цей метод буде виконаний перед першим тестовим методом у поточному класі.
- @BeforeMethod: Цей метод буде виконаний перед кожним тестовим методом.
- @BeforeGroups: Цей метод буде виконаний до того, як буде згадано будь-який метод тестування зазначеної групи.
- @ Тест : Позначає клас або метод як частину тесту. Або ми можемо сказати, що це робить метод тестовим методом.
Після
- @AfterSuite: Цей метод буде виконаний після запуску всіх тестів у наборі.
- @AfterTest: Цей метод буде виконаний після оголошення кожного тестового розділу в наборі.
- @Після занять: Цей метод буде виконаний після останнього тестового методу класу.
- @AfterMethod: Цей метод буде виконаний після виконання кожного тестового методу.
- @AfterGroups: Цей метод буде виконаний після виконання останнього методу тестування зазначеної групи.
Потік робіт Анотацій
Коли ми запускаємо файл TestNG.xml, анотації TestNG будуть виконуватися в такій послідовності:
До набору -> До випробування -> До занять -> До методу -> @ Тест -> Після методу -> Після занять -> Після випробування -> Після набору
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@ Тест має багато інших атрибутів, які допомагають нам ефективніше виконувати наші тестові кейси.
Нижче наведені типи атрибутів та їх описи з прикладами.
# 1) alwaysRun: Якщо встановлено значення true, цей метод буде працювати, навіть якщо це залежить від методу, який не вдався.
Приклад: Тест (alwaysRun = true)
# 2) dataProvider : Тут відображається назва постачальника даних для цього методу. Він має лише атрибути, тобто назву. Ми можемо використовувати його, коли ми тестуємо наше програмне забезпечення з кількома наборами даних під час введення або під час роботи. Це також відоме як тестування на основі даних. За допомогою цього атрибута ми можемо проводити тестування на основі даних.
Приклад: @dataProvider (name = ”TestData”)
# 3) dataProviderClass : Цей атрибут дозволить вам вказати клас постачальника даних, який міститиме постачальника даних, який буде використовувати метод @Test.
Приклад: @Test (dataProvider = “Тест даних клієнта”, dataProviderClass = ClientDetailsTest.class)
# 4) dependOnGroups : Цей атрибут залежить від списку груп, тобто метод тестування розпочнеться лише після виконання залежних груп.
Примітка : Якщо будь-який з тестів у групах, які залежать від цього, не вдається, він пропустить цей тест.
Нижче наведено приклад:
@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) dependOnMethods : Ця анотація залежить від списку методів. Це означає, що метод тестування почне виконання лише після того, як будуть виконані залежні методи.
Примітка : Якщо будь-який з тестів у залежних методах не вдається, він пропустить цей тест.
Приклад:
@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: Ми можемо встановити атрибути методу тесту на true, і це змусить тест виконуватися, навіть якщо деякі тести в групі залежать від відмови.
Наприклад:
@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).
Приклад:
@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; }
No 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 і виконання виконувалось у порядку зростання.
Здано: launchApp
Здано: loginApp
Здано: checkTrans
# 12) час очікування : Цей атрибут допомагає вказати значення часу очікування для тесту (зазвичай використовується у мілісекундах). Якщо тест приймає більше вказаного значення тайм-ауту, тоді тест позначений як невдалий. Ми можемо використати цей тайм-аут для тестування продуктивності, щоб переконатися, що метод повертається протягом розумного часу.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Цей атрибут допомагає визначити, скільки разів метод тестування повинен використовуватися.
@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();
Вихід:
Заголовок сторінки - Google
Заголовок сторінки - Google
Заголовок сторінки - Google
Заголовок сторінки - Google
Заголовок сторінки - Google
# 14) invocationTimeOut: Це максимальний час (не мілісекунд), який цей тест повинен пройти для всіх підрахунків викликів. Цей метод слід використовувати разом із методом підрахунку викликів, інакше він буде проігнорований.
Приклад:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Наведений вище приклад показує, що для виконання цього тесту потрібно в цілому 4 секунди, і кожного разу, коли тест запускається / запускається, на його виконання знадобиться 1 секунда.
# 15) @DataProvider : Цей метод допомагає надавати дані для тестового методу. Спочатку ми повинні оголосити метод, котрий коментується @DataProvider, а потім використовувати цей метод у необхідному методі тестування, використовуючи атрибут “DataProvider” в анотації @Test.
Постачальник даних повертає масив об’єктів, особливо двовимірний масив об’єктів () (). Перший масив представляє набір даних, а другий масив містить параметри.
@DataProvider (name = “Test”) - тут ім’я відображає ім’я постачальника даних. Якщо ім'я не вказано, тоді ім'я DataProvider автоматично встановить ім'я методу.
Приклад:
@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 : Це використовується для визначення методу як фабрики для надання об'єктів, які повинні використовуватися TestNG для своїх тестових класів. Використовуючи @Factory, ми можемо створювати динамічні тести під час виконання, і він повинен повертати об'єкт масиву.
Приклад:
Давайте візьмемо приклад, щоб краще це зрозуміти. Ми створимо два класи, тобто FactorySample.Java та 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; } }
Вихідні дані : Google успішно запущений
Gmail успішно ввійшов у систему
Різниця між анотаціями @Factory та @DataProvider
Між обома анотаціями існує основна різниця. Існує багато плутанини щодо цих двох анотацій, наприклад, де їх використовувати і чому?
Давайте знайдемо відповіді.
@DataProvider: Ця анотація буде параметризувати конкретний метод тестування та виконати тест за певним номером. разів на основі даних, наданих цим методом.
Наприклад, якщо є два параметри, то метод тесту буде виконаний двічі. Наприклад, якщо ми хочемо кожного разу входити на сайт із різними наборами імен користувачів та паролів, це корисно, оскільки ми повинні надати параметри для тестування.
@ Фабрика : Це виконає всі методи тестування, що є у файлі тестового класу, використовуючи окремий екземпляр цього класу. Це корисно, якщо ми хочемо запустити тестовий клас будь-яку кількість разів.
Наприклад , якщо нам потрібно протестувати функцію входу в будь-яку програму чи веб-сайт, і оскільки нам доводиться запускати цей тест кілька разів, краще використовувати @Factory, де ми можемо створити кілька екземплярів тесту та запустити тести.
Давайте подивимось на ці приклади, щоб дізнатися різницю.
Приклад @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); }
Примітка : У наведеній вище програмі ми надали два дані, і результат програми буде таким:
Імена: Міхір 145632
Імена: Кумар 28242
Це показує, що якщо ми збільшимо кількість даних у методі повідомлення, то метод друку буде виконуватися стільки ж разів.
Приклад @Factory :
TestNG Factory дуже корисний, коли нам доводиться запускати кілька тестових класів, використовуючи один тестовий клас.
Подивимось приклад.
Для цього ми повинні створити два тестові класи з невеликою кількістю методів тестування.
Тестові дані 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'); } }
Тепер нам потрібно визначити метод @Factory, який повертає масив об’єктів із визначених вище класів.
Заводська програма:
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; } }
Вихід:
Метод випробування Test1
Метод випробування Test2
ЗДАНО: тест1
ЗДАНО: тест2
Слухачі TestNG з типами
Простіше кажучи, слухачі слухають подію, визначену в сценарії Selenium, і поводяться відповідно до неї. Основною метою є створення журналів та налаштування звітів TestNG.
У TestNG доступно багато типів слухачів.
Наприклад , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListner
Однак, коли справа стосується тестування, ми використовуємо лише деякі з них, як обговорюється нижче:
# 1) ISuiteListener
Це слухач для тестових наборів. Він складається з двох методів, тобто onStart () і onFinish () .
Кожного разу, коли ми реалізуємо цей прослуховувач, він гарантуватиме, що кінцевий користувач буде викликати методи onStart () і onFinish () до і після запуску набору TestNG.
Деталі методу:
void onStart (набір ISuite) : Цей метод викликається перед запуском Suite Runner.
void onFinish (набір ISuite) : Цей метод викликається після запуску Suite Runner усіх тестових наборів.
Приклад:
@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
Цей прослуховувач працює так само, як ISuiteListener. Однак єдина різниця полягає в тому, що він здійснює дзвінок до і після тесту, а не в Suite. Це слухач для тестового запуску, і цей слухач має сім методів.
(i) onStart () :Цей метод викликається після створення тестового класу та перед викликом будь-якого методу конфігурації.
Приклад:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish () :Цей метод викликається після запуску всіх тестів і виклику всіх методів конфігурації.
Приклад:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Цей метод викликається кожного разу перед тим, як буде викликаний тест. ITestResult лише частково заповнено посиланнями на клас, метод, стартові мілісексуали та статус.
Метод: void onTestStart (результат ITestResult)
Приклад:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Цей метод викликається кожного разу, коли тест успішно виконується.
Метод: void onTestSuccess (результат ITestResult)
Приклад:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Цей метод викликається кожного разу, коли тест не вдається.
Метод: void onTestFailure (результат ITestResult)
Приклад:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Цей метод викликається кожного разу, коли пропускається тест.
Метод: void onTestSkipped (результат ITestResult)
Приклад:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Цей метод викликається кожного разу, коли метод не вдався, але він був анотований із відсотком успіху, і помилка утримує його в межах відсотка успіху.
Метод: void onTestFailedButWithinSuccessPercentage (результат ITestResult)
Приклад:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) IExecutionListener
Це слухач, який контролює початок і кінець запуску TestNG. Він має два методи, тобто onExecutionStart () і onExecutionFinish () .
Метод onExecutionStart () викликається до того, як TestNG починає запускати набори, а метод onExecutionFinish () викликається після того, як TestNG буде виконано з запуском усіх тестових наборів.
Метод:
void onExecutionStart ()
void onExecutionFinish ()
Приклад:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) IInvokedMethodListener
Це слухач, який отримує виклик до і після того, як метод викликається TestNG. Цей прослуховувач викликається лише для конфігурацій та методів тестування. У ньому є лише два методи, тобто afterInvocation і beforeInvocation.
- до запрошення: Звертайтесь до кожного методу.
- після виклику: Закликайте після кожного методу.
Метод:
void beforeInvocation (метод IInvokedMethod, ITestResult testResult)
void afterInvocation (метод IInvokedMethod, ITestResult testResult)
Приклад:
@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
Цей клас використовується для зміни списку методів тестування, які TestNG збирається запустити. За допомогою цього методу ми можемо змінити порядок переліку методів тестування.
Він застосовується лише до тих методів, які не мають залежних речовин, і ті методи, які не залежать від будь-яких інших методів тестування, передаватимуться в параметри. Цей інтерфейс поверне список методів тестування, які потрібно запустити, але з іншим сортуванням.
Метод:
безперервна інтеграція та інструменти безперервної доставки
java.util.List перехоплення (java.util.List методи, контекст ITestContext)
Приклад:
@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
Це реалізується клієнтами для створення звіту. Цей метод буде викликаний, як тільки буде запущено весь набір, і параметри дадуть усі результати тестування, які відбулися під час цього запуску.
Метод:
void createReport (java.util.List xmlSuites, java.util.List suites, java.lang.String outputDirectory)
Приклад:
@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(); }
Висновок
У цій статті ми побачили, як Анотації TestNG можуть бути корисними для спрощення логіки нашої програми. Анотації використовуються за потреби.
Ви можете передати параметри в анотації та також провести тестування на основі даних. Ви можете запускати тестові кейси в групах і економити час. Зі слухачами ви навіть можете створювати звіти. Вам не здається, що це чудово?
TestNG.xml буде детально пояснено у нашому майбутньому навчальному посібнику. Цей XML-файл є основою середовища TestNG, і він допоможе нам у виконанні наших тестових випадків.
=> Ознайомтесь з Ідеальним навчальним посібником з тестування на природний газ тут.
Рекомендована література
- Дізнайтеся, як використовувати анотації TestNG у селені (з прикладами)
- Твердження в селені за допомогою середовищ Junit та TestNG
- Вступ до JUnit Framework та його використання в сценарії селену - Підручник з селену No11
- 30+ найкращих підручників із селену: вивчіть селен на реальних прикладах
- Приклад TestNG: Як створити та використовувати файл TestNG.xml
- Слухачі JMeter: Аналіз результатів за допомогою різних слухачів
- Як використовувати TestNG Framework для створення сценаріїв селену - Підручник No12 для TestNG
- Підручник з Eclipse: Інтеграція TestNG в IDE Eclipse Java