如何在构建Cucumber报告后执行一些代码?

时间:2017-05-22 14:38:20

标签: junit cucumber-jvm

我使用Cucumber for jUnit runner来运行这样的BDD测试:

@RunWith(Cucumber.class)
@CucumberOptions(
    format = {"pretty", "json:target/cucumber.json"},
    glue = {"com.company.bdd.steps"},
    features = {"classpath:bdd-scenarios"},
    tags = {"~@skip"}
)
public class CucumberTests {
}

我希望从https://github.com/damianszczepanik/cucumber-reporting

获得漂亮的HTML报告

我制作了jUnit @AfterClass方法:

@AfterClass
public static void buildReport() throws Exception {
    List<String> srcReportJson = Collections.singletonList("target/cucumber.json");
    Configuration configuration = new Configuration(new File("target"), "AEOS BDD Integration Tests");
    new ReportBuilder(srcReportJson, configuration).generateReports();
}

问题是cucumber.json方法执行时@AfterClass为空。因此,我无法构建漂亮的HTML报告。

在黄瓜json报告已经构建完成之后,是否有任何可用于执行某些代码的钩子?

PS:使用了Cucumber v.1.1.8和Java 1.7,所以我无法尝试使用ExtendedCucumberRunner

4 个答案:

答案 0 :(得分:2)

你可以看一下黄瓜的自定义格式化程序: gherkin.formatter class

答案 1 :(得分:1)

您是否考虑过添加关机挂钩? Here is关于如何添加一个的示例。应该在JVM关闭之前执行的run()方法中的代码。

答案 2 :(得分:1)

感谢您提出建议,但我决定使用现有的Maven plugin并在测试目标后立即执行目标。

答案 3 :(得分:0)

wjpowell在cucumber-jvm issues中发布了这个建议:

&#34;你不需要用黄瓜做这个。在用于运行黄瓜测试的JUnit测试中使用@beforeclass和@afterclass注释。这样做的好处是只运行路径或标签选项指定的功能。

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"html:target/cucumber-html-report", "json-pretty:target/cucumber-json-report.json"})
public class RunCukesTest {

    @BeforeClass
    public static void setup() {
        System.out.println("Ran the before");
    }

    @AfterClass
    public static void teardown() {
        System.out.println("Ran the after");
    }
}

&#34;