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 ));
这就是我想在 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 ));