为了将JUnit 5测试的日志文件附加到Allure报告中?

时间:2018-08-29 10:28:07

标签: log4j2 junit5 allure

我希望每个JUnit 5测试都有自己的log4j2日志文件。然后,我想将此日志文件附加到Allure HTML测试报告中。

昨天,我尝试了两种用Google搜索的方法,但是没有用。一种是在log4j2配置文件中使用系统属性。但是这些显然仅初始化一次。现在,我写了这些行,我想知道是否有一种方法可以在运行时触发日志配置的重新初始化?

然后,我尝试了一种以编程方式更新附加程序的方法。它非常复杂,深入到log4j2的内部。而且它没有用,最后已经说了一些流已经关闭,然后我放弃了。

在我再试一次之前,什么是聪明又安全的方法?

2 个答案:

答案 0 :(得分:0)

通常,该解决方案要求您在测试触发器Allure.getLifecycle().addAttachment()的某个地方和结尾收集与当前测试相关的输出。

我们的项目中同时产生了许多测试日志,因此我们将它们保存在H2中。测试完成后,我们仅获得每个测试唯一ID所需的日志。我想可以用更好的方法来完成,但这只是解决方案。

答案 1 :(得分:0)

我设法为每个测试附加一个日志文件。这些链接对我有所帮助:

https://stackoverflow.com/a/43404124

https://github.com/sercasti/Log4j-RewriteAppender

在log4j2.xml中,我使用路由附加程序,并在其中使用文件附加程序,其文件名为fileName =“ target / logs / $ {ctx:testId} .log”。

棘手的是要处理没有$ {ctx:testId}的日志事件,这就是为什么我必须使用Rewrite追加器才能将其动态添加的原因。

在JUnit 5中,我实现了BeforeTestExecutionCallback,在其中执行“ ThreadContext.put(...)”。因此,将每个测试的现有日志文件附加到Allure会比较容易。我添加到Jenkins构建结果中的不适用于特定测试的日志文件。

另一个想法是将日志信息发布到Kibana,并在“魅力”报告中添加指向该信息的链接,但是我没有选择这种方式。

我希望这些信息可以帮助想要这样做的人作为起点。