您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUnitPerf 使用手册
作者:网络转载 发布时间:[ 2013/1/18 14:31:06 ] 推荐标签:

编写有效的JUnitPerf测试

Timed Tests

Waiting Timed Tests

默认情况下TimedTest测试中如果实际测试时间超过了预期时间则继续执行JUnit的测试。这种waiting timed test总是允许JUnit测试累积所有的测试结果,直到测试完成并且检查完所有的测试结果。

如果测试执行中等待测试完毕的用例直接或间接地派生多个线程,那么此次测试只有等到所有的线程执行完毕才会返回到timed test中。另外一方面该测试将无限期地等待。一般来说,单元测试应该等待所有派生的线程执行完毕,例如使用Thread.join()方法,以便准确地判断结果。

Non-Waiting Timed Tests

此外,TimedTest还提供了一个构造方法,当实际时间超过预期时间时立即表示未通过。这种类型的测试如果执行时间超过了预期的大时间则不等待测试继续执行完毕。这种类型的测试比上一种方式更加有效,根据需要这种测试可节约时间,将不再等待程序执行并且立即标识测试未通过。然而,跟上面一种类型不同的是,这种类型的测试如果中间有测试不通过的话不继续执行后面的测试了。

Load Tests

Non-Atomic Load Tests

默认情况下,如果LoadTest扩展出来的测试直接或间接地派生线程,它不会强制这种线程并发执行(正如在事务中定义的一样)。这种类型的测试假设它扩展的测试在当返回控制时交互地完成。例如如果扩展测试的派生线程和控制返回没有等待派生进程执行完毕,那么扩展测试假定为一次性地完成了。

而一般来讲,单元测试中为了准确地判断结果,应该等待派生的线程也执行完毕,例如使用Thread.join()方法然而在某些情况下并不是一定要这样的。例如,对于EJB分布式的查询结果,应用服务器可能派生一个新的线程去处理这个请求。如果新的线程在同一个线程组中运行decorated测试(默认情况),那么一个非原子的压力测试仅仅等待压力测试直接派生的线程执行完毕而新生成的线程则会被忽略掉。

总之,非原子压力测试仅仅等待压力测试中直接派生的线程执行完毕来模仿多个并发用户。

Atomic Load Tests

如果多个线程规定一个decorated测试成功地执行,这意味着只有所有decorated测试中的线程执行完毕这个decorated测试才被认为是完成了。可以使用setEnforceTestAtomicity(true)来强迫执行这种测试()。这将有效地促使这种测试等待属于decorated测试的线程组的所有线程执行完毕。原子性压力测试也会把任何过早退出的线程当成是失败。如果一个线程突然崩溃,那么属于同一线程组的其他线程会立即停止执行。

如果decorated测试派生的线程属于同一个线程组,默认情况下线程执行decorated 测试,这样原子压力测试将无限期地等待派生的线程执行完毕。

总之,原子压力测试将等待所有属于同一线程组的线程执行完毕,压力测试直接派生的线程,来模仿多个用户并发。

局限性

JUnitPerf已知有以下缺陷:

·         TimedTest返回的时间是测试用例的testXXX()方法的时间,包括setUp(), testXXX()和 tearDown()三个方法的总时间,这是任何测试实例中所能提供的小的测试粒度。因此期望的时间也应该考虑set-up 和tear-down的运行时间。(译者注:或者可以自己在JUnit测试用例使用System.currentTimeMillis()方法来计算某个步骤的执行时间)

·         JUnitPerf并不是一个完整的压力和性能测试工具,并且它也不会用来取代其它类似的工具。它仅仅用来编写本地的单元性能测试来帮助开发人员做好重构。

·         The performance of your tests can degrade significantly if too many concurrent users are cooperating in a load test. The actual threshold number is JVM specific.

·         在压力测试中如果有太多的用户并发运行则测试情况会越来越糟。应该参照JVM的规范来指定用户数。

技术支持

如果您有任何关于JUnitPerf的疑问,需要改进的要求,成功的经历或者bug,或者当有新的版本发布时得到通知请发email给mike@clarkware.com。您的个人信息不会被公开。

您也可以通过邮件列表(http://groups.yahoo.com/group/junitperf/)的方式来讨论有关JUnitPerf并且在有新的版本发布时收到通知。

捐助

您可以通过购买《Pragmatic Project Automation》(http://www.pragmaticprogrammer.com/sk/auto/)一书的方式支持JUnitPerf的继续开发。

培训与指导

可以通过访问站点http://clarkware.com/courses/TDDWithJUnit.html了解有关快速地创建测试代码的方法。

这里也提供有关JUnit的指导(http://clarkware.com/mentoring.html)来帮助你改进测试。

如果想获得更多的信息请与我联系(mailto:mike@clarkware.com)。

许可信息

JUnitPerf is licensed under the BSD License.

感谢

非常感谢Ervin Varga在线程健壮性和原子性测试方面给予的帮助。他在这些方面提出使用线程组来捕获和处理线程的异常,此外在TimeTest和TestFactory中提出了如果执行时间超时则立即标识为失败的实现方式。非常感激他对JUnitPerf的亲睐和建议。

翻译

MSN:wyingquan at hotmail dot com  完成时间:2005-4-19

相关资源及参考文档

·         JUnit PrimerMike Clark, Clarkware Consulting, Inc.

本文简单阐述了如何使用JUnit测试框架来编写和运行简单的测试用例及套件。

·         Continuous Performance Testing With JUnitPerfMike Clark (JavaProNews, 2003)

本文讲解了如何编写JUnitPerf测试来不时地检查性能和可测性等情况。

·         Test-Driven Development: A Practical Guide David Astels (Prentice Hall, 2003)

包括一章由本文作者编写的如何使用JUnitPerf来持续进行性能测试。

·         Java Extreme Programming CookbookEric Burke, Brian Coyner (O@#Reilly & Associates, 2003)

其中有一张专门讲述了JUnitPerf的用法。

·         Java Tools for Extreme Programming: Mastering Open Source Tools Including Ant, JUnit, and CactusRichard Hightower, Nicholas Lesiecki (John Wiley & Sons, 2001)

包含一章描述了如何与HttpUnit一起使用JUnitPerf。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd