Рубрики
Без рубрики

Прослушиватели TestNG

Прослушиватели TestNG, Пример прослушивателей TestNG, Прослушиватели TestNG для набора тестов и тестовых случаев, org.testng.Пример ITestNGListener, Пример ISuiteListener, пример ITestListener, обучающий код слушателей TestNG.

Автор оригинала: Pankaj Kumar.

Прослушиватели TestNG используются для проверки и изменения поведения тестирования. Прослушиватели TestNG всегда расширяют org.testng.ITestNGListener интерфейс маркера. Прослушиватели TestNG могут быть определены для тестового класса с помощью org.testng.аннотации.Слушатели Аннотация.

Прослушиватели TestNG

Существует множество интерфейсов прослушивателей, предоставляемых тестированием. Все они расширяют org.testng.ITestNGListener интерфейс.

Давайте рассмотрим некоторые из важных слушателей TestNG.

  1. ISuiteListener : Мы можем использовать этот testsuitelistener для выполнения некоторых операций при запуске набора тестов и при выполнении всех тестов. Этот интерфейс содержит два метода – OnStart(набор ISuite) и onFinish(набор ISuite) и обеспечивает доступ к объекту набора тестов.
  2. ITestListener : Мы можем использовать этот прослушиватель для анализа методов тестирования, ведения журнала. Мы также можем использовать их для отправки уведомлений, если какой-либо тест завершится неудачно, реализовав метод onTestFailure(результат ITestResult) .
  3. IAnnotationTransformer : Мы можем реализовать этот интерфейс для изменения аннотаций для любого @Test метода. Обратите внимание, что мы можем использовать эту аннотацию только с конфигурацией XML TestNG.
  4. IAnnotationTransformer2 : Мы можем реализовать этот интерфейс для изменения аннотаций для любого метода, отличного от @Test метода.Эта аннотация может использоваться только с конфигурацией XML TestNG.
  5. Настраиваемый : Если тестовый класс реализует этот интерфейс, его метод run() будет вызываться вместо каждого найденного метода конфигурации.
  6. Configurationlistener : Интерфейс прослушивателя для событий, связанных с методами настройки.
  7. IExecutionListener : Этот прослушиватель используется для отслеживания начала и окончания выполнения теста.
  8. IHookable : Если тестовый класс реализует этот интерфейс, его метод run() будет вызываться вместо каждого найденного метода @Test.
  9. IInvokedMethodListener : прослушиватель, который вызывается до и после вызова метода TestNG.
  10. IMethodInterceptor : Этот класс используется для изменения списка методов тестирования, которые собирается запустить тестирование.
  11. 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 очень эффективны в мониторинге набора тестов и тестовых случаев. Некоторые из них можно использовать для изменения поведения тестирования во время выполнения.