如何在JMeter中实现调步?

时间:2013-12-03 07:12:47

标签: jmeter

我有以下场景在jMeter中模拟: 10个用户(ThreadGroup)正在登录,每个用户(ThreadGroup)应等待/延迟10秒以启动下一个用户(ThreadGroup)。我该如何实现呢?

现在我有这样的事情:

线程组(10usrs)

  • Http Sampler Request(LogIn)
  • Http Sampler Request(LookUpStatement)
  • Http Sampler Request(ControlPanel)
  • Http Sampler Request(CapAvailableList)
  • Http Sampler Request(LoadAllChatCount)
  • Http Sampler Request(ReturnNotificationCount)
  • 计时器(10秒)?

我应该使用哪个计时器?恒定吞吐量定时器或步进吞吐量定时器 它甚至可能还是我必须使用一些解决方法? 任何有关教程或链接的帮助都非常感激。

3 个答案:

答案 0 :(得分:4)

您可以使用“Stepping Thread Group”每秒启动一个新用户(最多10个用户) http://jmeter-plugins.org/wiki/SteppingThreadGroup/

如果你只需要在每个请求之间创建一个定时器,那么放置一个Constant Timer就可以了。 (虽然我更喜欢高斯随机定时器)

恒定吞吐量计时器将创建一个动态延迟时间来限制脚本产生的命中率 - 我不认为这就是你的意思。

最佳,

答案 1 :(得分:1)

您可以将测试操作采样器与beanshell计时器一起使用。在下面的步骤中,我们使用4500毫秒的起搏。无论先前请求花了多少时间,它都将应用剩余时间。如果请求花费1000毫秒,它将应用4500-1000 = 3500毫秒作为调步。

  1. 添加测试操作采样器  在“持续时间(毫秒)”字段中,将值设置为${mydelay}
  2. 右键单击测试操作采样器>添加>定时器> 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;
}