简体   繁体   中英

How to generate cucumber html report with attached failed screenshot and cucumber.json file using gradle based project

Using gradle, I am trying generate cucumber html report with failed screenshot attached to it for security reason I cannot have online plugins in build.gradle file so I have to download required jar and plugins and implement and configure library manually in build.gradle file.

Please suggest how can configure TestRunner file in build.gradle and generate cucumber html report with cucumber.json file

build.gradle file

plugins {
    id 'java'
    id 'idea'
}

group 'org.example'
version '1.0-SNAPSHOT'


configurations {
    cucumberRuntime.extendsFrom testRuntime
}

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "io.cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--glue', 'stepDef', 'src/test/java']
        }
    }
}



repositories {

    mavenCentral()
}
dependencies {
    implementation fileTree(dir:System.getProperty("user.dir")+'/Plugin',include:['*.jar'])
    implementation files('junit-4.12')
    implementation files('testng-6.7.jar')
    implementation files('junit-jupiter-api-5.6.2')
    implementation files('hamcrest-all-1.3')
    .....................


TestRunner file

package TestRunner;

import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources",
        glue = "StepDefs",
        plugin = {
                "pretty", "html:target/cucumber-html-report", "json:target/cucumber.json", "pretty:target/cucumber-pretty.txt"
        }
)

public class TestRunner {

}

Whatever StepDefs may be...

Running with gradle cucumber --info might be useful for debugging... because the error message finished with non-zero exit value 1 just indicates "error" or "no success".

You'd probably need these Java dependencies, to begin with:

testImplementation 'io.cucumber:cucumber-java:6.5.0'
testImplementation 'io.cucumber:cucumber-junit:6.5.0'

And one might have to add gradle.cucumber as the --glue into the arguments args , as the documentation suggests. Task dependency compileTestJava should rather be testClasses .

html generally is a plugin, which expects an output directory, therefore this should look alike this:

task cucumber() {
    dependsOn assemble, testClasses
    doFirst {

    }
    doLast {
        javaexec {
            main = 'io.cucumber.core.cli.Main'
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = [
                '--plugin', 'pretty', 'html:target/reports',
                '--glue', 'gradle.cucumber',
                'src/test/resources'
            ]
        }
    }
}

These args can also be annotated in Java; not sure which of them takes precedence.
It probably makes no sense and only creates a mess, when defining the arguments twice.

Make sure to follow instruction #4:

Add feature .feature files and associated step mapping classes .java in src/test/resources and src/test/java respectively in a gradle.cucumber package.

-g , --glue PATH Where glue code (step definitions, hooks and plugins) are loaded from.

When running with jUnit, one can also pass options with a junit-platform.properties file.


The most easy might be to start with the cucumber-java-skeleton (it is known to be working).

It didn't work for me, If I run this cucumber task it gives me error

Task:cucumber FAILED Error: Could not find or load main class io.cucumber.api.cli.Main

Caused by: java.lang.ClassNotFoundException: io.cucumber.api.cli.Main

Error: Could not find or load main class io.cucumber.api.cli.Main

I have created one task cucumberRunner which executes the TestRunner.java file, it is creating cucumber.json file and html report but htlm report but HTML report is not expected is weird no graphics and colorless colorless

build.gradle I'm using:

```
configurations {
    cucumberRuntime {
        extendsFrom testRuntime
    }
}

task cucumber() {
    dependsOn assemble, testClasses
    doFirst {

    }
    doLast {
        javaexec {
            main = 'io.cucumber.api.cli.Main'     // tried with  io.cucumber.core.cli.Main
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = [
                    '--plugin', 'pretty', 'html:target/reports',
                    '--glue', 'gradle.cucumber',
                    'src/test/resources'
            ]
        }
    }
}
task cucumberRunner(type: Test) {
    include '**/**TestRunner.class'
}
       Also I have added jars
           implementation files('junit-4.12')
           implementation files('testng-6.0.jar')
           implementation files('cucumber-core-6.0.0')
           implementation files('cucumber-java-6.0.0')
           implementation files('cucumber-plugin-6.0.0')
           implementation files('cucumber-junit-6.0.0')
           implementation files('cucumber-testng-6.0.0')
           implementation files('cucumber-jvm-deps-1.0.5')
           implementation files('cucumber-gherkin-6.0.0')
           implementation files('cucumber-java8-6.0.0')
           implementation files('cucumber-html-0.2.3')
       ```

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM