在 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 注释。
还有assertTimeout
和assertTimeoutPreemptively
(见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 中记录每个测试用例的执行时间的注释的主要内容,如果未能解决你的问题,请参考以下文章