清单2.为生成TimedTest而实现的suite方法
public class ExampleTimedTest { public static final long toleranceInMillis = 100; public static Test suite() { long maxElapsedTimeInMillis = 1000 + toleranceInMillis; Test testCase = new ExampleTestCase("testOneSecondResponse"); Test timedTest = new TimedTest(testCase, maxElapsedTimeInMillis); return timedTest; } public static void main(String args[]) { junit.textui.TestRunner.run(suite()); } } |
在运行测试用例时,我设置了1秒+允许误差时间为时间上限,如果执行总时间超过了这个时间,测试样例将失败。由于我并未传入可选的boolean参数,该测试将完整运行,而不管运行会持续多久。
4.LoadTest负载测试模式
使用LoadTest,可以指定要模拟的用户(线程)数量,甚至为这些线程的启动提供计时机制。JUnitPerf提供两类Timer:ConstantTimer和RandomTimer。通过为LoadTest提供这两类计时器,可以更真实地模拟用户负载。如果没有Timer,所有线程都会同时启动。
清单3是用ConstantTimer实现的含10个模拟用户的负载测试:
public class ExampleLoadTest { public static final long toleranceInMillis = 100; public static Test suite() { TestSuite suite = new TestSuite(); // // Pick any example tests below. // suite.addTest(make1SecondResponse10UserLoad1SecondDelayIterationTest()); return suite; } protected static Test make1SecondResponse10UserLoad1SecondDelayIterationTest() { int users = 10; int iterations = 10; Timer timer = new ConstantTimer(1000); long maxElapsedTimeInMillis = 20000 + toleranceInMillis; Test testCase = new ExampleTestCase("testOneSecondResponse"); Test loadTest = new LoadTest(testCase, users, iterations, timer); Test timedTest = new TimedTest(loadTest, maxElapsedTimeInMillis); return timedTest; } public static void main(String args[]) { junit.textui.TestRunner.run(suite()); } } |
10个用户并发执行测试,间隔时间设置为1秒,各运行10次,并且设置整个场景的最大时间为20秒加允许误差时间,否则整个测试场景将失败。