我想从JBehave生成一个报告,它只列出每个方案的名称和一个PASS / FAIL状态。如果根据场景结果给出故事的通过/失败状态(如果所有场景都通过故事通过),则奖励积分。类似的东西:
PASS: Story: Build a widget.
PASS: Scenario: Build a normal widget.
PASS: Scenario: Build a custom widget.
FAIL: Story: Test a widget.
PASS: Scenario: Test a normal widget.
FAIL: Scenario: Test a custom widget.
首选文字,但我可以使用其他格式。
这篇文章: Additional logging JBehave 展示了如何使用StoryReporter捕获单个步骤的通过/失败,但是通过界面我无法看到如何捕获单个场景的最终状态。
同一篇文章后面的评论者提到在源代码发布中有几个视图genaration示例。如果有人可以提供更具体的指针,这些示例可以帮助实现这一点。
答案 0 :(得分:0)
下面的StoryReporter代码应该可以满足您的需求。它跟踪场景中每个场景的每个步骤的通过/失败状态。如果任何步骤失败,则方案失败。如果任何方案失败,则故事标记为失败。在故事的最后,它记录了结果。
public class MyStoryReporter implements org.jbehave.core.reporters.StoryReporter {
private Story runningStory;
private boolean runningStoryStatus;
private String runningScenarioTitle;
private boolean runningScenarioStatus;
private List<ScenarioResult> scenarioList;
private Log log = LogFactory.getLog(this.getClass());
private class ScenarioResult {
public String title;
public boolean result;
public ScenarioResult(String title, boolean result) {
this.title = title;
this.result = result;
}
}
public void beforeStory(Story story, boolean b) {
runningStory = story;
runningStoryStatus = true;
scenarioList = new ArrayList<>();
}
public void afterStory(boolean b) {
String storyPrefix = runningStoryStatus ? "PASS: STORY: " : "FAIL: STORY: ";
log.info(storyPrefix + runningStory.getName() + ".");
String scenarioPrefix;
for (ScenarioResult scenario : scenarioList) {
scenarioPrefix = scenario.result ? " PASS: SCENARIO: " : " FAIL: SCENARIO: ";
log.info(scenarioPrefix + scenario.title + ".");
}
}
public void beforeScenario(String s) {
runningScenarioTitle = s;
runningScenarioStatus = true;
}
public void afterScenario() {
scenarioList.add(new ScenarioResult(runningScenarioTitle, runningScenarioStatus));
runningStoryStatus = runningStoryStatus && runningScenarioStatus;
}
public void failed(String s, Throwable throwable) {
runningScenarioStatus = false;
}