【问题标题】:Get a scenario-by-scenario pass/fail report with JBehave使用 JBehave 获取逐个场景的通过/失败报告
【发布时间】:2014-08-08 21:43:47
【问题描述】:

我想从 JBehave 生成​​一份报告,其中只列出每个场景的名称​​和通过/失败状态。如果它根据场景结果给出故事的通过/失败状态(如果所有场景都通过故事通行证),则会获得奖励积分。比如:

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 来捕获各个步骤的通过/失败,但是通过界面我看不到如何捕获单个场景的最终状态。

稍后在同一篇文章中的评论者提到源分发中有几个视图生成示例。如果有人可以提供更具体的指示,说明哪些示例可以这样做,那也会有所帮助。

【问题讨论】:

    标签: jbehave


    【解决方案1】:

    下面的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多