任何人都可以让我知道如何通过 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/