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

tuk*_*tuk 6 java unit-testing maven-3 maven maven-surefire-plugin

任何人都可以告诉我如何通过单个文件中的单元测试类中的每个单元测试所花费的时间maven-surefire?我看到我target/surefire-report的每个测试都有文件.基本上我正在寻找一个总结了所有执行时间的文件.如果可能,还要按每个测试的执行时间对结果进行排序.

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

Mar*_*ler 5

maven-surefire-plugin目前没有让你这样做。它将所有结果写入单独的文件中。如果您觉得这是缺少的功能,则可以在其问题跟踪器中创建功能请求。

但是,您可以使用一些Linux命令将输出转换为所需的输出。以下是一些命令,可将单独的XML文件转换为看起来像您想要的文件:

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

更新:数值排序存在分数位数变化的问题。使用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
Run Code Online (Sandbox Code Playgroud)

生成surefire报告后,必须从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
Run Code Online (Sandbox Code Playgroud)

结果文件为,output.txt并包含以下格式的行:

<classname>#<methodname>() - <time>ms
Run Code Online (Sandbox Code Playgroud)

结果按消耗的时间排序。