gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:16 26 4
gpt4 key购买 nike

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

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

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

我通过在类里面设置热身期使 93 个案例稳定下来。其他情况与数据库连接有关(读取数据或更新数据库中的数据)。每次运行这些测试用例时是否有可能有相同的执行时间。 (执行时间指junit testcase执行时间)

最佳答案

有关 Java 性能的两个主要问题:

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

然而,Reto 建议的这个和其他那些正是可能导致 Java 差异的原因。毫秒的差异超过预期。例如,创建一个单元测试,该单元测试接受一个线程并将其 hibernate 10 毫秒。观察您在 7 毫秒到 13 毫秒到 17 毫秒或更长时间内获得的结果。这不是衡量事物的可靠方法。

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

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

关于java - junit 测试用例的执行时间每次都不同。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com