【问题标题】:How to implement pacing in JMeter?如何在 JMeter 中实现起搏?
【发布时间】:2013-12-03 07:12:47
【问题描述】:

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

现在我有这样的东西:

线程组(10usrs)

  • Http 采样器请求(登录)
  • Http 采样器请求(LookUpStatement)
  • Http 采样器请求(控制面板)
  • Http 采样器请求(CapAvailableList)
  • Http 采样器请求(LoadAllChatCount)
  • Http 采样器请求(ReturnNotificationCount)
  • 定时器(10 秒)?

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

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    您可以使用“步进线程组”每秒启动一个新用户(最多 10 个用户) http://jmeter-plugins.org/wiki/SteppingThreadGroup/

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

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

    最好的,

    【讨论】:

      【解决方案2】:

      您可以为此使用测试操作采样器和 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;
        }
        

      【讨论】:

        【解决方案3】:

        使用 Test ActionJSR223 Timer 在开头(JSR 计时器并不是真正需要的开头,因为它所做的只是设置开始时间)和结尾您想要保持节奏的主循环,并使用下面的代码来实现间隔节奏。测试操作中的操作应设置为在0ms 期间暂停。

        还创建一个名为pacing 的JMeter 变量,它应该包含您需要的起搏值。 在 Test Action 下的 JSR223 Timer 中使用以下代码。

        /**
        * 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;
        }
        

        【讨论】:

          猜你喜欢
          • 2018-06-23
          • 1970-01-01
          • 1970-01-01
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 2016-11-13
          • 2010-11-12
          • 2021-12-25
          相关资源
          最近更新 更多