Dushyant Patil
Dushyant Patil

Reputation: 31

Extent Report plugin not working with testng + cucumber

I have a complex problem, please read - I wanted to run the extent report with my framework which is created using cucumber, testng and java.

I am running the testng file to run the test class file which will eventually run the @CucumberOptions and features added in it.

My test class is extended with AbstractTestNGCucumberTests to support testng with cucumber.

Now everything is working fine. basic testng report is getting generated. note : I am running some tests parallel and they are also working fine.

Now i wanted to implement the extent report in my framework. Can you tell me how to do it using plugin which which add the logs same as the cucumber statement added in the feature file.

ps : I have gone through some link which shows me how to run the extent report with junit using @AfterClass, but how to use this with testng.

What I have tried -

libraries used - com.aventstack --> extentreports and com.vimalselvam --> cucumber-extentsreport

Error - cucumber.runtime.CucumberException: Couldn't load plugin class: com.vimalselvam.cucumber.ExtentCucumberFormatter

used plugin - plugin = {"com.vimalselvam.cucumber.ExtentCucumberFormatter:output/report.html"}

and code added under @AfterTest is : Reporter.loadXMLConfig(new File("xml path")

PLEASE HELP !!! I wanted to generate extent report which will also support parallel execution.

Upvotes: 1

Views: 3764

Answers (3)

Shriprasad Gujare
Shriprasad Gujare

Reputation: 1

For me it worked by adding following two dependencies in pom.xml file.

<dependency>
    <groupId>tech.grasshopper</groupId>
    <artifactId>extentreports-cucumber7-adapter</artifactId>
    <version>1.7.0</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.36</version>
    <scope>provided</scope>
</dependency>

Modified my TestRunner.java

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources", monochrome = true, glue = {
        "stepdefinitions", "config" }, plugin = {
                "pretty",
                "json:target/cucumber-report.json", "html:target/Test_Report.html",
                "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:" }, tags = "@Smoke")

public class TestRunner {

}

Added extent.properties in src/test/resources

extent.reporter.avent.start=true
extent.reporter.bdd.start=true
extent.reporter.cards.start=false
extent.reporter.email.start=true
extent.reporter.html.start=true
extent.reporter.klov.start=false
extent.reporter.logger.start=false
extent.reporter.tabular.start=false
extent.reporter.pdf.start=true
extent.reporter.spark.start=true

extent.reporter.avent.config=src/test/resources/report-configs/avent-config.xml
extent.reporter.bdd.config=src/test/resources/report-configs/bdd-config.xml
extent.reporter.cards.config=
extent.reporter.email.config=src/test/resources/report-configs/email-config.xml
extent.reporter.html.config=src/test/resources/report-configs/html-config.xml
extent.reporter.klov.config=
extent.reporter.logger.config=
extent.reporter.tabular.config=
extent.reporter.spark.config=src/test/resources/report-configs/spark-config.xml

extent.reporter.avent.out=test-results/AventReport/JioID_UI_Test_Report.html
extent.reporter.bdd.out=test-results/BddReport/JioID_UI_Test_Report.html
extent.reporter.cards.out=test-results/CardsReport/
extent.reporter.email.out=test-resultst/EmailReport/JioID_UI_Test_Report.html
extent.reporter.html.out=test-results/HtmlReport/JioID_UI_Test_Report.html
extent.reporter.spark.out=test-results/SparkReport/JioID_UI_Test_Report.html
extent.reporter.logger.out=test-results/LoggerReport/
extent.reporter.tabular.out=test-results/TabularReport/
extent.reporter.pdf.out=test-results/PDFReport/JioID_UI_Test_Report.pdf

Created report-configs folder under src/test/resources folder and added below config files (Look for xml configuration on respective pages) Make sure the paths match extent.properties file, you can keep config files in src/test/resources in that case change the paths in extent.properties

avent-config.xml https://extentreports.com/docs/versions/4/net/avent-reporter.html

bdd-config.xml https://extentreports.com/docs/versions/4/java/bdd-reporter.html

email-config.xml https://extentreports.com/docs/versions/4/java/email-reporter.html

spark-config.xml https://extentreports.com/docs/versions/4/java/spark-reporter.html

html-config.xml https://extentreports.com/docs/versions/4/net/html-reporter.html

Upvotes: 0

Sureshmani Kalirajan
Sureshmani Kalirajan

Reputation: 1938

I assume you are using cucumber-extentsreport.*.jar as dependency. You must specify the extent properties @beforesuite method. ExtentProperties extentProperties = ExtentProperties.INSTANCE; extentProperties.setReportPath();

you will also need to add plugin - com.cucumber.listener.ExtentCucumberFormatter:

Upvotes: 0

If you want to run test cases in parallel and want to have stable extent report, please go for cucumber 4.x.x version and there are 2 ways of implementing extent report in Cucumber

1. Using Cucumber-JVM 4 adapter for Extent Framework(extentreports-cucumber4-adapter) & below are the steps to implement - (Beauty - You do not need to write any code any where to generate report this way except from setting adapter in runner below)

Add adapter dependency under POM.XML

<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports-cucumber4-adapter</artifactId>
    <version>1.0.6</version>
</dependency>

Add the com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter plugin to the runner.

@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"})
public class RunCukesTest {
    // ..
} 

Report Output Directory - ../Project Directory/test-output/HtmlReport

2. Adding aventstack dependency under POM.XML

<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports</artifactId>
    <version>3.1.5</version>
</dependency> 

In this workflow, Do not Add the com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter plugin to the runner.

Upvotes: 2

Related Questions