退出While Controller - JMeter后重置JSON Extractor参数值

时间:2018-04-27 07:58:08

标签: javascript while-loop jmeter beanshell

尝试使用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");}

以下是Jmeter树的结构。 enter image description here

  • Red Box:While Controller
  • 红色箭头点:响应变量更改
    从待定到完成和逐步进入循环2

这可能是我假设从第二个循环跳过While控制器这个问题的原因吗?
如果是;我应采取什么方法来清除变量值?

如果这不是我假设的原因,我可以获得原因和解决方案的帮助吗?

3 个答案:

答案 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”)