JMeter While Controller - 如何增加变量

时间:2015-04-21 04:26:43

标签: variables jmeter increment

这是我想在JMeter中做的,从服务器检索xml中的数据,并继续检索直到达到一定数量。

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

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

3 个答案:

答案 0 :(得分:1)

我相信对于第3点__intSum功能是您正在寻找的功能。

根据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
  ${__intSum(${A},${B})} - 将返回A和B变量的整数表示和的评估,这对于Counter值处理可以很方便。

答案 1 :(得分:1)

我对此进行了测试,使用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设置如下: enter image description here

您可以在this link

找到Jmeter 2.11完成上述测试的样本jmeter测试文件

答案 2 :(得分:1)

Beanshell脚本怎么样:

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