Careeroza
Extent Reports 5
Setup
Extent Reports creates a single self-contained HTML file (the "Spark" report) with a dashboard, test list, logs and screenshots. It is very popular in Indian service-company frameworks because the file can be emailed to the client.
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>5.1.2</version>
</dependency>An ExtentManager and a Listener
public final class ExtentManager {
private static ExtentReports extent;
private static final ThreadLocal<ExtentTest> TEST = new ThreadLocal<>();
public static synchronized ExtentReports get() {
if (extent == null) {
ExtentSparkReporter spark = new ExtentSparkReporter("target/extent/ShopEaseReport.html");
spark.config().setDocumentTitle("ShopEase UI Tests");
spark.config().setReportName("Regression - build 412");
spark.config().setTheme(Theme.STANDARD);
extent = new ExtentReports();
extent.attachReporter(spark);
extent.setSystemInfo("Environment", "QA");
extent.setSystemInfo("Browser", "Chrome 130");
}
return extent;
}
public static ExtentTest test() { return TEST.get(); }
public static void setTest(ExtentTest t) { TEST.set(t); }
}
public class ExtentListener implements ITestListener {
@Override public void onTestStart(ITestResult r) {
ExtentManager.setTest(ExtentManager.get().createTest(r.getMethod().getMethodName())
.assignCategory(r.getMethod().getGroups()));
}
@Override public void onTestSuccess(ITestResult r) { ExtentManager.test().pass("Test passed"); }
@Override public void onTestFailure(ITestResult r) { ExtentManager.test().fail(r.getThrowable()); }
@Override public void onTestSkipped(ITestResult r) { ExtentManager.test().skip("Skipped"); }
@Override public void onFinish(ITestContext ctx) { ExtentManager.get().flush(); } // writes the HTML
}Logging Steps
ExtentManager.test().info("Opened login page");
ExtentManager.test().info("Logged in as [email protected]");
ExtentManager.test().pass("Cart count is 1");Example
After the run:
mvn test && ls target/extentExample output
[INFO] Tests run: 6, Failures: 1, Errors: 0, Skipped: 1 ShopEaseReport.html (open in a browser: dashboard shows 4 passed, 1 failed, 1 skipped; the failed test addToCart shows the AssertionError, its logged steps and the screenshot)
Note: Forgetting extent.flush() is the number one reason for an empty report. Call it once, after all tests (in onFinish or @AfterSuite).