diff --git a/testng/src/test/java/com/baeldung/reports/CustomisedReports.java b/testng/src/test/java/com/baeldung/reports/CustomisedReports.java index 58f9ff4e57..70810ab0dc 100644 --- a/testng/src/test/java/com/baeldung/reports/CustomisedReports.java +++ b/testng/src/test/java/com/baeldung/reports/CustomisedReports.java @@ -1,71 +1,83 @@ package com.baeldung.reports; -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.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.*; import org.testng.xml.XmlSuite; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.List; import java.util.Map; -import java.util.Set; +import java.util.stream.Stream; public class CustomisedReports implements IReporter { - private PrintWriter reportWriter; + private static final Logger LOGGER = LoggerFactory.getLogger(CustomisedReports.class); public void generateReport(List xmlSuites, List suites, String outputDirectory) { - new File(outputDirectory).mkdirs(); - try { - reportWriter = new PrintWriter(new BufferedWriter(new FileWriter(new File(outputDirectory, "my-report.html")))); - } catch (IOException e) { - e.printStackTrace(); - } + String reportTemplate = initReportTemplate(); String resultRow = "%s%s%s%s%s"; - initReportTemplate(); - for (ISuite suite : suites) { + StringBuilder rows = new StringBuilder(); + suites.forEach(suite -> { Map suiteResults = suite.getResults(); suiteResults.forEach((testName, suiteResult) -> { + ITestContext testContext = suiteResult.getTestContext(); - IResultMap failedResult = testContext.getFailedTests(); - Set testsFailed = failedResult.getAllResults(); - for (ITestResult testResult : testsFailed) { - reportWriter.println(String.format(resultRow, "danger", suite.getName(), testName, testResult.getName(), "FAILED", "NA")); - } + Stream failedTests = testContext.getFailedTests().getAllResults().stream(); + Stream passedTests = testContext.getPassedTests().getAllResults().stream(); + Stream skippedTests = testContext.getSkippedTests().getAllResults().stream(); - IResultMap passResult = testContext.getPassedTests(); - Set testsPassed = passResult.getAllResults(); - for (ITestResult testResult : testsPassed) { - reportWriter.println(String.format(resultRow, "success", suite.getName(), testName, testResult.getName(), "PASSED", String.valueOf(testResult.getEndMillis() - testResult.getStartMillis()))); - } + String suiteName = suite.getName(); - IResultMap skippedResult = testContext.getSkippedTests(); - Set testsSkipped = skippedResult.getAllResults(); - for (ITestResult testResult : testsSkipped) { - reportWriter.println(String.format(resultRow, "warning", suite.getName(), testName, testResult.getName(), "SKIPPED", "NA")); - } + Stream allTestResults = Stream.concat(Stream.concat(failedTests, passedTests), skippedTests); + generateReportRows(resultRow, rows, testName, suiteName, allTestResults); }); + }); + reportTemplate = reportTemplate.replaceFirst("", rows.toString() + ""); + saveReportTemplate(outputDirectory, reportTemplate); + } + + private void generateReportRows(String resultRow, StringBuilder rows, String testName, String suiteName, Stream allTestResults) { + allTestResults + .forEach(testResult -> { + String testReportRow = ""; + if (testResult.getStatus() == ITestResult.FAILURE) { + testReportRow = String.format(resultRow, "danger", suiteName, testName, testResult.getName(), "FAILED", "NA"); + } + if (testResult.getStatus() == ITestResult.SUCCESS) { + testReportRow = String.format(resultRow, "success", suiteName, testName, testResult.getName(), "PASSED", String.valueOf(testResult.getEndMillis() - testResult.getStartMillis())); + + } + if (testResult.getStatus() == ITestResult.SKIP) { + testReportRow = String.format(resultRow, "warning", suiteName, testName, testResult.getName(), "SKIPPED", "NA"); + } + rows.append(testReportRow); + }); + } + + private String initReportTemplate() { + String template = null; + byte[] reportTemplate = null; + try { + reportTemplate = Files.readAllBytes(Paths.get("src/test/resources/reportTemplate.html")); + template = new String(reportTemplate, "UTF-8"); + } catch (IOException e) { + LOGGER.error("Problem initializing template", e); } - finishReportTemplate(); - reportWriter.flush(); - reportWriter.close(); + return template; } - private void initReportTemplate() { - reportWriter.println( - "" + "" + "My Custom Report" + "" + "" - + "" + "" + "
"); - reportWriter.println("" + "" + "" + "" + "" + "" + ""); - } - - private void finishReportTemplate() { - reportWriter.println(" "); + private void saveReportTemplate(String outputDirectory, String reportTemplate) { + new File(outputDirectory).mkdirs(); + try { + PrintWriter reportWriter = new PrintWriter(new BufferedWriter(new FileWriter(new File(outputDirectory, "my-report.html")))); + reportWriter.println(reportTemplate); + reportWriter.flush(); + reportWriter.close(); + } catch (IOException e) { + LOGGER.error("Problem saving template", e); + } } } diff --git a/testng/src/test/resources/reportTemplate.html b/testng/src/test/resources/reportTemplate.html new file mode 100644 index 0000000000..6938bfa7f6 --- /dev/null +++ b/testng/src/test/resources/reportTemplate.html @@ -0,0 +1,33 @@ + +My Custom Report + + + + + + +
+
SuiteTestMethodStatusExecution Time(ms)
+ + + + + + + + + + + + + + + + + + + +
SuiteTestMethodStatusExecution Time(ms)
My test suitenumbersXMLgivenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrectPASSED0
+
+ +