NEW Posts – Generating Spark and Pdf Extent Report for “Rest Assured with Maven plugin” and “Rest Assured and Cucumber with Maven plugin”
Introduction
ExtentReports library is used for creating detailed and interactive test reports. The browser based Spark report is the most common report format. This article introduces the PDF format along with creation steps, various sections and configuration settings.
The report contains four sections – summary section with a dashboard and attribute summary, test details section, attribute details section and media section. There is a one to one mapping between the Spark and PDF reports. The summary section maps to the dashboard tab of the Spark report. The test details section maps to the test tab of the Spark report. The attribute details section maps to the category, author, device and exception tabs.
The report display varies depending on the AnalysisStrategy selected. The article assumes the default TEST strategy for explaining the report sections. The differences for the remaining strategies are mentioned separately.
The PDF report is a single file with the medias embedded in it. This allows it to be shared easily without need of zipping and extracting contents. This convenience comes with the issue of file size, if report contains numerous medias. This report currently does not support base64 media.
The report uses MIT or Apache licensed code for PDF display which removes any licensing issues. Following are the PDF related dependencies – PDFBox, easytable and pdfbox-layout. The report uses the open source Liberation Sans font family.
Source
The sample report implementation can be found at this location. Code (TESTSimpleReport) for creating a report with tests containing logs, generated logs, exception logs and media logs. Code (TESTMarkupReport) for creating a report with tests containing markup logs. Code (TESTComboReport) for creating a report with tests containing text, exception and media logs combination. Code (BDDReport) for creating a report with BDD tests.
The PDF report source can be found here.
Report Creation
The following dependency needs to be added for creating the Extent PDF report.
<dependency>
<groupId>tech.grasshopper</groupId>
<artifactId>pdfextentreporter</artifactId>
<version>1.3.2</version>
</dependency>
The following code is used for initializing the ExtentReport and adding the PDF reporter.
ExtentReports extent = new ExtentReports();
ExtentPDFReporter pdf = new ExtentPDFReporter("Pdf.pdf");
extent.attachReporter(pdf);
This will create the report with default configuration settings. The default settings can be found here in JSON and XML format. These are just for illustration purposes and changing them will have no effect on the report. Custom configuration can be added via a JSON or XML format. The details of the settings is described in the ‘Configuration’ section below.
// JSON configuration file
pdf.loadJSONConfig(new File("src/test/resources/pdf-config.json"));
// XML configuration file
pdf.loadXMLConfig(new File("src/test/resources/pdf-config.xml"));
Summary Section
This section contains of the dashboard which summarizes the test execution details. The display contains report title, report creation date, test start time, test end time, test duration, test pass count, test fail count and test status pie charts. The dashboard display varies depending on the selected AnalysisStrategy. The dashboard will always be generated.
The dashboard image on the left shows the default color scheme. The image on the right shows the colors selected in the XML and JSON configuration.
This section also contains test status details of category, author and device attributes. This also contains the name value pair details of system information attributes. This is optional and can be toggled on and off by using the displayAttributeSummary setting. This is set to true by default.
Test Details Section
This section contains the details of each test including the attached logs. The display includes test name, test description, start time, end time, duration, category, author, device and medias attached to the test. The generated logs and logs are displayed in tabular fashion. This is optional and can be toggled on and off by using the displayTestDetails setting. This is set to true by default.
The test hierarchy image on the right shows the indent of the child tests to the right. The test level to which the indent is applied is decided by the testMaxIndentLevel setting which is described in the Configuration section.
The images are thumbnail size, and the expanded display can be seen by clicking on the plus sign. These expanded images are contained in the Media section which is described below. For the top level test, only the first 6 attached test medias are displayed. The test media display count decreases with the child test indentation. The others are displayed in the Media section.
The report supports markups like label text, table, lists and code blocks.
Label Markup
The label markup creation code requires the color value to be provided as an instance of ExtentColor enumeration. This value needs to match the color value available in java.awt.Color class. When there is no match the label background color defaults to black.
Table Markup
The image on the right displays the information message when the number of table columns exceeds the value set by the maxTableColumnCount. This is described in the Configuration section below.
List Markup
Code Markup
The image below displays the image for multiple code blocks added to the same test log.
Attribute Details Section
This section contains the mapping of each category, device and author attributes to the tests to which they are added. The mapping of the exception class and the test is also displayed. This also includes the summary of all test statuses. This is optional and can be toggled on and off by using the displayAttributeDetails setting. This is set to true by default.
Media Section
This section contains the expanded images of the thumbnails displayed in the Test section. The size of the images are to full scale maximum, else the size is restricted by the available page width. The expanded image can be navigated by clicking on the red plus sign next to the thumbnail. This is optional and can be toggled on and off by using the displayExpandedMedia setting. This is set to true by default.
Media Attachment
Adding images and screenshots to the report are a major requirement. The PDF report currently does NOT support base64 string images. This section will look at the case when a Spark report is already being generated and also when fresh Extent reports are created.
Existing Spark Report
If the media paths are absolute or the media folder path is set using the setMediaResolverPath() of the ExtentReports class in the Spark report, then NO changes are required. The below code is for the later case and the files will be available in the ‘images’ folder in the project root.
ExtentReports extent = new ExtentReports();
extent.setMediaResolverPath(new String[] { "images" });
When the media paths are relative to the Spark report location, then the PDF report needs the information of the media folder path relative to the project root. Below is a sample of an existing Spark report code which is generated in the reports folder and the media is stored in the ‘images’ child folder.
ExtentSparkReporter sparkReport = new ExtentSparkReporter("reports/BDDSparkReport.html"); extent.attachReporter(sparkReport);
..
test.log(Status.PASS, MediaEntityBuilder.createScreenCaptureFromPath("images/screen.png")
The media folder path is configured by passing a String array to the setMediaFolders() method of the configuration class. Multiple path values can be passed in the array, the first path which successfully finds the file is used.
ExtentPDFReporter pdfReport = new ExtentPDFReporter("reports/BDDPDFReport.pdf");
extent.attachReporter(pdfReport);
pdfReport.config().setMediaFolders(new String[] { "reports/images"});
The above setting can also be passed in the JSON configuration file by using mediaFolders as the json element name and the value as a json array. This however does not currently work with the XML configuration and will be fixed in future release.
When the PDF report cannot locate the media file from the given path, then it will automatically search for the image in the project root followed by the child directories ‘images’, ‘medias’ and ‘screenshots’ in that order. If the medias are stored in these folder names under the project root then there is no need to use the setMediaFolders() setting.
This might seem similar to using the setMediaResolverPath() method but using this will change the existing paths of the Spark report. This might lead to undesirable side effects and best avoided.
Fresh Extent Report Creation
The easiest way is to use the setMediaResolverPath() method and set the relative media folder locations in the array. Then just the media file names can be mentioned in the createScreenCaptureFromPath() method. At the end of the day, it is the project requirements that will guide the technique adapted.
Configurations
The PDF report look and feel can be modified by creating a JSON or XML configuration settings file. The settings which need a color value, it is required to be in a hex format without the “#” at the start.
Section Creation Settings
As mentioned above the following settings can be used to toggle on and off the respective section creation.
Section Creation Setting | Description | Default Value |
displayAttributeSummary | Displays the attribute summary of the dashboard section | true |
displayTestDetails | Displays the test details section | true |
displayAttributeDetails | Displays the attribute details section | true |
displayExpandedMedia | Displays the expanded media section | true |
Summary Section Settings
Below are the color and detail settings for the dashboard display.
Dashboard Display Setting | Description | Default Value |
title | Report title text | PDF Extent Report |
titleColor | Report title text color | Black |
dateFormatter | Report creation date time format, default will be used in case of parsing error | FormatStyle.MEDIUM |
dateColor | Report creation text color | Blue |
startTimesColor | Test execution start time text | Red |
finishTimesColor | Test execution finish time text | Red |
durationColor | Test duration text color | Red |
passCountColor | Test passed count text color | Red |
failCountColor | Test failed count text color | Red |
passColor | Pass test and test log status color | Green |
failColor | Fail test and test log status color | Red |
skipColor | Skip test and test log status color | Orange |
warnColor | Warning test and test log status color | Yellow |
infoColor | Info test and test log status color | Blue |
Below are the color settings for the attribute summary display.
Attribute Summary Display Setting | Description | Default Value |
categoryAttributeColor | Category title text color | Cyan |
categoryNameColor | Category attribute name text color | Black |
authorAttributeColor | Author title text color | Magenta |
authorNameColor | Author attribute name text color | Black |
deviceAttributeColor | Device title text color | Dark Grey |
deviceNameColor | Device attribute name text color | Black |
systemAttributeColor | System Info title text color | Yellow |
systemNameColor | System Info name text color | Black |
systemValueColor | System Info value text color | Black |
The category, author and device attribute test status counts text color are the picked from the passColor, failColor, skipColor, warnColor and infoColor settings as described in the Dashboard settings.
Test Details Section Settings
Below are the color settings for the test details display.
Test Display Display Setting | Description | Default Value |
testNameColor | Test name text color | Red |
testDescriptionColor | Test description text color | Black |
testTimesColor | Test start, finish and duration text color | Blue |
testTimeStampColor | Test log timestamp text color | Black |
testExceptionColor | Test log exception stacktrace color | Red |
maxTableColumnCount | Maximum count of columns to display for tables | 5 |
testMaxIndentLevel | Maximum test level in the hierarchy which will be indented | 2 |
The test log status and details color are the picked from the passColor, failColor, skipColor, warnColor and infoColor settings as described in the Dashboard settings.
Attribute Details Section
Below are the color settings for the attribute details display.
Attribute Details Display Setting | Description | Default Value |
exceptionAttributeColor | Exception class name text color | Red |
The test status color are the picked from the passColor, failColor, skipColor, warnColor and infoColor settings as described in the Dashboard settings. The category, author and device attribute name colors are the picked from the categoryAttributeColor, authorAttributeColor and deviceAttributeColor settings as described in the Attribute Summary settings. The timestamp text color is picked from the testTimeStampColor as described in the Test Details settings.
BDD Analysis Strategy Report
ExtentReports will choose this strategy automatically if all the tests are of BDD type. The type refers to classes of the type IGherkinFormatterModel. The display changes are for the dashboard, test and media sections.
The report displays logs and medias for Level 2 tests only. In case the Level 1 test is of ScenarioOutline type then the Level 3 tests are considered. The tests with higher level values are not displayed in the report.
Summary Section
In the dashboard, “Tests Passed” and “Tests Failed” are renamed as “Features Passed” and “Features Failed” respectively. The pie chart count is three named, Features, Scenarios and Steps.
The attribute summary section is the same as the display for the default TEST strategy. The attributes for higher levels are also considered, which matches the Spark report.
Test Details Section
As mentioned above, logs and medias for Level 2 tests and Level 3 in case of a Level 1 ScenarioOutline type, are only displayed.
Attribute Details Section
The attribute summary section is the same as the display for the default TEST strategy. The attributes for higher levels are also considered, which matches the Spark report.
Media Section
As mentioned above, expanded medias for Level 2 tests and Level 3 in case of a Level 1 ScenarioOutline type, are only displayed.
Class & Suite Analysis Strategy Report
For the CLASS strategy, in the dashboard page “Tests Passed” and “Tests Failed” are renamed as “Class Passed” and “Class Failed” respectively. The pie chart headers are named, Class, Methods and Log Events.
For the SUITE strategy, in the dashboard page “Tests Passed” and “Tests Failed” are renamed as “Suite Passed” and “Suite Failed” respectively. The pie chart headers are named, Suite, Class, Test and Log Events.
Hi Mounish ,
I’m using the following dependency with extent.properties and extent-config.xml.
tech.grasshopper
extentreports-cucumber7-adapter
1.14.0
When I run any tests, the pdf and html reports are generated fine but, when I enable rerun on failure with the following in pom.xml, and failed tests are automatically re-executed, the pdf report gets corrupted. Is there any solution for this? Any help is much appreciated
1
Thanks,
Kiran
Hi,
When I run my tests with maven -failsafe plugin 2, the failed tests would get re-executed twice and the pdf report is getting corrupted. But, when rerun is disabled, the pdf report seems fine. Any thoughts whats happening? I’m completely lost. Any help is appreciated.
Thanks
Kiran
Hi,
In the TESTSimpleReport, the Dashboard is showing 4 Donuts, but for me the donuts titled Steps are showing 0 where the first and the log level donuts are showing proper color and result.
How do I achieve the Steps donuts as well.
Thanks
Aakshan
The display depends on the test and levels you have added. You will have to share the code you are using.
I have added the createNode() to achieve that. see the code below:
public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
//System.out.println(“Test Description from Test name ” + result.getName().);
ExtentTest test = extent
.createTest(result.getTestClass().getName() + “:: ” + result.getMethod().getMethodName(),
result.getMethod().getDescription())
.createNode(result.getTestClass().getName())
.createNode(result.getMethod().getMethodName())
.assignAuthor(“Chimera QA Team”)
.assignCategory(result.getMethod().getGroups())
.assignDevice(“Windows “);
extentTest.set(test);
Hi Mounish,
In the extent reports generated using the script I am using, I could see only 2 pie diagrams, but the PDF report has 4 that includes 2 diagram for Steps. I have sent the screenshot to your email. How do I achieve the Steps ?
Thanks
Renjith
I need to see the code you are using as the dashboard display depends on the test levels.
Hi,
I was trying to generate a pdf file from the extent reports I use. The first issue is the .pdf file is not getting created in the folder.
I am using Selenium Java, TestNg to automate. I am able to create the HTML files in the stipulated folder successfully.
Here is the code snippet:
public class ExtentManager {
private static ExtentReports reports = new ExtentReports();
public static ExtentReports createInstance() {
/*String fileName = getReportName();
String directory = System.getProperty(“user.dir”) + “target/test-output/ExtentReport/”;
new File(directory).mkdirs();
String path = directory + fileName;
*/
reports.setMediaResolverPath(new String[] { “images” });
// PDF REPORT GEN
ExtentPDFReporter extentPDF = new ExtentPDFReporter(“target/test-output/ExtentPDF/reports.pdf”);
try {
extentPDF.loadJSONConfig(new File(“extent-report/extent-report-config.json”));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
reports.attachReporter(extentPDF);
ExtentSparkReporter htmlrepoter;
htmlrepoter = new ExtentSparkReporter(“target/test-output/ExtentReport/extent.html”);
// ALL THE REPORT CONFIGURATION IS NOW SET IN JSON FILE
try {
htmlrepoter.loadJSONConfig(new File(“extent-report/extent-report-config.json”));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// HERE THE ORDER OF THE VIEW CAN BE CONFIGURED
htmlrepoter.viewConfigurer().viewOrder().as(new ViewName[] {
ViewName.DASHBOARD,
ViewName.TEST,
ViewName.EXCEPTION,
ViewName.CATEGORY,
ViewName.DEVICE,
ViewName.AUTHOR,
ViewName.LOG
}).apply();
/
reports.attachReporter(htmlrepoter);
//return reports;
return reports;
}
public static String getReportName() {
Date d = new Date();
String fileName = “Automation_Report” + “_” + d.toString().replace(“:”, “_”).replace(” “, “_”) + “.png”;
return fileName;
}
}
Thanks
Renjith
here is what I see in the logs:
java.lang.NoSuchMethodError: ‘org.jsoup.nodes.Element org.jsoup.nodes.Document.selectFirst(java.lang.String)’
at tech.grasshopper.reporter.tests.markup.TestMarkup.createMarkupCell(TestMarkup.java:57)
at tech.grasshopper.reporter.tests.LogDetailsCollector.createDetailsMarkupCell(LogDetailsCollector.java:93)
at tech.grasshopper.reporter.tests.LogDetailsCollector.createLogDetailCells(LogDetailsCollector.java:70)
at tech.grasshopper.reporter.tests.TestLogsDisplay.createLogDisplayCell(TestLogsDisplay.java:117)
at tech.grasshopper.reporter.tests.TestLogsDisplay.lambda$createLogRows$0(TestLogsDisplay.java:92)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.Collections$SynchronizedCollection.forEach(Collections.java:2093)
at tech.grasshopper.reporter.tests.TestLogsDisplay.createLogRows(TestLogsDisplay.java:91)
at tech.grasshopper.reporter.tests.TestLogsDisplay.display(TestLogsDisplay.java:61)
at tech.grasshopper.reporter.tests.TestDetails.displayTestLogs(TestDetails.java:59)
at tech.grasshopper.reporter.tests.TestDetails.displayTestAndLogDetails(TestDetails.java:51)
at tech.grasshopper.reporter.tests.TestDetails.createSection(TestDetails.java:42)
at tech.grasshopper.reporter.ReportGenerator.createTestDetailsSection(ReportGenerator.java:120)
at tech.grasshopper.reporter.ReportGenerator.generate(ReportGenerator.java:60)
at tech.grasshopper.reporter.ExtentPDFReporter.flush(ExtentPDFReporter.java:105)
at tech.grasshopper.reporter.ExtentPDFReporter.access$100(ExtentPDFReporter.java:20)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:84)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:77)
at io.reactivex.rxjava3.subjects.PublishSubject$PublishDisposable.onNext(PublishSubject.java:310)
at io.reactivex.rxjava3.subjects.PublishSubject.onNext(PublishSubject.java:226)
at com.aventstack.extentreports.ReactiveSubject.onFlush(ReactiveSubject.java:83)
at com.aventstack.extentreports.AbstractProcessor.onFlush(AbstractProcessor.java:85)
at com.aventstack.extentreports.ExtentReports.flush(ExtentReports.java:279)
at com.chimera.base.TestListeners.onFinish(TestListeners.java:60)
at org.testng.TestRunner.fireEvent(TestRunner.java:895)
at org.testng.TestRunner.afterRun(TestRunner.java:859)
at org.testng.TestRunner.run(TestRunner.java:590)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
at org.testng.SuiteRunner.run(SuiteRunner.java:286)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1109)
at org.testng.TestNG.runSuites(TestNG.java:1039)
at org.testng.TestNG.run(TestNG.java:1007)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Can you isolate the code which is causing this exception? What log text are you adding to the markup?
ExtentPDFReporter extentPDF = new ExtentPDFReporter(“target/test-output/ExtentPDF/reports.pdf”);
try {
extentPDF.loadJSONConfig(new File(“extent-report/extent-report-config.json”));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
I am using TestListener class to add the logText() like, fail, pass, skip.
Is there anything else should I configure, apart from the maven dependency.
Thanks
Renjith
reports.attachReporter(extentPDF);
Here the reports.attachReporter() is not actually adding the .pdf file in the folder.
// PDF REPORT GEN
ExtentPDFReporter extentPDF = new ExtentPDFReporter(“target/test-output/ExtentPDF/reports.pdf”);
try {
extentPDF.loadJSONConfig(new File(“extent-report/extent-report-config.json”));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
reports.attachReporter(extentPDF);
I am using a TestListener class to capture the logtexts
The current issue I am facing is the PDF is not getting created.
Can you print the log text to the console that is causing the exception? I need the exact code for the markup and the text to figure out what is going on.
“java.lang.NoSuchMethodError: ‘org.jsoup.nodes.Element” – Do you have another jsoup dependency added in your POM?
Have you tried running the sample implementation? – https://github.com/grasshopper7/pdf-extent-report/tree/master/pdf-extent-report
Tried the TestSimpleReport()
butting getting the following error,
Exception in thread “main” java.lang.NoSuchMethodError: ‘org.jsoup.nodes.Element org.jsoup.nodes.Document.selectFirst(java.lang.String)’
at tech.grasshopper.reporter.tests.markup.TestMarkup.createMarkupCell(TestMarkup.java:57)
at tech.grasshopper.reporter.tests.TestGeneratedLogDisplay.lambda$createLogRows$0(TestGeneratedLogDisplay.java:75)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.Collections$SynchronizedCollection.forEach(Collections.java:2093)
at tech.grasshopper.reporter.tests.TestGeneratedLogDisplay.createLogRows(TestGeneratedLogDisplay.java:72)
at tech.grasshopper.reporter.tests.TestGeneratedLogDisplay.display(TestGeneratedLogDisplay.java:52)
at tech.grasshopper.reporter.tests.TestDetails.displayTestGeneratedLogs(TestDetails.java:69)
at tech.grasshopper.reporter.tests.TestDetails.displayTestAndLogDetails(TestDetails.java:50)
at tech.grasshopper.reporter.tests.TestDetails.createSection(TestDetails.java:42)
at tech.grasshopper.reporter.ReportGenerator.createTestDetailsSection(ReportGenerator.java:120)
at tech.grasshopper.reporter.ReportGenerator.generate(ReportGenerator.java:60)
at tech.grasshopper.reporter.ExtentPDFReporter.flush(ExtentPDFReporter.java:105)
at tech.grasshopper.reporter.ExtentPDFReporter.access$100(ExtentPDFReporter.java:20)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:84)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:77)
at io.reactivex.rxjava3.subjects.PublishSubject$PublishDisposable.onNext(PublishSubject.java:310)
at io.reactivex.rxjava3.subjects.PublishSubject.onNext(PublishSubject.java:226)
at com.aventstack.extentreports.ReactiveSubject.onFlush(ReactiveSubject.java:83)
at com.aventstack.extentreports.AbstractProcessor.onFlush(AbstractProcessor.java:85)
at com.aventstack.extentreports.ExtentReports.flush(ExtentReports.java:279)
at com.name.script.webui.TESTSimpleReport.main(TESTSimpleReport.java:59)
org.jsoup
jsoup
1.8.3
Could see only the above one.
Please remove this dependency as the pdf report is using a higher version jar which it transitively imports.
Thanks Mounish,
After removing the dependency from POM, the script started creating the pdf files.
Regards
Renjith
Hi ,
I am creating both Extent HTML and PDF report but in HTML report I have added some HTML tags (for bold text and color) but these HTML tags come in Extent PDF report.
How can i remove html tag from pdf report???
To what have you added this tags too? Logs? Test Name? Test Description? Or something else?
I will have to check from the code how this is handled. Thanks.
logger=reports.createTest(ExcelUtilities.readData(file, “sheet”,i,0))
.generateLog(Status.PASS, MarkupHelper.createTable(TestTable));
logger.log(Status.INFO,
“” + “DataBase Result”+”“+””+””+”DB.Table: “+table+””+”status: “+status+””+”msg: “+msg);
Currently there is no way to strip the tags for the PDF report. I have added an issue – https://github.com/grasshopper7/pdfextentreporter/issues/10. Will update. Thanks
Any Update Comments
Currently do not have the time to tackle this. Should have something in a weeks time
How can change font family Liberation Sans not support my language in PDF Report
Sorry this is not possible currently. I am exploring option to allow users to install their own font libraries but have not been very successful yet. This has been asked by other users too.
Also I am not clear about issues (maybe legal) regarding font libraries which are not free to use but paid, via licenses. Thanks.
I will wait new version, ExtentReports PDF Reporter is very good for me but can’t use it because display font not support my language
What language are you looking to be supported?
What is the error you are currently receiving ? Or no report is being generated at all?
Thanks
I want use Thai language, Report is display only “???????????” when I use Thai language
Other is good display in report
I use Thai language and in report font display only “???????” when I use Thai language but English is normally display, Picture and others are good display in report.
Thanks. I will look into figuring this out.
I have tried this utility and able to generate pdf, however pdf is only generated if test suite has only one tests, if test suite has mote than one test then it is not generating pdf. Any idea what could be wrong?
There is no relationship between test suite (junit or testng) and the extent test. are you creating multiple instances of ExtentPDFReporter, pointing to the same pdf file.
Can you share a sample repository, to get a better idea?
HI Mounish,
No, I am using one instance for pdf, but I am generating both html and pdf.
ExtentSparkReporter html = new ExtentSparkReporter(fileName);
ExtentPDFReporter pdf = new ExtentPDFReporter(pdffilename);
extent = new ExtentReports();
extent.attachReporter(html, pdf);
Html report is working fine. Whereas pdf as I mentioned earlier only works if only 1 test case is there.
Thanks,
Aadi
I implemented a basic testng suite, containing two test classes, using annotations at this location – https://github.com/grasshopper7/pdf-extent-report/tree/master/pdf-extent-report/src/test/java/tech/grasshopper/test.
U can check the sample report at – https://github.com/grasshopper7/pdf-extent-report/blob/master/pdf-extent-report/reports/SuiteReport.pdf.
Feel free to share a repo which reproduces the issue you are facing. Thanks.
Hi,
This is the error I am getting, sorry I should have included this earlier.
Apr 01, 2022 3:44:01 PM tech.grasshopper.reporter.ExtentPDFReporter flush
SEVERE: An exception occurred
org.vandeseer.easytable.RowIsTooHighException: There is a row that is too high to be drawn on a single page
at org.vandeseer.easytable.TableDrawer.computeRowsOnPagesWithNewPageStartOf(TableDrawer.java:115)
at org.vandeseer.easytable.TableDrawer.draw(TableDrawer.java:152)
at org.vandeseer.easytable.RepeatedHeaderTableDrawer.draw(RepeatedHeaderTableDrawer.java:89)
at tech.grasshopper.reporter.structure.TableCreator.displayTable(TableCreator.java:56)
at tech.grasshopper.reporter.tests.TestBasicDetailsDisplay.drawTable(TestBasicDetailsDisplay.java:166)
at tech.grasshopper.reporter.tests.TestBasicDetailsDisplay.display(TestBasicDetailsDisplay.java:81)
at tech.grasshopper.reporter.tests.TestDetails.createSection(TestDetails.java:46)
at tech.grasshopper.reporter.ReportGenerator.generate(ReportGenerator.java:68)
at tech.grasshopper.reporter.ExtentPDFReporter.flush(ExtentPDFReporter.java:105)
at tech.grasshopper.reporter.ExtentPDFReporter.access$100(ExtentPDFReporter.java:20)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:84)
at tech.grasshopper.reporter.ExtentPDFReporter$1.onNext(ExtentPDFReporter.java:77)
at io.reactivex.rxjava3.subjects.PublishSubject$PublishDisposable.onNext(PublishSubject.java:310)
at io.reactivex.rxjava3.subjects.PublishSubject.onNext(PublishSubject.java:226)
at com.aventstack.extentreports.ReactiveSubject.onFlush(ReactiveSubject.java:83)
at com.aventstack.extentreports.AbstractProcessor.onFlush(AbstractProcessor.java:85)
at com.aventstack.extentreports.ExtentReports.flush(ExtentReports.java:284)
at com.cybersource.test.reporting.ExtentReporter.onExecutionFinish(ExtentReporter.java:24)
at org.testng.TestNG.runExecutionListeners(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1025)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
This exception is from the library I am using for displaying pdf tables. Will look into this.
Any update?
Have to dig deep into the code as have been unable to replicate it. Will try it out later tonight.
Would move things along if u can share the data (cleansed up) which is producing the error. Thx
The test that highlights this issue, does it have a long name or description?
Uploaded new version 1.2.1 to maven. Try it when it is available.
Yes most of them has long names. I will how I can filter out data and share with you.
No need for data. I created large names. Give the new artifact a try when available and let me know if it works. thx.
Did not work with new artifact as well, same error.
I need the sanitized data to figure out what is going on. Can u create a minimum example repo and share the link?
Hi Aadi,
Were the html and pdf file creation happened using the above mentioned code?
I tried, but only html is getting created that too, if it is mentioned as first argument.
Any suggestions?
Thanks
Renjith
Hi ,
I am using “pdfextentreporter” but facing issue when I want to change the configuration using JSON file that you had mentioned in your github link “https://github.com/grasshopper7/pdf-extent-report/blob/master/pdf-extent-report/src/test/resources/pdf-config.json” . But while using the same with XML file I am getting desired output, I guess there is some problem with JSON file present under Github.
Issue while running my test cases :
“com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $”
Can you please help me, I do not want to use XML file.
I tried to convert the working XML config to JSON.
Got this, but still it was not working. Can you please me with valid JSON file so that I can use it.
JSON after converting XML to JSON.
{
“configuration”: {
“title”: “Extent Report PDF”,
“titleColor”: “964B00”,
“startTimesColor”: “33A532”,
“finishTimesColor”: “FF69B4”,
“durationColor”: “00FFFF”,
“passCountColor”: “C0C0C0”,
“failCountColor”: “A9A9A9”,
“passColor”: “0b8c47”,
“failColor”: “720000”,
“skipColor”: “b17750”,
“warnColor”: “ffc100”,
“infoColor”: “114444”,
“categoryTitleColor”: “990000”,
“categoryNameColor”: “bd8275”,
“authorTitleColor”: “002288”,
“authorNameColor”: “3ac5b6”,
“deviceTitleColor”: “228800”,
“deviceNameColor”: “cd17bf”,
“systemTitleColor”: “bb1144”,
“systemNameColor”: “990000”,
“systemValueColor”: “daa520”,
“exceptionTitleColor”: “000000”,
“attributeTestStatusColor”: “660066”,
“testNameColor”: “d62d20”,
“testTimesColor”: “ffa700”,
“testTimeStampColor”: “08080”,
“testExceptionColor”: “990000”
}
}
Thanks & Regards
Kislaya
Remove the ‘“configuration”: {‘ part at the beginning and one of the ‘}’ at the end. Should work.
Hi Mounish,
I had tried with below Json as well. I am getting same issue, can you please check. Also it would be great help if you could share me your Json File.
{
“title”: “Extent Report PDF”,
“titleColor”: “964B00”,
“startTimesColor”: “33A532”,
“finishTimesColor”: “FF69B4”,
“durationColor”: “00FFFF”,
“passCountColor”: “C0C0C0”,
“failCountColor”: “A9A9A9”,
“passColor”: “0b8c47”,
“failColor”: “720000”,
“skipColor”: “b17750”,
“warnColor”: “ffc100”,
“infoColor”: “114444”,
“categoryTitleColor”: “990000”,
“categoryNameColor”: “bd8275”,
“authorTitleColor”: “002288”,
“authorNameColor”: “3ac5b6”,
“deviceTitleColor”: “228800”,
“deviceNameColor”: “cd17bf”,
“systemTitleColor”: “bb1144”,
“systemNameColor”: “990000”,
“systemValueColor”: “daa520”,
“exceptionTitleColor”: “000000”,
“attributeTestStatusColor”: “660066”,
“testNameColor”: “d62d20”,
“testTimesColor”: “ffa700”,
“testTimeStampColor”: “08080”,
“testExceptionColor”: “990000”
}
The json file I am using is the same one present in github. Did u checkout the file or just copied the contents? Try to validate the json – https://jsonlint.com/.
This is what I have in my IDE currently.
{
“displayAttributeSummary”: true,
“displayAttributeDetails”: true,
“displayTestDetails”: true,
“displayExpandedMedia”: true,
“title”: “Extent Report PDF”,
“titleColor”: “964B00”,
“startTimesColor”: “33A532”,
“finishTimesColor”: “FF69B4”,
“durationColor”: “00FFFF”,
“passCountColor”: “C0C0C0”,
“failCountColor”: “A9A9A9”,
“passColor”: “0b8c47”,
“failColor”: “720000”,
“skipColor”: “b17750”,
“warnColor”: “ffc100”,
“infoColor”: “114444”,
“categoryTitleColor”: “990000”,
“categoryNameColor”: “bd8275”,
“authorTitleColor”: “002288”,
“authorNameColor”: “3ac5b6”,
“deviceTitleColor”: “228800”,
“deviceNameColor”: “cd17bf”,
“systemTitleColor”: “bb1144”,
“systemNameColor”: “990000”,
“systemValueColor”: “daa520”,
“exceptionTitleColor”: “000000”,
“attributeTestStatusColor”: “660066”,
“testNameColor”: “d62d20”,
“testTimesColor”: “ffa700”,
“testTimeStampColor”: “08080”,
“testExceptionColor”: “990000”
}
The report looks interesting. Thanks for the PFD report implementation.
Are you planning to this report implementation to the cucumber extent 6 example project?
The PDF report is already available for cucumber6 and cucumber 5 adapters, though the displays are different. Search for ‘PDF Extent Report’ at https://ghauto.tech/2098/ and for a more detailed explanation refer to https://ghauto.tech/2224/. This feature needs to be enabled by setting extent.reporter.pdf.start=true and setting the location with extent.reporter.pdf.out in extent.properties. A sample implementation is available at https://github.com/grasshopper7/cuke6-extent-adapter-report/tree/master/cuke6-extent-adapter-report. There is a youtube video highlighting this report – https://www.youtube.com/watch?v=CC_8mn91uKU by a tech blogger. Give it a try with the latest version 2.8.2. Thx.
Hi Mounish,
How we can pass Tags to the Subject of email once we have a run done.
I checked in pdf-config yml just see ‘detailedScenarioConfig:’ section.
Can you please advise
Thank You
I am not able to understand the requirement. Can u add some more details? Also not sure u r commenting in the right article. Thanks.
Sir requirement is in Runnerclass we have tags defined or in we can pass tags as parameters once the pdf is generated, I need to have the tags passed to the Subject once run is done.
Using Cucumber 6 , with extentreports-cucumber6-adapter 2.8.2
Apologies yes I could not find the section so raised here
Thanks VS
I do not think this is possible. There is no integration between report and mailing functionality. U will need to handle it manually. All I can suggest is to duplicate the tags in a text file and in the mailing code access it.
No need for apologies. U can add further comments etc at https://ghauto.tech/2098/#comments. Thanks.