在JMeter中,如何循环直到找到结果
我在Jmeter中有一个请求,需要循环,直到找到我要查找的结果。我读过一些关于while controller的文章,但发现它们毫无用处,因为它们似乎浏览了重要信息,或者正在使用较旧版本的Jmeter 我目前使用的是Jmeter 5.0,我试图实现一个while控制器,但失败了,因为我认为我不知道如何正确处理响应,甚至不知道如何获取响应,然后使用它作为比较来断言该项是否存在 我从HTTP请求调用响应中得到一个响应,看起来有点像这样:在JMeter中,如何循环直到找到结果,jmeter,Jmeter,我在Jmeter中有一个请求,需要循环,直到找到我要查找的结果。我读过一些关于while controller的文章,但发现它们毫无用处,因为它们似乎浏览了重要信息,或者正在使用较旧版本的Jmeter 我目前使用的是Jmeter 5.0,我试图实现一个while控制器,但失败了,因为我认为我不知道如何正确处理响应,甚至不知道如何获取响应,然后使用它作为比较来断言该项是否存在 我从HTTP请求调用响应中得到一个响应,看起来有点像这样: {"data":{"getIDs":{"Page": 1,"P
{"data":{"getIDs":{"Page": 1,"PageSize": 25,"PageCount": 1,"isFirstPage": true,"batches":[{"id":"b601a257-13fe-4de3-b779-a5922e89765a"},{"id":"b601a257-13fe-4de3-b779-a5922e89765b"},{"id":"b601a257-13fe-4de3-b779-a5922e89765c"}]}}
我需要回忆端点,直到找到我要查找的ID,或者在尝试10次后取消。因此,经过一番摸索,我找到了自己的答案,似乎效果不错。但我建议在把我的作为福音之前先看看其他的资料 基本结构如下所示: 在一个线程中,我设置变量,然后创建while循环作为下一步。在While循环中,我创建了一个计数器,然后添加了我想要循环的请求。为了使循环为我工作,我在请求下有三个项目
- 响应断言:此项检查的状态为200,因为调用永远不会失败
- 恒定计时器:端点轮询之间存在延迟
- JSR223断言:使用的groovy代码确保处理while循环逻辑
- DONE:DONE是一个字符串值,如果我的JSR223断言在HTTP请求中找到了我要查找的值,我会更改它
- MyValue(这在我的实际测试中是动态驱动的,出于演示目的,我只是声明一个要查找的值,即12345)
${__javaScript(("${DONE}" != "yep" && ${Counter} < 10),)}
import org.apache.commons.lang3.StringUtils;
def done = vars.get("DONE");
String response = prev.getResponseDataAsString(); //retrieves the http request response as text
String MyValue = vars.get("MyValue");
def counter = vars.get("Counter");
//Find Substring within response string and stor result as boolean
String container = response;
String content = MyValue;
boolean containerContainsContent = StringUtils.containsIgnoreCase(container, content);
//Check if the true condition is met and change the value so the loop exits
if (containerContainsContent == true){
log.info("------------------------Got Here");
vars.put("DONE", "yep");
}
//Force test to fail after 10 loops
if (Counter.toString() == "10"){
assert 1 == 2
}