额外的记录JBehave

Gaz*_*dos 7 java bdd logging jbehave selenium-webdriver

场景是这样的:

我们使用JBehave和Selenium进行系统,集成和端到端测试.我正在检查超过20个值的页面上的计算结果以进行验证.使用Junit断言整个测试将在其中一个值不正确的第一个实例上失败.我想要做的是,如果一个断言失败,那么测试继续执行,这样我就可以整理一次测试运行中不正确的所有值,而不是多次测试运行.

为此,我捕获断言并将未通过验证的任何内容写出到日志文件中.这给我留下了一些问题:

1)在我写出来的断言日志文件失败不包含JBehave的故事或情景,目前正在运行中的异常发生时的名称.

2)JBehave Story或Scenario被列为'通过',我希望它被列为'失败'.

有什么办法,我可以登录的故事和场景出了名的附加日志文件或获得写入JBehave日志文件中的额外的记录?

如何将Story/Scenario标记为失败?

在JBehave配置中,我有:

configuredEmbedder()
    .embedderControls()
    .doIgnoreFailureInStories(true)
    .doIgnoreFailureInView(false)
    .doVerboseFailures(true)
    .useStoryTimeoutInSecs(appSet.getMaxRunningTime());
Run Code Online (Sandbox Code Playgroud)

.useStoryReporterBuilder(
    new StoryReporterBuilder()
    .withDefaultFormats()
    .withViewResources(viewResources)
    .withFormats(Format.HTML, Format.CONSOLE)
    .withFailureTrace(true)
    .withFailureTraceCompression(true)
    .withRelativeDirectory("jbehave/" + appSet.getApplication())
Run Code Online (Sandbox Code Playgroud)

pla*_*147 11

是的,您可以创建自己的StoryReporter:

 public class MyStoryReporter implements org.jbehave.core.reporters.StoryReporter{
     private Log log = ...

     @Override
     public void successful(String step) {
        log.info(">>successStep:" + step);
     }

    @Override
    public void failed(String step, Throwable cause) {
        log.error(">>error:" + step + ", reason:" + cause);
    }

     ...
 }
Run Code Online (Sandbox Code Playgroud)

并注册如下:

.useStoryReporterBuilder(
    new StoryReporterBuilder()
         .withReporters(new MyStoryReporter())
..
Run Code Online (Sandbox Code Playgroud)