junit测试用例的执行时间每次都不同。为什么?

时间:2015-06-02 08:10:57

标签: java performance junit4 performance-testing

我有一套 196 测试方法。这些测试用例的执行时间每次运行时都会有所不同。它已在受控环境中运行,Say,对于垃圾收集,我在null中包含了teardown()

每次执行测试之前,我还要确保每次启动时CPU使用率,内存使用率,磁盘空间,系统负载都相同。

此外,时间变化不是任何特定顺序。我需要知道为什么在再次执行相同的测试用例时我们不能获得表执行时间

我通过在课堂上加热预期使93例病例稳定。其他情况与数据库连接(读取数据或更新数据库中的数据)有关。每次运行这些测试用例时都可以有相同的执行时间。 (执行时间是指junit测试用例执行时间)

1 个答案:

答案 0 :(得分:1)

Java性能可以解决两个主要问题:

  • 您需要对JVM进行预热,您的测试将被解释为字节码并受JVM的支配。这意味着在同一次运行期间执行相同的测试数千次。
  • JUnit测试的准确度不高。事实上,即使专门为此构建库,也几乎不可能获得精确性能读数。这就是为什么通常建议采取平均多个样本。

然而,这个以及Reto建议的其他人正是可能导致Java出现差异的原因。其中毫秒的方差超过预期。举个例子,创建一个单元测试,它接受一个线程并使其进入休眠状态10毫秒。观察您在7 ms到13 ms到17 ms或更长时间内的结果。它不是衡量事物的可靠方法。

如果您要连接到网络,将数据上传到数据库等,我不能代表这一点发言,但您还需要考虑这些系统的差异。

我建议将最大差异的三个测试分成更小的块。尝试并隔离您最大的瓶颈所在,然后集中精力优化该操作或操作集。我认为连接到数据库需要花费最多的时间,接下来可能会执行查询。但是你应该隔离这些操作的测量以确保这一点。