JMeter While Controller - 如何增加变量

JMeter While Controller - how to increment the variable

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

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

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

我相信第 3 点 __intSum 函数就是您要找的。

根据 How to Use JMeter Functions 指南:

The __intSum function is trivial but it can be very useful for instances when the sum of two or more integers (increment or decrement) is required.

Examples:

${__intSum(1,5,)} - will return 6
${__intSum(1,5,8)} - will return 14
${__intSum(1,5,8,SUM)} - will return 14 and store it to SUM variable
${__intSum(10,-5)} - will return 5
${__intSum(${A},${B})} - will return an evaluation of A and B variables integer representation sum, which can be handy for Counter value processing.

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

之间的随机数

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

我的 BeanShell 后处理器脚本如下所示:

    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 测试文件

Beanshell脚本怎么样:

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