Selenium webdriver 报表生成器说Cucumber不是有效的报表

Selenium webdriver 报表生成器说Cucumber不是有效的报表,selenium-webdriver,automation,cucumber,cucumber-jvm,Selenium Webdriver,Automation,Cucumber,Cucumber Jvm,我使用了下面的代码来创建html报告,这段代码出现在cucumber框架中Junit Runner的after类中,但我收到一个错误,即cucumber.json不是有效的cucumber报告。我假设报表生成器在cucumber.json完全创建之前就试图获取它, 我将代码保存在cumber选项中以创建Json文件 @CucumberOptions(features = "features/", glue = { "report"}, format = {"pretty","json:tar

我使用了下面的代码来创建html报告,这段代码出现在cucumber框架中Junit Runner的after类中,但我收到一个错误,即cucumber.json不是有效的cucumber报告。我假设报表生成器在cucumber.json完全创建之前就试图获取它, 我将代码保存在cumber选项中以创建Json文件

@CucumberOptions(features = "features/", 
glue = { "report"}, 
format = {"pretty","json:target/cucumber.json"},
tags = {"@testing" }, monochrome = true)

    private void generateReportForJsonFiles(File reportOutputDirectory,
            List<String> jsonFiles) {
        String jenkinsBasePath = "";
        String buildNumber = "1";
        String projectName = project.getName();

        Configuration configuration = new Configuration(reportOutputDirectory, projectName);
        configuration.setParallelTesting(false);
        configuration.setJenkinsBasePath(jenkinsBasePath);
        configuration.setRunWithJenkins(false);
        configuration.setBuildNumber(buildNumber);

        ReportBuilder reportBuilder = new ReportBuilder(jsonFiles, configuration);
        reportBuilder.generateReports();


        }

Below is the error:

File 'target/cucumber.json' is not proper Cucumber report!
黄瓜选项(features=“features/”, glue={“报告”}, format={“pretty”,“json:target/cucumber.json”}, 标记={“@testing”},单色=真) 私有void generateReportForJsonFiles(文件reportOutputDirectory, 列表(配置文件){ 字符串:basepath=“”; 字符串buildNumber=“1”; 字符串projectName=project.getName(); 配置=新配置(reportOutputDirectory,projectName); 配置。设置并行测试(错误); setJenkinsBasePath(jenkinsBasePath); setRunWithJenkins(false); 配置.setBuildNumber(buildNumber); ReportBuilder ReportBuilder=新的ReportBuilder(JSonfile,配置); reportBuilder.generateReports(); } 以下是错误: “target/cucumber.json”文件不是正确的cucumber报告!
  • 您应该提供一个小示例(),其他人可以使用它来重现您的问题
  • 您的代码段
    配置。setParallelTesting(false)
    与您的答案
    报告版本为4.2.0
    不匹配,因为方法
    配置。setParallelTesting
    已在版本
    4.1.0
    中删除
看看这个小的工作片段(基于您提供的少量信息)

假设以下结构

pom.xml
src/main/java/CreateReport.java
src/main/resources/log4j2.properties
src/test/java/TestRunner.java
src/test/java/stepdefs/StepDefinitions.java
src/test/resource/features/demo.feature
pom.xml

...
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <!--
        info.cukes:cucumber-java:1.2.5 is quite old and has been superseded by
        io.cucumber:cucumber-java  see: https://mvnrepository.com/artifact/io.cucumber/cucumber-java
    -->
    <version.cucumber>1.2.5</version.cucumber>
</properties>

<dependencies>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.masterthought</groupId>
        <artifactId>cucumber-reporting</artifactId>
        <version>4.0.0</version>
    </dependency>
</dependencies>
...
TestRunner.java

import java.io.File;
import java.util.Arrays;
import java.util.List;

import net.masterthought.cucumber.Configuration;
import net.masterthought.cucumber.ReportBuilder;

public class CreateReport {

    private void generateReportForJsonFiles(File reportOutputDirectory, List<String> jsonFiles) {
        String buildNumber = "1";
        String projectName = "StackOverflow example";

        Configuration configuration = new Configuration(reportOutputDirectory, projectName);
        configuration.setParallelTesting(false);
//        configuration.setJenkinsBasePath(jenkinsBasePath);
        configuration.setRunWithJenkins(false);
        configuration.setBuildNumber(buildNumber);

        ReportBuilder reportBuilder = new ReportBuilder(jsonFiles, configuration);
        reportBuilder.generateReports();
    }

    public static void main(String[] args) {
        new CreateReport().generateReportForJsonFiles(new File("target/"),
                Arrays.asList("target/cucumber.json"));
    }
}
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resource/features"},
        glue = {"stepdefs"},
        plugin = {"json:target/cucumber.json"}
         )
public class TestRunner {
}
package stepdefs;

import org.junit.Assert;

import cucumber.api.java.en.Given;

public class StepDefinitions {
    @Given("^a successful step$")
    public void aSuccessfulStep() throws Throwable {
        System.out.println("a successful step");
    }

    @Given("^a not successful step$")
    public void aNotSuccessfulStep() throws Throwable {
        System.out.println("a not successful step");
        Assert.fail();
    }
}
StepDefinitions.java

import java.io.File;
import java.util.Arrays;
import java.util.List;

import net.masterthought.cucumber.Configuration;
import net.masterthought.cucumber.ReportBuilder;

public class CreateReport {

    private void generateReportForJsonFiles(File reportOutputDirectory, List<String> jsonFiles) {
        String buildNumber = "1";
        String projectName = "StackOverflow example";

        Configuration configuration = new Configuration(reportOutputDirectory, projectName);
        configuration.setParallelTesting(false);
//        configuration.setJenkinsBasePath(jenkinsBasePath);
        configuration.setRunWithJenkins(false);
        configuration.setBuildNumber(buildNumber);

        ReportBuilder reportBuilder = new ReportBuilder(jsonFiles, configuration);
        reportBuilder.generateReports();
    }

    public static void main(String[] args) {
        new CreateReport().generateReportForJsonFiles(new File("target/"),
                Arrays.asList("target/cucumber.json"));
    }
}
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resource/features"},
        glue = {"stepdefs"},
        plugin = {"json:target/cucumber.json"}
         )
public class TestRunner {
}
package stepdefs;

import org.junit.Assert;

import cucumber.api.java.en.Given;

public class StepDefinitions {
    @Given("^a successful step$")
    public void aSuccessfulStep() throws Throwable {
        System.out.println("a successful step");
    }

    @Given("^a not successful step$")
    public void aNotSuccessfulStep() throws Throwable {
        System.out.println("a not successful step");
        Assert.fail();
    }
}
演示功能

特性:测试报告插件

Scenario: Run a non failing scenario
  Given a successful step

Scenario: Run a failing scenario
  Given a not successful step
  • 运行Cucumber测试(这将创建
    target/Cucumber.json
    文件)

  • 运行报表创建者(

  • 该报告在
    target/html报告/overview features.html


请您提供更多信息。1)net.masterthink.cucumber.ValidationException所显示的原因是什么。2) 您用于
net.masterthink:cucumber reporting
io.cucumber:
。您是否检查了
target/cucumber.json
是否为空或至少看起来像是有效的cucumber报告?@次优:是,我通过手动将Cucumber.json放在其他路径进行了测试,并为报表生成器提供了json路径,成功了,所以我猜,报表生成器甚至在创建cucumber json文件之前就试图找到它。信息:意外错误net.masterthink.cucumber.ValidationException:文件'target/cucumber.json'不是正确的cucumber报表!这就是错误,cucumber报告版本为4.2.0,cucumber版本为1.2.5请提供一个工作示例来重现您的问题。请参阅我的答案,了解一个有效的示例。