top of page

Listeners In TestNG

​

​

What Are Listeners In TestNG ?

​

TestNG listeners are interfaces that modifies the default testNG's behaviour.

These are called when an event occurs in tests.

​

In testNG,below are the major types of listeners :

​

  1. ITestListener

  2. IReporter

  3. IAnnotaionTransformer

  4. IAnnotaionTransformer2

  5. IConfigurableListener

  6. IConfigurationListener

  7. IExecutionListener

  8. IHookable

  9. IInvokedMethodListener

  10. IInvokedMethodListener2

  11. IMethodInterceptor

  12. ISuiteListener

​

ITestListener is the most adopted listener above all.

So,here we'll move forward with ITestListener.

​

Below are the methods of interface ITestListener :

public void onStart(ITestContext context)

​

public void onFinish(ITestContext context)

​

public void onTestStart(ITestResult result)

 

public void onTestSuccess(ITestResult result)

​

public void onTestFailure(ITestResult result)

​

public void onTestSkipped(ITestResult result)

​

public void onTestFailedButWithinSuccessPercentage(ITestResult result)

​

​

Listeners can be implemented at two levels :

  • At Class Level

  • At Suite Level

​

Implementeing listeners at class level

To apply listeners on test classes,first create a listener class and implement the mentioned listener interface then override its methods.

Now use @Listeners annotation before the test class and pass the .class name of the created listener class.

Syntax :

@Listeners(classname.class)

​

​

Example : 

​

package testNGexamples;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class ListenerClass implements ITestListener {

​

    @Override
   public void onStart(ITestContext context) {
       System.out.println("Test Class Instantiated :");
   }

​

    @Override
   public void onFinish(ITestContext context) {
       System.out.println("All Tests Finished : :");
   }

​

    @Override
   public void onTestStart(ITestResult result) {
       System.out.println(result.getName() + "Test Method is Called :");
   }

​

    @Override
   public void onTestSuccess(ITestResult result) {
       System.out.println(result.getName() + "Test is Success :");
   }

​

    @Override
   public void onTestFailure(ITestResult result) {
       System.out.println(result.getName() + "Test Failed :");
   }

​

    @Override
   public void onTestSkipped(ITestResult result) {
       System.out.println(result.getName() + "Test skipped :");
   }

​

    @Override
   public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
       System.out.println(result.getName() + "Test Failed But Within Succes Percentage :");
   }
}

 

​

Adding above class in test class using @Listeners annotation as :

​

package testNGexamples;

import org.testng.Assert;
import org.testng.SkipException;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(ListenerClass.class)
public class TestNGWithListeners {

    int num = 1, i = 1;

​

    @Test
   public void simpleFunction() {
       System.out.println("simpleFunction is Passed :");

    }

​

    @Test(successPercentage = 60, invocationCount = 2)
   public void repeatedTest() {
       Assert.assertEquals(num, i);
       num++;
   }

​

    @Test
   public void testAssertCheck() {
       Assert.assertEquals(num, i);
       num++;
   }

​

    @Test
   public void testSkip() {
       throw new SkipException("testSkip must be Skipped :");
   }
}

 

​

Output : 

​

[RemoteTestNG] detected TestNG version 7.4.0
Test Class Instantiated :
repeatedTestTest Method is Called :
repeatedTestTest is Success :
repeatedTestTest Method is Called :
repeatedTestTest Failed But Within Succes Percentage :
simpleFunctionTest Method is Called :
simpleFunction is Passed :
simpleFunctionTest is Success :
testAssertCheckTest Method is Called :
testAssertCheckTest Failed :
testSkipTest Method is Called :
testSkipTest skipped :
All Tests Finished : :
PASSED: simpleFunction
PASSED: repeatedTest
FAILED: testAssertCheck

 

===============================================
    Default test
    Tests run: 4, Failures: 1, Skips: 1
===============================================


===============================================
Default suite
Total tests run: 5, Passes: 2, Failures: 2, Skips: 1
===============================================

​

​

Implementeing listeners at suite level

To apply listeners at suite level,just remove @Listeners annotation from the class and add <listener> in .xml as :

​

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test-Suite">
   <listeners>
       <listener class-name="testNGexamples.ListenerClass"></listener>
   </listeners>
   <test name="TestNG Listeners Execution">
       <classes>
           <class name="testNGexamples.TestNGWithListeners"></class>
       </classes>
   </test>
</suite>

​

 

 

Here 'ListenerClass' is the class in which interface methods have been overrided and 'TestNGWithListeners' is the class on which listener is applied.

​

​

​

​

​

bottom of page