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

时间:2017-08-24 06:19:07

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

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

我正在使用maven 3.5&在MacOSX 10.12.6上的surefire-plugin 2.4.2。

3 个答案:

答案 0 :(得分:4)

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项目的toplevel目录中执行这些命令。

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

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

结果按消耗时间排序。

答案 1 :(得分:0)

您可以使用surefire-report-plugin对结果进行汇总(但仍然无法对其进行排序)

mvn surefire-report:report -DlinkXRef=false -Daggregate=true

mvn surefire-report:report-only -DlinkXRef=false -Daggregate=true

如果您已经使用surefire插件构建项目。

这将在根目标目录中生成surefire-report.html,您可以在其中找到每个模块和每个测试套件的时间统计信息。

答案 2 :(得分:0)

我用Martin Höller的代码片段写了一个小的bash脚本,可以帮助某人:

#!/bin/bash

# This script goes through tests results in `target/surefire-reports` and sorts the results by the
# amount of time they took. This is helpful to identify slow tests.

set -e

# Make sure the surefire folder exists
if [ ! -d "target/surefire-reports" ]; then
    echo "The folder 'target/surefire-reports' doesn't exists. Please run tests before using this script."
    exit 1
fi

# Go through the surefire test reports and sort tests by time taken. Source for this snippet:
# https://stackoverflow.com/questions/45854277/execution-time-of-tests-in-unit-test-class-via-maven-surefire-report-in-a-single/45859700#45859700
grep -h testcase target/surefire-reports/TEST-*.xml |
    awk -F '"' '{print $4 "#" $2 "() - " $6 "ms" }' |
      sort -rn -k 3