当前位置: 首页 > 知识库问答 >
问题:

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

李文轩
2023-03-14

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

我用的是maven 3.5

共有3个答案

慕晨
2023-03-14

您可以使用surefire报告插件来聚合结果(但它仍然不会被排序)

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

或者

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

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

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

师向文
2023-03-14

我用马丁·赫勒的片段写了一个小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
夹谷宜民
2023-03-14

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

更新:数字排序存在分数位数变化的问题。使用下面的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

结果按消耗的时间排序。

 类似资料:
  • 问题内容: 谁能让我知道如何通过单个文件在一个单元测试类中获得每个单元测试所花费的时间?我已经看到我的每个测试都有文件。基本上,我正在寻找一个汇总了所有执行时间的文件。如果可能,还应按每个测试的执行时间对结果进行排序。 我在MacOSX 10.12.6上使用Maven 3.5和surefire-plugin 2.4.2。 问题答案: 在目前没有让你这样做。它将所有结果写入单独的文件中。如果您觉得这

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT

  • 我使用PyCharm来运行一个相当大的测试套件(1800个快速测试)。最近修改了一个测试,我意识到我的测试不会出错。当我单独运行这些测试时,确实会中断,但是如果我运行整个测试套件,它们总是会通过。这是由于一些以前的同事对类的这种不正确的嘲笑: 我现在需要检查整个测试套件中模拟的使用情况,但是我想单独运行每个测试,看看哪些测试没有通过(我将这些测试标记为高优先级)。我怎么能从控制台或Py魅力中做到这

  • 我在Dart类中有一个方法,它接受< code>BuildContext参数,如下所示: 我想测试该方法是否按预期工作: 当然,它不起作用,因为方法 需要一个参数 类型。此值在整个应用程序本身中都可用,但不确定在我的单元测试中从何处获取该值。

  • 我的项目结构如下: 在Jenkins工作中,根pom是(因为我希望整个项目是为功能覆盖的JaCoCo报告构建的),当运行覆盖报告生成的Maven目标时,我将pom指定为模块FT/pom.xml. 现在,当显示测试结果时,它向我显示了一个总的being=FTs其他模块中的所有单元测试,而我想从报告生成中排除UTs。 但我不认为这与杰科科有关,因为我说的不是杰科科的报告,而是测试结果。单元测试也被计算