JUnit是编写性能测试的正确工具吗?

Fre*_*eit 41 java junit performance-testing

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

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

kos*_*tja 41

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

由于问题已经陈述,编辑看起来像JUnitBenchmarks已被弃用.该项目的维护人员建议继续前往JMH.谢谢Barry NL的单挑.

  • 关于JUnitBenchmarks:"该项目已被弃用,有利于JMH." 可以在这里找到:http://openjdk.java.net/projects/code-tools/jmh/ (2认同)

Ara*_*ram 21

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

看看如何在Java中编写正确的微基准测试?


Ale*_*exR 6

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

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