【问题标题】:How to get parallel execution identifier in Maven test run output如何在 Maven 测试运行输出中获取并行执行标识符
【发布时间】:2016-11-08 16:33:39
【问题描述】:

当使用例如mvn test -Tn 运行 Maven 构建并行化 n-fold,如何让 Maven 在其日志输出前加上并行测试运行器的标识符?目前日志输出如下:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] -------------------------------------------------------

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

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

[1][INFO] -------------------------------------------------------
[1][INFO]  T E S T S
[2][INFO] -------------------------------------------------------
[2][INFO]  T E S T S
[2][INFO] -------------------------------------------------------
[1][INFO] -------------------------------------------------------

通过将-Dorg.slf4j.simpleLogger.showThreadName=true 添加到MAVEN_OPTS 环境变量(如https://maven.apache.org/maven-logging.html 所述)很容易在日志输出中获取线程标识符,但这似乎不会影响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
-------------------------------------------------------

【问题讨论】:

  • 谢谢!将 mvn 替换为 MAVEN_OPTS=-Dorg.slf4j.simpleLogger.showThreadName=true mvn 在日志中生成线程标识符

标签: java maven logging maven-3


【解决方案1】:

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

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

要并行化测试本身,您应该查看docs 如何执行此操作。

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

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

【讨论】:

  • 嗯,没错,-T 确实在更高级别上并行化了事物。我将用这些术语重新表述这个问题。其他注释似乎是准确的,除了mvn integration-test 肯定似乎运行pre-integration-test 阶段。我希望它不会运行post-integration-test,但这与实际问题无关。至于集成测试是否可以并行化,那肯定取决于它们是如何编写的。我希望对不可并行化的集成测试进行注释。
猜你喜欢
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2015-02-11
  • 2018-05-31
  • 1970-01-01
  • 2019-12-06
  • 2010-09-30
相关资源
最近更新 更多