【问题标题】:Is JUnit the right tool to write performance tests? [closed]JUnit 是编写性能测试的正确工具吗? [关闭]
【发布时间】:2012-02-29 00:06:28
【问题描述】:

在上周,我创建了两个课程,我的团队对它们的表现表示了一些担忧。为了评估我的代码,我编写了一些简单的 JUnit 测试,这些测试通过构建丰富的测试数据集来运行这些类,然后通过相关方法为数千次迭代提供这些数据。我记录了每次迭代的运行时间,然后使用循环和System.nanoTime() 记录了最高、最低和平均时间。最后,我让 JUnit 断言最高时间和平均时间在可接受的范围内。这种测试方法让我的团队对这段代码充满信心。

JUnit 是否适合以这种方式测试性能?是否有更好的工具来测试单元(方法和类)级别的性能?

【问题讨论】:

    标签: java junit performance-testing


    【解决方案1】:

    没有。 JUnit 是为单元测试而设计的。在用 Java 编写性能测试时,有很多事情需要注意。使用专为编写微基准测试而设计的Google Caliper

    How do I write a correct micro-benchmark in Java?

    【讨论】:

    • 正是我要推荐的:)
    • Google Caliper 似乎不是一个成功的项目。自 2 年以来,它们仍处于测试阶段。
    【解决方案2】:

    您的测试应该更好地定义为基准测试。是的,JUnit 可以以这种方式使用,尽管它不是最佳选择。但是您可以例如定义最大值。测试的评估时间,因此如果更改算法导致性能下降,则测试失败。使用@Test(timeout=12345) 进行配置。

    如果您需要真正的性能测试,请考虑 JMeter。

    【讨论】:

      【解决方案3】:

      可能有更好的方法,但也有一些框架可以帮助使用 JUnit 实现基准测试。一些有用的做法是热身运行、统计评估。看看JUnitBenchmarksJUnitPerf

      EDIT 看起来 JUnitBenchmarks 已被弃用,因为问题已经说明。该项目的维护人员建议继续使用JMH。谢谢 Barry NL 的提醒。

      【讨论】:

      • 我接受了这一点,因为我和我的团队对 JUnit 与这些选项的集成有着强烈的亲和力。 @Pangea 对于没有 Junit 集成的基准测试有一个很好的答案。
      • 我们的项目已经为我们所有的单元测试实现了 JUnit。使用 JUnitPerf 框架将它们扩展到性能测试非常简单且有意义。
      • 酷,很高兴这个答案仍然有用:)
      • 关于 JUnitBenchmarks:“该项目已被 JMH 弃用。”可以在这里找到:openjdk.java.net/projects/code-tools/jmh
      【解决方案4】:

      JUnit 更适合单元测试,也许在这种情况下 TestNG 会是更好的选择,尤其是它的@Dataprovider 功能:

      //This method will provide data to any test method that declares that its Data Provider
      //is named "test1"
      @DataProvider(name = "test1")
      public Object[][] createData1() {
       return new Object[][] {
         { "Cedric", new Integer(36) },
         { "Anne", new Integer(37)},
       };
      }
       
      //This test method declares that its data should be supplied by the Data Provider
      //named "test1"
      @Test(dataProvider = "test1")
      public void verifyData1(String n1, Integer n2) {
       System.out.println(n1 + " " + n2);
      }
      

      这里是specific doc

      【讨论】:

      • JUnit 支持非常相似的@Parameterized。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2016-04-25
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多