java - 通过 maven surefire-report 在单个文件中以汇总格式执行单元测试类中的测试执行时间

标签 java maven unit-testing maven-3 maven-surefire-plugin

任何人都可以让我知道如何通过 maven-surefire 获取单个文件中单元测试类中每个单元测试所花费的时间吗?我已经看到我的 target/surefire-report 它有每个测试的文件。基本上我正在寻找一个汇总了所有执行时间的文件。如果可能,还可以按每个测试的执行时间对结果进行排序。

我在 MacOSX 10.12.6 上使用 maven 3.5 和 surefire-plugin 2.4.2。

最佳答案

maven-surefire-plugin 目前不允许您这样做。它将所有结果写入单独的文件中。您可以在其 issue tracker 中创建功能请求,如果您觉得这是一项缺失的功能。

不过,您可以使用一些 Linux 命令将输出转换为您需要的内容。以下是一些命令,可将单独的 XML 文件转换为您想要的单个文件:

grep testcase target/surefire-reports/TEST-*.xml |
  sed 's/.* name="\(.*\)" classname="\(.*\)" time="\(.*\)".*/\2#\1() - \3ms/g' |
  sort -n -k 3 > output.txt

更新:数字排序存在分数不同的问题 数字。使用下面的 awk 版本来解决这个问题。


同样的事情可以用 awk 来完成,更短一些并且不那么神秘:

grep -h testcase target/surefire-reports/TEST-*.xml |
  awk -F '"' '{printf("%s#%s() - %.3fms\n", $4, $2, $6); }' |
  sort -n -k 3 > output.txt

生成 surefire-reports 后,您必须从 maven 项目的顶层目录执行这些命令。

如果你有多模块项目,请改用它:

find . -name TEST-*.xml -exec grep -h testcase {} \; |
  awk -F '"' '{printf("%s#%s() - %.3fms\n", $4, $2, $6); }' |
  sort -n -k 3 > output.txt

生成的文件是 output.txt,包含以下格式的行:

<classname>#<methodname>() - <time>ms

结果按消耗时间排序。

关于java - 通过 maven surefire-report 在单个文件中以汇总格式执行单元测试类中的测试执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854277/

相关文章:

unit-testing - 在单元测试中清除 Angular 模块

unit-testing - Ember-cli : relationship unit test for model failing

Java 泛型 : adding wrong type in collection

java - 与 Jetty 和 Guice 集成良好的 Web 服务 Java 库?

java - 自定义 Maven 插件托管和前缀解析

java - 调用maven项目的困惑

iphone - google-toolbox-for-mac iPhone 单元测试 : 1073 Abort trap mkdir "$CFFIXED_USER_HOME" Command/bin/sh failed with exit code 134

java - 用于为学校项目显示以下模式的 bluej 程序

java - 将 HashMap 插入 HashMap ?

Maven 和 spring-boot-dependencies