【问题标题】:JMeter While Controller - how to increment the variableJMeter While Controller - 如何增加变量
【发布时间】:2015-04-21 04:26:42
【问题描述】:

这就是我想在 JMeter 中做的事情,从服务器检索 xml 中的数据,然后继续检索直到达到某个数字。

While ( totalNumOfNodes < 1000 ) {
   1. HpptRequest
   2. nodeCntInResp = extract from HttpResponse
   3. totalNumOfNodes += nodeCntInResp
} 

我可以执行第 1 步和第 2 步,但如何执行第 3 步?我应该为此使用什么元素?

【问题讨论】:

  • 你应该使用Loop controller
  • 看起来你的迭代次数不固定,如果是这样,你应该为totalNumOfNodes维护一个变量,在解析HttpResponse后更新它,并使用一个While Controller,它应该配置为stop条件totalNumOfNodes &lt; 1000
  • 我真正想知道的是 ..“解析 HttpResponse 后更新它”从您的友好回答中... :) 这是我可以使用 Bean Shell Sampler 做的事情吗??
  • 来晚了,无法给出详细的答复,希望您能得到需要的答复,不然我早上去接。我认为 shell 采样器不是必需的,这可以使用自定义的用户定义变量 totalNumOfNodes 来完成,您可以在从 HttpResponse 提取计数后递增该变量。条件类似于${totalNumOfNodes} &lt;1000
  • 我已经添加了一个答案,希望对您有所帮助。 Bean Shell 确实是一个不错的选择

标签: variables jmeter increment


【解决方案1】:

Beanshell 脚本怎么样:

long number = Long.parseLong(vars.get("totalNumOfNodes ")); 
totalNumOfNodes = totalNumOfNodes + nodeCntInResp ;
vars.put("number", String.valueOf(totalNumOfNodes ));

【讨论】:

    【解决方案2】:

    我对此进行了测试,使用 BeanShell PostProcessor 是一个不错的选择。对于我的测试,我使用 random.org 来获得一个随机数,用于模拟 nodeCntInResp 例如下面的链接将给出一个介于 1 到 300 之间的随机数

    https://www.random.org/integers/?num=1&min=1&max=300&col=1&base=10&format=plain&rnd=new

    我的 BeanShell PostProcessor 脚本如下所示:

        response = prev.getResponseDataAsString();
        vars.put("incrementBy", response);
        try {
             int incrementNum = 0; 
             try {
              incrementNum = Integer.parseInt(vars.get("incrementBy").trim());
             } catch(Exception ex) {
                //Ignore
             }
             int totalIterNum = Integer.parseInt(vars.get("TotalIter").trim());
            int newIterCount = incrementNum + totalIterNum;
            vars.put("TotalIter", String.valueOf(newIterCount));
            log.warn("Value from HTTP Response: " + incrementNum);
            log.warn("Total Iterations Value: " + newIterCount);
            if(newIterCount > 1000) {
                vars.put("TERMINATE_COND", "FALSE");
            }
        }catch (Exception ex) {
            log.warn("Error in my script", ex);
            throw ex;
        }
    

    While 控制器配置了条件:${TERMINATE_COND},一旦总迭代次数超过 1000,我在上面的脚本中将其设置为 FALSE

    我的 jmeter 设置如下:

    您可以在this link 找到使用 Jmeter 2.11 完成的上述测试的示例 jmeter 测试文件

    【讨论】:

    • 非常感谢!!!它工作正常......我是 jmeter 的新手......它比我预期的更冗长...... :)
    • 不客气。如果对您有帮助,请采纳答案。
    • 我的脚本中的一些冗长只是为了调试和错误处理,如果你相信你的数据,你可以消除大部分。 random.org 正在抛出 SocketExceptions,所以我不得不将它包装在 try/catch 中
    【解决方案3】:

    我相信对于第 3 点 __intSum 函数是您正在寻找的。​​p>

    根据How to Use JMeter Functions 指南:

    __intSum 函数很简单,但对于需要两个或多个整数之和(增量或减量)的实例非常有用。

    例子:

    ${__intSum(1,5,)} - 将返回 6
    ${__intSum(1,5,8)} - 将返回 14
    ${__intSum(1,5,8,SUM)} - 将返回 14 并将其存储到 SUM 变量
    ${__intSum(10,-5)} - 将返回 5
    @ 987654328@ - 将返回对 A 和 B 变量整数表示和的求值,这对于 Counter 值处理很方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2015-09-21
      相关资源
      最近更新 更多