Have a question?
Message sent Close
View Categories

TestNG Listeners

📄
filename.js
public class MyTestListener implements ITestListener {

  @Override
  public void onTestStart(ITestResult result) {
    System.out.println(">> TEST START: " + result.getMethod().getMethodName());
  }

  @Override
  public void onTestSuccess(ITestResult result) {
    System.out.println(">> TEST PASS: " + result.getMethod().getMethodName());
  }

  @Override
  public void onTestFailure(ITestResult result) {
    System.out.println(">> TEST FAIL: " + result.getMethod().getMethodName());
  }
  // implement other methods as needed…
}
📄
filename.js
@Listeners(MyTestListener.class)
public class MyTests { … }

📄
filename.js
public class MyReporter implements IReporter {

  @Override
  public void generateReport(List<XmlSuite> xmlSuites,
                             List<ISuite> suites,
                             String outputDir) {
    // iterate suites → results, output custom HTML / CSV / JSON
  }
}

📄
filename.js
public class MySuiteListener implements ISuiteListener {

  @Override
  public vid onStart(ISuite suite) {
    System.out.println(">> SUITE START: " + suite.getName());
  }

  @Override
  public void onFinish(ISuite suite) {
    System.out.println(">> SUITE END: " + suite.getName());
  }
}

📄
filename.js
public class MyInvokeListener implements IInvokedMethodListener {

  @Override
  public void beforeInvocation(IInvokedMethod im, ITestResult tr) {
    System.out.println("BEFORE: " +
      im.getTestMethod().getMethodName());
  }

  @Override
  public void afterInvocation(IInvokedMethod im, ITestResult tr) {
    System.out.println("AFTER: " +
      im.getTestMethod().getMethodName());
  }
}

📄
filename.js
public class MyHookable implements IHookable {

  @Override
  public void run(IHookCallBack cb, ITestResult tr) {
    // before
    System.out.println("HOOK before " + tr.getMethod().getMethodName());
    cb.runTestMethod(tr);  // actually invoke the test
    // after
    System.out.println("HOOK after " + tr.getMethod().getMethodName());
  }
}

📄
filename.js
public class MyConfigListener implements IConfigurationListener {

  @Override
  public void onConfigurationSuccess(ITestResult tr) {
    System.out.println("CONFIG PASS: " + tr.getMethod());
  }

  @Override
  public void onConfigurationFailure(ITestResult tr) {
    System.out.println("CONFIG FAIL: " + tr.getMethod());
  }
  // …
}

📄
filename.js
public class MyTransformer implements IAnnotationTransformer {

  @Override
  public void transform(ITestAnnotation ann,
                        Class testClass,
                        Constructor testConstructor,
                        Method testMethod) {
    if (ann.getRetryAnalyzer() == null) {
      ann.setRetryAnalyzer(MyRetryAnalyzer.class);
    }
  }
}

📄
filename.js
public class MyExecutionListener implements IExecutionListener {

  @Override
  public void onExecutionStart() {
    System.out.println(">> TESTNG START");
  }

  @Override
  public void onExecutionFinish() {
    System.out.println(">> TESTNG FINISH");
  }
}

📄
filename.js
public class MyInterceptor implements IMethodInterceptor {

  @Override
  public List<IMethodInstance> intercept(List<IMethodInstance> methods,
                                         ITestContext ctx) {
    // filter out all tests named “skipMe”
    return methods.stream()
      .filter(m -> !m.getMethod().getMethodName().equals("skipMe"))
      .collect(Collectors.toList());
  }
}

📄
filename.js
<suite name="MySuite">
  <listeners>
    <listener class-name="com.example.listeners.MyTestListener"/>
    <listener class-name="com.example.listeners.MyReporter"/>
    <!-- etc. -->
  </listeners>
</suite>

📄
filename.js
@Listeners({MyTestListener.class, MyReportListener.class})
public class MyTestClass { … }