我在Jmeter中有一个需要循环的请求,直到找到所需的结果。我已经读了一些关于while控制器的信息,但是发现它们对看起来很重要的信息或正在使用旧版本的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次尝试后将其取消
答案 0 :(得分:1)
所以在摸索了一下我之后,我发现自己的答案似乎很好。但是我建议在将我的知识当作福音之前,先看看其他资料。
基本结构如下:
在线程中设置变量,然后创建while循环作为下一步。在While循环中,我创建了一个计数器,然后添加了我想循环的请求。为了使循环更有效,我在请求下放置了三个项目。
用户定义的变量:
这里我设置了两个变量:
同时使用控制器:
我仍然觉得我可能无法正确理解这一点,但是在进行了一次谷歌搜索之后,尽管遇到了JMeter控制台中的一些错误,但还是遇到了以下对我有用的代码:
${__javaScript(("${DONE}" != "yep" && ${Counter} < 10),)}
这段代码是说while循环将持续到满足以下两个条件之一为止:
计数器:
这是一个简单的配置步骤,一旦我了解它需要在while循环内,就可以正常工作,我配置了以下内容:
(导出的变量名称:您可以随意调用此名称,在此演示中,我将其命名为counter)
JSR223断言:
这是一个简单的脚本声明,仅使用布尔值和几个if语句来声明测试状态。
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
}