Java 附加日志JBehave
情况是这样的: 我们使用JBehave和Selenium进行系统、集成和端到端测试。 我正在检查一个页面上的计算结果,需要验证的值超过20个。 使用Junit Assert,当其中一个值不正确时,整个测试将失败。我想做的是,如果遇到断言失败,那么测试将继续执行,这样我就可以在一次测试运行而不是多次测试运行中整理所有不正确的值 为此,我捕获断言并将验证失败的任何内容写入日志文件。这给我留下了几个问题: 1) 写入断言失败的日志文件不包含异常发生时正在运行的JBehave故事或场景的名称 2) JBehave故事或场景被列为“已通过”,我希望它被列为“失败” 是否有任何方法可以将故事和场景的名称记录到附加日志文件中,或者将附加日志写入JBehave日志文件中 如何将故事/场景标记为失败 在JBehave配置中,我有:Java 附加日志JBehave,java,logging,selenium-webdriver,bdd,jbehave,Java,Logging,Selenium Webdriver,Bdd,Jbehave,情况是这样的: 我们使用JBehave和Selenium进行系统、集成和端到端测试。 我正在检查一个页面上的计算结果,需要验证的值超过20个。 使用Junit Assert,当其中一个值不正确时,整个测试将失败。我想做的是,如果遇到断言失败,那么测试将继续执行,这样我就可以在一次测试运行而不是多次测试运行中整理所有不正确的值 为此,我捕获断言并将验证失败的任何内容写入日志文件。这给我留下了几个问题: 1) 写入断言失败的日志文件不包含异常发生时正在运行的JBehave故事或场景的名称 2) JB
configuredEmbedder()
.embedderControls()
.doIgnoreFailureInStories(true)
.doIgnoreFailureInView(false)
.doVerboseFailures(true)
.useStoryTimeoutInSecs(appSet.getMaxRunningTime());
及
是的,您可以创建自己的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())
..
非常感谢。这真的很有用。你能添加更多关于我们如何创建记录器的信息吗。请解释:private Log=…这取决于您使用的日志框架。如果您使用的是slf4j:
Logger log=LoggerFactory.getLogger(MyStoryReporter.class)代码>。主要的一点是,它可以是那些回调方法中的任何东西——你可以做一个sysout,写入数据库或者其他任何我得到的错误java:MyStoryReporter不是抽象的,并且不会覆盖org.jbehave.core.reporters.StoryReporter
中的抽象方法pendingMethods(java.util.List)。有什么帮助吗?听起来像是编译问题——试着实现那个方法。自从我回答这个问题后,api可能已经改变了
.useStoryReporterBuilder(
new StoryReporterBuilder()
.withReporters(new MyStoryReporter())
..