用于记录 Junit5 中每个测试用例的执行时间的注释

Annotation to log the execution time of each test case in Junit5

我需要记录每个测试用例的执行时间。我不想使用自定义实现。我想知道在 junit5

中是否有可用的注释顺便说一句,我知道 Stopwatch 或 Junit4 @Timeout.

查看 junit5 文档后,我找到了这个示例 TimeExtension

这段代码来自他们的文档:

@ExtendWith(TimingExtension.class)
class TimingExtensionTests {

  @Test
  void sleep20ms() throws Exception {
     Thread.sleep(20);
  }

  @Test
  void sleep50ms() throws Exception {
    Thread.sleep(50);
  }

}

编辑:Source code for TimingExtension

我写了一个BenchmarkExtension that you can apply with @Benchmark。您可以按如下方式使用它:

@Benchmark
class BenchmarkTest {

    @Test
    void notBenchmarked() {
        assertTrue(true);
    }

    @Test
    @Benchmark
    void benchmarked() throws InterruptedException {
        Thread.sleep(100);
        assertTrue(true);
    }

}

当应用于 class 时,您将收到一条消息,其中包含 class 中所有测试方法的总 运行 时间。当应用于单个测试方法时,您将仅收到该测试的消息。

我希望它最终会进入 JUnit Pioneer

Junit5 还有一个 @Timout 注解。

还有一个assertTimeoutassertTimeoutPreemptively(参见documentation)。

最后,JUnit 4 秒表功能在 JUnit 5 中不可用。如前所述,请使用 TimeExtension。然而,这个扩展 不是 (还?)分布的一部分(参见 issue 343)。

如果您使用的是 Sonarqube,您可以找到每个测试的持续时间以及按时间排序的所有测试的总和

test time sorted

all test

在 JUnit 5 - Jupiter 中获取测试用例的执行时间无需执行任何特殊操作。

时间就在 XML 报告中。

在'testCase'元素上,有一个属性'time',它给出了执行测试用例的时间。下面是一个例子。时间以秒为单位

<testcase name="checkZKConnectivityWithAuth" 
          classname="test.zk.ZookeeperConnectionProviderTests" 
          time="7.177"/>

<testcase name="checkConfigRetrieval" 
          classname="test.zk.ZookeeperConnectionProviderTests" 
          time="0.213"/>

<testcase name="checkConfigInsertion" 
          classname="test.zk.ZookeeperConnectionProviderTests" 
          time="0.255"/>