Автор оригинала: 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 очень эффективны в мониторинге набора тестов и тестовых случаев. Некоторые из них можно использовать для изменения поведения тестирования во время выполнения.