我有以下场景在jMeter中模拟: 10个用户(ThreadGroup)正在登录,每个用户(ThreadGroup)应等待/延迟10秒以启动下一个用户(ThreadGroup)。我该如何实现呢?
现在我有这样的事情:
线程组(10usrs)
我应该使用哪个计时器?恒定吞吐量定时器或步进吞吐量定时器 它甚至可能还是我必须使用一些解决方法? 任何有关教程或链接的帮助都非常感激。
答案 0 :(得分:4)
您可以使用“Stepping Thread Group”每秒启动一个新用户(最多10个用户) http://jmeter-plugins.org/wiki/SteppingThreadGroup/
如果你只需要在每个请求之间创建一个定时器,那么放置一个Constant Timer就可以了。 (虽然我更喜欢高斯随机定时器)
恒定吞吐量计时器将创建一个动态延迟时间来限制脚本产生的命中率 - 我不认为这就是你的意思。
最佳,
答案 1 :(得分:1)
您可以将测试操作采样器与beanshell计时器一起使用。在下面的步骤中,我们使用4500毫秒的起搏。无论先前请求花了多少时间,它都将应用剩余时间。如果请求花费1000毫秒,它将应用4500-1000 = 3500毫秒作为调步。
${mydelay}
右键单击测试操作采样器>添加>定时器> Beanshell计时器。粘贴以下代码。
Long pacing = 4500 - prev.getTime();
if (pacing > 0) {
Integer iPacing = pacing != null ? pacing.intValue() : null;
log.info(String.valueOf(iPacing));
vars.put("mydelay", String.valueOf(iPacing));
return iPacing;
} else {
vars.put("mydelay", "0");
return 0;
}
答案 2 :(得分:0)
在开始时将 Test Action 与 JSR223计时器一起使用(JSR计时器实际上并不是必需的开始,因为它的所有工作都设置了开始时间)和结束要保持步调的主循环,并使用下面的代码实现间隔调整。在0ms
的持续时间内,应将“测试中的操作”设置为“暂停”。
还要创建一个名为pacing
的JMeter变量,该变量应包含所需的起搏值。
在测试操作下的 JSR223计时器中使用以下代码。
/**
* PACING START
* Set the start time for pacing calculation
*
*/
def d = new Date()
try {
vars.put("pacingStartTime", "${d.getTime()}")
return 1
}
catch (Exception e) {
log.warn("[ Pacing: Failed to set the start time ]", e)
throw e;
}
最后在计时器中使用以下内容。
/**
* PACING END
* Calculate the pacing and apply // return!
*
*/
def d = new Date()
try {
def pacing = Long.parseLong(vars.get("pacing")) // get the required pacing value from jmeter variable.
String startTime = vars.get("pacingStartTime") // get the start time which was set in the beginning of the loop
def diff = d.getTime() - Long.parseLong(startTime) // current time minus start time
def sleep = pacing > diff ? pacing - diff : 0 // logic for sleep time
log.info("[ Pacing: ${pacing}ms, Remaining time: ${sleep}ms ]")
return sleep
}
catch (Exception e) {
return 1000
log.warn("[ Pacing: Failed to calculate pacing ]", e)
throw e;
}