TestNG Listeners
Listeners in TestNG allow you to respond to test events — like test start, success, failure, or skip — and perform custom actions such as logging, screenshot capture on failure, or custom reporting.
How Listeners work:
- ✓TestNG fires events when tests run (onTestStart, onTestSuccess, onTestFailure, etc.)
- ✓You implement the
ITestListenerinterface to hook into these events - ✓Your custom code runs automatically at each event
Key Listener interfaces:
- ✓
ITestListener– Handles test-level events (most common) - ✓
ISuiteListener– Handles suite-level events (onStart, onFinish) - ✓
IReporter– Generates custom reports after suite execution
Implementing ITestListener:
Java
package testnglisteners;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class Mylisteners implements ITestListener {
@Override
public void onTestStart(ITestResult result) {
System.out.println("Test started: " + result.getName());
}
@Override
public void onTestSuccess(ITestResult result) {
System.out.println("Test passed: " + result.getName());
}
@Override
public void onTestFailure(ITestResult result) {
System.out.println("Test failed: " + result.getName());
// Take screenshot on failure here
}
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Test skipped: " + result.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) { }
@Override
public void onStart(ITestContext context) { }
@Override
public void onFinish(ITestContext context) { }
}
Practical use — screenshot on failure:
Java
@Override
public void onTestFailure(ITestResult result) {
TakesScreenshot ts = (TakesScreenshot) driver;
File src = ts.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
}
Register listener in testng.xml:
XML
<suite name="MySuite">
<listeners>
<listener class-name="testnglisteners.Mylisteners" />
</listeners>
<test name="LoginTest">
<classes>
<class name="tests.LoginTest" />
</classes>
</test>
</suite>
Key points:
- ✓TestNG listeners perform actions when test events are triggered
- ✓Most commonly used for configuring reports and logging
- ✓
ITestListenerandTestListenerAdapterare the most widely used - ✓Methods:
onTestSuccess,onTestFailure,onTestSkipped,onStart,onFinish - ✓You must implement the interface in a listener class of your own
