Creating Excellent HTML reports for Test Results
1> Create extentreports dependency in pom.xml
http://extentreports.com/ -> DOCUMENTATION -> Version3 -> Java -> Maven(left side Menu) -> add dependency to pom.xml
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.40.2</version>
</dependency>
Error:
com/relevantcodes/extentreports/ExtentReports ExtentReports : Unsupported major.minor version 52.0
Solution:
Set extentreprots version lower than2.40.2
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.40.2</version>
</dependency>
Update Project & Project clean
2> Create ExtentReporterNG.java in resources source folder.
package resources;
import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;
import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;
public class ExtentReporterNG implements IReporter {
private ExtentReports extent;
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
extent = new ExtentReports(outputDirectory + File.separator + "ExtentReportsTestNG.html", true);
for (ISuite suite : suites) {
Map<String, ISuiteResult> result = suite.getResults();
for (ISuiteResult r : result.values()) {
ITestContext context = r.getTestContext();
buildTestNodes(context.getPassedTests(), LogStatus.PASS);
buildTestNodes(context.getFailedTests(), LogStatus.FAIL);
buildTestNodes(context.getSkippedTests(), LogStatus.SKIP);
}
}
extent.flush();
extent.close();
}
private void buildTestNodes(IResultMap tests, LogStatus status) {
ExtentTest test;
if (tests.size() > 0) {
for (ITestResult result : tests.getAllResults()) {
test = extent.startTest(result.getMethod().getMethodName());
/*test.getTest(). = getTime(result.getStartMillis());
test.getTest().endedTime = getTime(result.getEndMillis());*/
for (String group : result.getMethod().getGroups())
test.assignCategory(group);
String message = "Test " + status.toString().toLowerCase() + "ed";
if (result.getThrowable() != null)
message = result.getThrowable().getMessage();
test.log(status, message);
extent.endTest(test);
}
}
}
private Date getTime(long millis) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
}
3> Add path to testng.xml listener tag to tell testng.xml where the ExtentReporterNG.java located.
<listeners>
<listener class-name="academy.Listeners" />
<listener class-name="resources.ExtentReporterNG" />
</listeners>
4> Execute testRefresh the project when the test execution is done.
If run test with testng.xml, the ExtentReportsTestNG.xml will be created in test-output folder.
If run test with maven command, the ExtentReportsTestNG.xml will be created in target folder.