BDD-Java(行为驱动开发)是一种软件开发方法论,结合了测试驱动开发(TDD)和领域驱动设计(DDD)的思想。Cucumber是一个BDD框架,可以使用Java编写Cucumber测试脚本,并生成HTML报告。
要在Cucumber中只生成场景标题而不包含步骤,您可以使用自定义的Cucumber插件来实现。下面是一个示例代码,展示了如何使用Cucumber的钩子(hooks)和自定义的插件来实现这个功能:
import cucumber.runtime.CucumberException;
import cucumber.runtime.io.URLOutputStream;
import cucumber.runtime.io.WriterOutputStream;
import cucumber.runtime.formatter.ColorAware;
import cucumber.runtime.formatter.Format;
import cucumber.runtime.formatter.Stats;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
public class CustomHtmlReporter extends AbstractReporter implements ColorAware {
private final HtmlFormatter htmlFormatter;
public CustomHtmlReporter(File htmlReportDir) {
htmlFormatter = new HtmlFormatter(htmlReportDir);
}
@Override
public void setMonochrome(boolean monochrome) {
htmlFormatter.setMonochrome(monochrome);
}
@Override
public void setEventPublisher(EventPublisher publisher) {
super.setEventPublisher(publisher);
publisher.registerHandlerFor(TestRunStarted.class, htmlFormatter::setEventPublisher);
publisher.registerHandlerFor(TestCaseStarted.class, htmlFormatter::setEventPublisher);
publisher.registerHandlerFor(TestStepStarted.class, htmlFormatter::setEventPublisher);
}
@Override
public void setStrict(boolean strict) {
htmlFormatter.setStrict(strict);
}
@Override
public void syntaxError(String state, String event, List legalEvents, String uri, Integer line) {
htmlFormatter.syntaxError(state, event, legalEvents, uri, line);
}
@Override
public void uri(String uri) {
htmlFormatter.uri(uri);
}
@Override
public void feature(Feature feature) {
htmlFormatter.feature(feature);
}
@Override
public void scenarioOutline(ScenarioOutline scenarioOutline) {
htmlFormatter.scenarioOutline(scenarioOutline);
}
@Override
public void examples(Examples examples) {
htmlFormatter.examples(examples);
}
@Override
public void startOfScenarioLifeCycle(Scenario scenario) {
htmlFormatter.startOfScenarioLifeCycle(scenario);
}
@Override
public void background(Background background) {
htmlFormatter.background(background);
}
@Override
public void scenario(Scenario scenario) {
htmlFormatter.scenario(scenario);
}
@Override
public void step(Step step) {
// 不处理步骤信息
}
@Override
public void match(Match match) {
htmlFormatter.match(match);
}
@Override
public void result(Result result) {
htmlFormatter.result(result);
}
@Override
public void embedding(String mimeType, byte[] data) {
htmlFormatter.embedding(mimeType, data);
}
@Override
public void write(String text) {
htmlFormatter.write(text);
}
@Override
public void close() {
htmlFormatter.close();
}
@Override
public void eof() {
htmlFormatter.eof();
}
@Override
public void done() {
htmlFormatter.done();
}
@Override
public void before(Match match, Result result) {
htmlFormatter.before(match, result);
}
@Override
public void after(Match match, Result result) {
htmlFormatter.after(match, result);
}
@Override
public void setStrict(boolean strict, boolean strictJava) {
htmlFormatter.setStrict(strict, strictJava);
}
@Override
public void setEventPublisher(EventPublisher publisher) {
htmlFormatter.setEventPublisher(publisher);
}
@Override
public void setMonochrome(boolean monochrome) {
htmlFormatter.setMonochrome(monochrome);
}
@Override
public void setTags(List tags) {
htmlFormatter.setTags(tags);
}
@Override
public void setTagFilter(TagFilter filter) {
htmlFormatter.setTagFilter