在JMeter中,如何循环直到找到结果

在JMeter中,如何循环直到找到结果,jmeter,Jmeter,我在Jmeter中有一个请求,需要循环,直到找到我要查找的结果。我读过一些关于while controller的文章,但发现它们毫无用处,因为它们似乎浏览了重要信息,或者正在使用较旧版本的Jmeter 我目前使用的是Jmeter 5.0,我试图实现一个while控制器,但失败了,因为我认为我不知道如何正确处理响应,甚至不知道如何获取响应,然后使用它作为比较来断言该项是否存在 我从HTTP请求调用响应中得到一个响应,看起来有点像这样: {"data":{"getIDs":{"Page": 1,"P

我在Jmeter中有一个请求,需要循环,直到找到我要查找的结果。我读过一些关于while controller的文章,但发现它们毫无用处,因为它们似乎浏览了重要信息,或者正在使用较旧版本的Jmeter

我目前使用的是Jmeter 5.0,我试图实现一个while控制器,但失败了,因为我认为我不知道如何正确处理响应,甚至不知道如何获取响应,然后使用它作为比较来断言该项是否存在

我从HTTP请求调用响应中得到一个响应,看起来有点像这样:

{"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)
而控制器:

尽管JMeter控制台中出现了一些错误,但我仍然觉得我可能无法正确理解这一点,但在谷歌搜索之后,我发现以下代码对我有效:

${__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
}