我正在使用以下参数执行负载测试:
threads=4
ramp_up_period=90
loop_count=60
所以根据上面的数字,我的假设是四个线程中的每一个都将在22.25秒内创建,这4个线程周期将重复60次。
以下是负载测试汇总报告:
根据JMeter手册的提升期是:
加速期告诉JMeter需要多长时间才能“加速”到所选的全部线程数。如果使用了10个线程,那么就是上升 时间是100秒,然后JMeter需要100秒才能获得全部10个 线程正在运行。每个线程将启动10(100/10)秒 在上一个线程开始之后。如果有30个线程和一个 加速120秒,然后每个连续的线程将 延迟了4秒。
因此,根据上述情况,使用上述线程组参数执行负载测试的大致总时间为:
TotalTime = ramp_up_period * loop_count
在我的情况下评估为90 * 60 = 5400秒,但根据总结时间总计时间 74秒
JMeter版本为2.11
。
我的理解是否有任何问题或JMeter存在问题?
答案 0 :(得分:0)
如果您没有并发工作,那么TotalTime就是这样。在多线程环境中工作时,当线程3仍在启动时,线程1可能已经执行了第二次调用。
答案 1 :(得分:0)
最初,JMeter将启动1个线程,它将执行某些操作,该线程位于Loop Controller下。在30秒内第二个线程将加入,在30秒内第三个线程将启动,最后在第90个第二个线程将启动。
从90秒开始,4个线程将执行“循环控制器下的内容”。
无法确定需要多长时间,特别是在负载下。如果您需要持续大约N秒的负载测试,则可以在Thread Group的Duration
下使用Sheduler
输入。
如果您想在某些条件满足时强行停止测试,还有2个选项:
示例Beanshell代码(假设在无限循环中以单独的线程组运行,并且在触发事件之间有合理的延迟)
if (currenttime - teststart > Long.parseLong(props.get("test_run_time").toString())) {
try {
DatagramSocket socket = new DatagramSocket();
byte[] buf = "StopTestNow".getBytes("ASCII");
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
socket.send(packet);
socket.close();
} catch (Throwable ex) {
}
}