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

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

我正在使用maven 3.5&在MacOSX 10.12.6上的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报告后,您必须从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以汇总格式显示在单个文件中 - 代码日志