使用JBehave获取逐个场景的通过/失败报告

时间:2014-08-08 21:43:48

标签: jbehave

我想从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示例。如果有人可以提供更具体的指针,这些示例可以帮助实现这一点。

1 个答案:

答案 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;
}