I renamed the PurgeHTMLReport class to GenerateTestSuiteReports. It supports generating PDF report as well as HTML report.
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import com.kms.katalon.core.annotation.AfterTestSuite
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.context.TestSuiteContext
import com.kms.katalon.core.logging.KeywordLogger
import com.kms.katalon.core.logging.model.TestSuiteLogRecord
import com.kms.katalon.core.reporting.ReportWriterUtil
import com.kms.katalon.core.reporting.ReportWriterUtil.SuiteReportGenerationOptionsBuilder
import com.kms.katalon.core.reporting.pdf.TestSuitePdfGenerator
import com.kms.katalon.core.reporting.pdf.exception.JasperReportException
import com.kms.katalon.core.setting.ReportBundleSettingStore
import com.kms.katalon.core.setting.ReportSettings
import com.kms.katalon.core.util.internal.ExceptionsUtil
class GenerateTestSuiteReports {
@AfterTestSuite
def afterTestSuite(TestSuiteContext testSuiteContext) {
// generate test-suite-report.html file
Path htmlReport = ReportGenerator.generateHTMLReport("custom/test-suite-report.html")
println "HTML report: " + htmlReport.toString()
// generate test-suite-report.pdf file
Path pdfReport = ReportGenerator.generatePDFReport("custom/test-suite-report.pdf")
println "PDF report: " + pdfReport.toString()
}
/**
*
*/
private class ReportGenerator {
private static final KeywordLogger logger = KeywordLogger.getInstance(ReportGenerator.class);
private static Path projectDir = Paths.get(RunConfiguration.getProjectDir()).toAbsolutePath()
private static Path reportFolder = Paths.get(RunConfiguration.getReportFolder()).toAbsolutePath()
private static ReportSettings settings = ReportBundleSettingStore.getStore(projectDir.toString()).getSettings()
static void validateParams() {
assert Files.exists(projectDir)
assert settings != null
assert Files.exists(reportFolder)
}
static void ensureParentDir(Path file) {
Path parentDir = file.getParent()
if (!Files.exists(parentDir)) {
Files.createDirectories(parentDir)
}
}
static Path generateHTMLReport(String htmlFileName) {
validateParams()
Path htmlReport = reportFolder.resolve(htmlFileName).toAbsolutePath()
ensureParentDir(htmlReport)
TestSuiteLogRecord testSuiteLogRecord = ReportWriterUtil.parseTestSuiteLog(reportFolder.toString())
ReportWriterUtil.writeHTMLReport(
SuiteReportGenerationOptionsBuilder.create()
.suiteLogRecord(testSuiteLogRecord)
.settings(settings)
.reportDir(reportFolder.toFile())
.outputFile(htmlReport.toFile())
.build())
return htmlReport
}
static Path generatePDFReport(String pdfFileName) {
validateParams()
Path pdfReport = reportFolder.resolve(pdfFileName).toAbsolutePath()
ensureParentDir(pdfReport)
TestSuiteLogRecord testSuiteLogRecord = ReportWriterUtil.parseTestSuiteLog(reportFolder.toString())
TestSuitePdfGenerator pdfGenerator = new TestSuitePdfGenerator(testSuiteLogRecord);
try {
pdfGenerator.exportToPDF(pdfReport.toString());
} catch (JasperReportException e) {
logger.logWarning(ExceptionsUtil.getStackTraceForThrowable(e));
throw new IOException(e);
}
return pdfReport
}
}
}