尝试使用JMeter创建请求,其中请求必须重试,直到响应的JSON变量($。result.status )满足预期结果。详细地说,请求应该重试,直到变量的值从“挂起”状态变为“已完成”。
为此我已经习惯了具有以下JS条件的While Controller。它在第一次迭代/循环中完美运行,并在resultStatus变为“completed”后退出While-Controller
${__javaScript("${resultStatus}" == "pending" || "${resultStatus}" != "completed" || "${resultStatus}" == "" )}
但是,从第二个循环开始,While-Controller被跳过了。
我认为原因是因为 resultStatus 变量被分配到“completed”以及第一个循环中While-Controller的退出并保持原样第二个循环中的While控制器。因此情况变得虚假。。
有了这个假设,我在While-Controller中为BeanShellPostProcessor尝试了 vars.remove ,其中包含以下代码片段。但它没有解决我的问题。
String x = vars.get("resultStatus");
if ( x == "completed"){
vars.remove("resultStatus", "completed");}
这可能是我假设从第二个循环跳过While控制器这个问题的原因吗?
如果是;我应采取什么方法来清除变量值?
如果这不是我假设的原因,我可以获得原因和解决方案的帮助吗?
答案 0 :(得分:1)
使用JSR223 Sampler将值重置为预期的其他值。
-TestPlan
- while循环
--- JSR223
在JSR223中使用以下内容: -
vars.put("resultStatus","Reset")
希望得到这个帮助。
答案 1 :(得分:1)
remove方法只获得1个参数,即密钥
remove(java.lang.String key)
因此您的语法错误,也使用equals方法比较String,使用:
String x = vars.get("resultStatus");
if ( "completed".equals(x) ){
vars.remove("resultStatus");
}
答案 2 :(得分:0)
JSR223采样器将解决前面的评论中提到的问题。只需消除混乱,重置不会更改状态,我们应该使用所需的值,我们希望变量使用来更新。
以下是来自Java文档的信息 put(字符串键,字符串值) 创建或更新具有字符串值的变量。
在我的情况下,以下解决方案对我有用 vars.put(“ status”,“ PENDING”)