Автор оригинала: Pankaj Kumar.
Прослушиватели TestNG используются для проверки и изменения поведения тестирования. Прослушиватели TestNG всегда расширяют org.testng.ITestNGListener
интерфейс маркера. Прослушиватели TestNG могут быть определены для тестового класса с помощью org.testng.аннотации.Слушатели
Аннотация.
Прослушиватели TestNG
Существует множество интерфейсов прослушивателей, предоставляемых тестированием. Все они расширяют org.testng.ITestNGListener
интерфейс.
Давайте рассмотрим некоторые из важных слушателей TestNG.
ISuiteListener
: Мы можем использовать этот testsuitelistener для выполнения некоторых операций при запуске набора тестов и при выполнении всех тестов. Этот интерфейс содержит два метода –OnStart(набор ISuite)
иonFinish(набор ISuite)
и обеспечивает доступ к объекту набора тестов.ITestListener
: Мы можем использовать этот прослушиватель для анализа методов тестирования, ведения журнала. Мы также можем использовать их для отправки уведомлений, если какой-либо тест завершится неудачно, реализовав методonTestFailure(результат ITestResult)
.IAnnotationTransformer
: Мы можем реализовать этот интерфейс для изменения аннотаций для любого@Test
метода. Обратите внимание, что мы можем использовать эту аннотацию только с конфигурацией XML TestNG.IAnnotationTransformer2
: Мы можем реализовать этот интерфейс для изменения аннотаций для любого метода, отличного от@Test
метода.Эта аннотация может использоваться только с конфигурацией XML TestNG.Настраиваемый
: Если тестовый класс реализует этот интерфейс, его метод run() будет вызываться вместо каждого найденного метода конфигурации.Configurationlistener
: Интерфейс прослушивателя для событий, связанных с методами настройки.IExecutionListener
: Этот прослушиватель используется для отслеживания начала и окончания выполнения теста.IHookable
: Если тестовый класс реализует этот интерфейс, его метод run() будет вызываться вместо каждого найденного метода @Test.IInvokedMethodListener
: прослушиватель, который вызывается до и после вызова метода TestNG.IMethodInterceptor
: Этот класс используется для изменения списка методов тестирования, которые собирается запустить тестирование.Reporter
: Этот интерфейс может быть реализован клиентами для создания отчета.
Пример прослушивателя TestNG
Давайте создадим простой тестовый класс TestNG, затем мы реализуем несколько слушателей и добавим его в класс.
package com.journaldev.listeners; import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; import org.testng.annotations.Test; public class Test3 { @Test public void test() { System.out.println("Test3 test method"); } @Test(dataProvider = "dp") public void testString(String s) { System.out.println("Test3 testString method, input = "+s); } @DataProvider public Object[] dp() { return new Object[] {"A", "B"}; } }
Когда мы запускаем выше как тест TestNG, мы получаем следующий вывод в консоли.
[RemoteTestNG] detected TestNG version 6.14.3 Test3 test method Test3 testString method, input = A Test3 testString method, input = B PASSED: test PASSED: testString("A") PASSED: testString("B") =============================================== Default test Tests run: 3, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 3, Failures: 0, Skips: 0 ===============================================
Пример ISuiteListener
Вот простая реализация интерфейса ISuiteListener.
package com.journaldev.listeners; import org.testng.ISuite; import org.testng.ISuiteListener; public class Test3SuiteListener implements ISuiteListener { @Override public void onStart(ISuite suite) { System.out.println("TestNG suite default output directory = "+suite.getOutputDirectory()); } @Override public void onFinish(ISuite suite) { System.out.println("TestNG invoked methods = " +suite.getAllInvokedMethods()); } }
Пример ITestListener
Вот простая реализация интерфейса ITestListener.
package com.journaldev.listeners; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; public class Test3TestListener implements ITestListener{ public Test3TestListener() { System.out.println("Test3Listener constructor"); } @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 result) { } @Override public void onStart(ITestContext context) { System.out.println("Context Name = "+context.getName()); } @Override public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); } }
Теперь измените класс Test 3
, добавив прослушиватели в его определение класса.
@Listeners({Test3TestListener.class, Test3SuiteListener.class}) public class Test3 { }
Когда мы снова запускаем класс как тест TestNG, мы получаем следующий вывод.
[RemoteTestNG] detected TestNG version 6.14.3 Test3Listener constructor TestNG suite default output directory = /Users/pankaj/Documents/eclipse-github/TestNG-Examples/test-output/Default suite Context Name = Default test Test Started. 1527662805150 Test3 test method Test Success. 1527662805159 Test Started. 1527662805163 Test3 testString method, input = A Test Success. 1527662805164 Test Started. 1527662805165 Test3 testString method, input = B Test Success. 1527662805166 [ResultMap map={[TestResult name=test status=SUCCESS method=Test3.test()[pri:0, instance:com.journaldev.listeners.Test3@291caca8] output={null}]=Test3.test()[pri:0, instance:com.journaldev.listeners.Test3@291caca8], [TestResult name=testString status=SUCCESS method=Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8] output={null}]=Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8], [TestResult name=testString status=SUCCESS method=Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8] output={null}]=Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8]}] PASSED: test PASSED: testString("A") PASSED: testString("B") =============================================== Default test Tests run: 3, Failures: 0, Skips: 0 =============================================== TestNG invoked methods = [Test3.test()[pri:0, instance:com.journaldev.listeners.Test3@291caca8] 689745064, Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8]A 689745064, Test3.testString(java.lang.String)[pri:0, instance:com.journaldev.listeners.Test3@291caca8]B 689745064] =============================================== Default suite Total tests run: 3, Failures: 0, Skips: 0 ===============================================
Резюме
Прослушиватели TestNG очень эффективны в мониторинге набора тестов и тестовых случаев. Некоторые из них можно использовать для изменения поведения тестирования во время выполнения.