【问题标题】:Report builder says Cucumber is not a valid report报告生成器说 Cucumber 不是有效的报告
【发布时间】:2019-05-15 19:03:28
【问题描述】:

我使用下面的代码来创建 html 报告,此代码存在于黄瓜框架中的 Junit Runner 类之后,但我收到错误说 cucumber.json 不是有效的黄瓜报告。我假设报告生成器正在尝试获取 cucumber.json 甚至在它完全创建之前, 我将代码保存在黄瓜选项中以创建 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!

【问题讨论】:

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

标签: selenium-webdriver automation cucumber cucumber-jvm


【解决方案1】:
  • 您应该提供一个小示例 (MCVE),其他人可以使用它来重现您的问题
  • 您的代码 sn-p configuration.setParallelTesting(false) 和您的答案 cucumber report version is &lt;version&gt;4.2.0&lt;/version&gt; 不匹配,因为方法 configuration.setParallelTesting 在版本 4.1.0 中已删除

看看这个小的工作 sn-p(基于您提供的少量信息)。

假设如下结构

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>
...

CreateReport.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"));
    }
}

log4j2.properties

status = info
name = PropertiesConfig
appenders = console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%level] %m%n
rootLogger.level = info
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

TestRunner.java

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 {
}

StepDefinitions.java

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();
    }
}

demo.feature

功能:测试黄瓜报告插件

Scenario: Run a non failing scenario
  Given a successful step

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

    $ mvn clean test
    
  • 运行报表创建器(

    $ mvn exec:java -Dexec.mainClass=CreateReport
    ...
    12:55:21 [INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ cuke-test23.so ---
    Dec 18, 2018 12:55:22 PM net.masterthought.cucumber.ReportParser parseJsonFiles
    INFO: File 'target/cucumber.json' contains 1 features
    
  • 报告生成于target/cucumber-html-reports/overview-features.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多