2012-06-21 45 views
7

的情况是这样的:附加日志JBehave

我们使用JBehave和硒对系统集成和端到端测试。 我正在检查页数超过20个值的计算结果进行验证。 使用Junit断言整个测试将失败,其中一个值的第一个实例不正确。我想要做的是,如果断言失败,测试继续执行,以便我可以在一次测试运行中比较所有不正确的值,而不是多次测试运行。

为此,我捕获断言并将任何未通过验证的日志文件写出来。这给我留下了几个问题:

1)我写出断言失败的日志文件不包含发生异常时正在运行的JBehave Story或Scenario的名称。

2)JBehave的故事或情景被列为'通过',我希望它被列为'失败'。

是否有任何方法可以将Story和Scenario的名称记录到附加日志文件中或者获取写入JBehave日志文件的附加日志记录?

我如何获得标记为失败的故事/方案?

在JBehave配置我:

configuredEmbedder() 
    .embedderControls() 
    .doIgnoreFailureInStories(true) 
    .doIgnoreFailureInView(false) 
    .doVerboseFailures(true) 
    .useStoryTimeoutInSecs(appSet.getMaxRunningTime()); 

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

回答

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); 
    } 

    ... 
} 

像这样注册它:

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
     .withReporters(new MyStoryReporter()) 
.. 
+0

谢谢。这真的很有用。 –

+0

您可以请添加更多关于我们如何创建记录器的信息。 请解释一下:私人日志日志= ... – farheen

+0

这取决于您使用的日志框架。如果你正在使用slf4j:'Logger log = LoggerFactory.getLogger(MyStoryReporter.class);'。主要的一点是,它可能是这些回调方法中的任何东西 - 你可以做一个sysout,写入数据库或其他任何东西 – plasma147

相关问题