如何在JMeter中实现起搏?

如何在JMeter中实现起搏?,jmeter,Jmeter,我要在jMeter中模拟以下场景: 10个用户(ThreadGroup)正在登录,每个用户(ThreadGroup)应等待/延迟10秒以启动下一个用户(ThreadGroup)。我如何实现这一点 现在我有这样的事情: 螺纹组(10usrs) Http采样器请求(登录) Http采样器请求(LookUpStatement) Http采样器请求(控制面板) Http采样器请求(CapAvailableList) Http采样器请求(LoadAllChatCount) Http采样器请求(Retur

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

现在我有这样的事情:

螺纹组(10usrs)

  • Http采样器请求(登录)
  • Http采样器请求(LookUpStatement)
  • Http采样器请求(控制面板)
  • Http采样器请求(CapAvailableList)
  • Http采样器请求(LoadAllChatCount)
  • Http采样器请求(ReturnNotificationCount)
  • 计时器(10秒)
我应该使用哪个计时器?恒定吞吐量计时器或步进吞吐量计时器 是否有可能或者我必须使用一些变通方法? 非常感谢您对教程或链接的任何帮助。

您可以使用“步进线程组”每秒启动一个新用户(最多10个用户)

如果您只需要在每个请求之间创建一个计时器,那么设置一个常量计时器就可以了。(尽管我更喜欢高斯随机定时器)

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


最好,

您可以将测试动作采样器与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;
    }
    

  • 使用测试动作JSR223定时器在开始(JSR定时器是开始,因为它所做的一切都是设置开始时间)和主循环的结束(您希望为其保持配速),并使用下面的代码来实现间隔配速。测试操作中的操作应设置为暂停
    0ms

    还创建一个名为
    packing
    的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;
    }