追求代码质量: 用 JUnitPerf 进行性能测试
2009-11-19 00:00:00 来源:WEB开发网也可以选择传入一个 boolean 标志作为第三个参数(false),这将导致测试快速失败 —— 意味着如果超过最大时间,JUnitPerf 将立即 迫使测试失败。否则,测试样例将完整运行,然后失败。区别很微妙:在一个失败的样例中,不带可选标志运行测试可以帮您了解运行总时间。传入 false 值却意味着得不到运行总时间。
例如,在清单 2 中,我在运行 testCreate() 时设定了一个两秒钟的上限。如果执行总时间超过了这个时间,测试样例将失败。由于我并未传入可选的 boolean 参数,该测试将完整运行,而不管运行会持续多久。
清单 2. 为生成 TimedTest 而实现的 suite 方法public static Test suite() {
long maxElapsedTime = 2000; //2 seconds
Test timedTest = new TimedTest(
new WidgetDAOImplTest("testCreate"), maxElapsedTime);
return timedTest;
}
此测试通常在 JUnit 框架中运行 —— 现有的 Ant 任务、Eclipse 运行器等等,会像运行任何其他 JUnit 测试一样运行这个测试。惟一的不同是,该测试将发生在计时器的上下文中。
过度的负载测试
与在测试场景中验证一个方法(或系列方法)的时间限制正好相反,JUnitPerf 也方便了负载测试。正如在 TimedTest 中一样,JUnitPerf 的 LoadTest 也像装饰器一样运行,它通过将 JUnit Test 和额外的线程信息绑定起来,从而模拟负载。
使用 LoadTest,可以指定要模拟的用户(线程)数量,甚至为这些线程的启动提供计时机制。JUnitPerf 提供两类 Timer:ConstantTimer 和 RandomTimer。通过为 LoadTest 提供这两类计时器,可以更真实地模拟用户负载。如果没有 Timer,所有线程都会同时启动。
更多精彩
赞助商链接