这是我想在JMeter中做的,从服务器检索xml中的数据,并继续检索直到达到一定数量。
While ( totalNumOfNodes < 1000 ) {
1. HpptRequest
2. nodeCntInResp = extract from HttpResponse
3. totalNumOfNodes += nodeCntInResp
}
我可以执行第1步和第2步,但是如何执行第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设置如下:
您可以在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 ));