如何在 Maven 测试运行输出中获取并行执行标识符

Tuu*_*lli 8 java logging maven-3 maven

当使用egmvn test -Tn运行Maven构建并行n倍时,如何让Maven在其日志输出中添加并行测试运行器的标识符作为前缀?目前日志输出如下:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] -------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这使得很难判断哪个实例记录了什么

我希望它在日志中显示某种并行执行(线程、进程等)标识符,例如:

[1][INFO] -------------------------------------------------------
[1][INFO]  T E S T S
[2][INFO] -------------------------------------------------------
[2][INFO]  T E S T S
[2][INFO] -------------------------------------------------------
[1][INFO] -------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

-Dorg.slf4j.simpleLogger.showThreadName=true通过添加到环境变量(如https://maven.apache.org/maven-logging.htmlMAVEN_OPTS中所述) ,可以很容易地在日志输出中获取线程标识符,但这似乎不会影响 Surefire 输出,例如:

[BuilderThread 1] [INFO] Surefire report directory: C:\redacted\path\to\module2\target\surefire-reports
[BuilderThread 0] [INFO] Nothing to compile - all classes are up to date
[BuilderThread 0] [INFO]
[BuilderThread 0] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ module1 ---
[BuilderThread 0] [INFO] Surefire report directory: C:\redacted\path\to\module1\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

khm*_*ise 3

首先,通过使用-T ...不并行运行集成测试,您可以并行运行模块的构建。

此外,如果您使用 maven-surefire-plugin 您做错了什么,因为maven-surefire-plugin用于运行单元测试,而maven-failsafe-plugin用于集成测试。

要并行化测试本身,您应该查看文档如何做到这一点。

除此之外,您应该使用mvn ... verfiy来确保pre-integration-test,integration-testpost-integration-test阶段已运行。如果你调用mvn .. integration-testpost-integration-test不会被执行。

此外,根据定义,集成测试不能并行化,因为它们通常使用资源,以其他方式耦合。只有单元测试可以根据定义并行化,因为它们是独立的等。