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

Posted

技术标签:

【中文标题】在 Junit5 中记录每个测试用例的执行时间的注释【英文标题】:Annotation to log the execution time of each test case in Junit5 【发布时间】:2017-07-21 05:14:59 【问题描述】:

我需要记录每个测试用例的执行时间。我不想使用自定义实现。我想知道 junit5 中是否有可用的注释顺便说一句,我知道 Stopwatch 或 Junit4 @Timeout

【问题讨论】:

【参考方案1】:

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

这个 sn-p 来自他们的文档:

@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

【讨论】:

【参考方案2】:

我写了一个BenchmarkExtension,您可以使用@Benchmark 申请。您可以按如下方式使用它:

@Benchmark
class BenchmarkTest 

    @Test
    void notBenchmarked() 
        assertTrue(true);
    

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


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

我希望它最终会进入JUnit Pioneer。

【讨论】:

当你搞砸自己项目的名字时...? 已修复。【参考方案3】:

Junit5 还有一个@Timout 注释。

还有assertTimeoutassertTimeoutPreemptively(见documentation)。

最后,JUnit 5 中不提供 JUnit 4 秒表功能。如前所述,请使用 TimeExtension。但是,此扩展不是(还没有?)分发的一部分(请参阅issue 343)。

【讨论】:

【参考方案4】:

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

test time sorted

all test

【讨论】:

【参考方案5】:

在 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"/>

【讨论】:

以上是关于在 Junit5 中记录每个测试用例的执行时间的注释的主要内容,如果未能解决你的问题,请参考以下文章

软件测试

测试用例的编写

编写单元测试用例说明书的依据是啥

测试用例cicd怎么实现的

深度解读接口测试...

unittest单元测试框架中的参数化及每个用例的注释