有没有办法为failsafe/surefire Maven 插件的每个分支编写单独的日志?

问题描述 投票:0回答:1

我们使用 maven-failsafe-plugin 与

<forkCount>
同时运行集成测试,因此我们将在不同进程中拥有多个 JVM 并行运行测试。

故障安全插件记录了所有测试的输出,但是不同分支的行混合在一起,很难理解发生了什么。

有没有一种方法可以将 Surefire 插件的日志输出写入文件(每个分叉进程一个文件),而不是将其打印到标准输出?感觉很奇怪,这不是一个常见问题。

被测应用程序是Spring Boot应用程序。

我知道我可以将每个测试的输出写入一个文件,并且它可以在

target/failsafe-reports/<SomeTest>.xml
中使用。这已经很好了,但是我们最近遇到了一个测试的数据泄露到另一个测试的情况,在这种情况下,每个分支都有一个日志文件会非常有帮助,这样人们就可以看到测试执行的顺序。

我考虑用 logback 替换 mvn 的 Slf4j SimpleLogger,因为使用 logback 应该是可能的,但据我所知,如果不修改 mvn 安装本身,这是不可能的,但我想仅将更改保留在本地项目。

我可以在被测试的应用程序内配置 logback 以记录到这些文件,但是这样我会丢失故障安全插件中的这些行,这些行也包含有价值的信息,并且对于了解实际发生的情况是必要的:

[INFO] Running <SomeTest>
,
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.856 s -- in <SomeTest>

logback slf4j maven-surefire-plugin maven-failsafe-plugin
1个回答
0
投票

最终我放弃了maven日志记录。相反,我在应用程序端解决了它:

我在

logback-test.xml
中创建了一个
src/test/resources/
配置文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml" />
  <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
  <include resource="org/springframework/boot/logging/logback/file-appender.xml" />

  <property name="LOG_FILE" value="target/failsafe-reports/logs/integration-tests-${PID:-0}.log"/>

  <root level="${logback.level:-info}">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</configuration>

它将为每个进程 ID 创建一个日志文件。

然后我还添加了一个 Spring bean,其方法用

@BeforeTestMethod
@AfterTestMethod
注释,对相应事件做出反应,以在测试开始和结束时添加到日志输出中。

© www.soinside.com 2019 - 2024. All rights reserved.