【问题标题】:Log file per JUnit 5 test in order to attach it to the Allure report?每个 JUnit 5 测试的日志文件以便将其附加到 Allure 报告?
【发布时间】:2018-08-29 10:28:06
【问题描述】:

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

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

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

在我重试之前,有什么明智且安全的方法?

【问题讨论】:

    标签: log4j2 junit5 allure


    【解决方案1】:

    一般的解决方案需要您在某处以及在测试触发器Allure.getLifecycle().addAttachment()结束时收集与当前测试相关的输出。

    我们的项目中有很多并行生成的测试日志,因此我们将它们保存在 H2 中。测试完成后,我们只需获取每个测试唯一 ID 所需的日志。我想它可以以更好的方式完成,但它是可行的解决方案。

    【讨论】:

    • 将日志添加为 Allure 附件的部分对我来说不是问题。我的问题是如何为每个 JUnit 5 测试用例实现一个 log4j 日志文件。这部分是我寻求建议的棘手问题。
    • 现在除了使用方面和 Allure 内部进行操作之外,还有其他简单的方法。请参阅相关讨论github.com/allure-framework/allure-java/issues/18。我们的方法是将日志保存在内存数据库中,并在需要时为不同的报告系统共享它们。
    【解决方案2】:

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

    https://stackoverflow.com/a/43404124

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

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

    棘手的事情是处理没有 ${ctx:testId} 的日志事件,这就是为什么我必须使用 Rewrite appender 才能即时添加它。

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

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

    我希望这些信息可以帮助那些想要做同样事情的人,作为一个起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2020-03-30
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多