我希望每个JUnit 5测试都有自己的log4j2日志文件。然后,我想将此日志文件附加到Allure HTML测试报告中。
昨天,我尝试了两种用Google搜索的方法,但是没有用。一种是在log4j2配置文件中使用系统属性。但是这些显然仅初始化一次。现在,我写了这些行,我想知道是否有一种方法可以在运行时触发日志配置的重新初始化?
然后,我尝试了一种以编程方式更新附加程序的方法。它非常复杂,深入到log4j2的内部。而且它没有用,最后已经说了一些流已经关闭,然后我放弃了。
在我再试一次之前,什么是聪明又安全的方法?
答案 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,并在“魅力”报告中添加指向该信息的链接,但是我没有选择这种方式。
我希望这些信息可以帮助想要这样做的人作为起点。