【问题标题】:Jmeter - How to keep trying the same request until it succeedsJmeter - 如何继续尝试相同的请求直到它成功
【发布时间】:2018-09-19 22:09:32
【问题描述】:

所以现在我在 while 控制器下有我的 http 请求,并且我有一个用户定义的变量 Failure 设置为 true。我希望 jmeter 继续尝试这个请求,直到它成功(没有返回 500)。 我的while循环条件是:

${__javaScript(${Failure})} 

我也尝试将 ${Failure} 作为 while 条件,但得到了相同的结果。

我在结果树之后有一个 JSR223 断言,如下所示:

if (ResponseCode.equals("500") == true) {
    vars.put("Failure", true)
}
else { 
    vars.put("Failure", false)
}

当我运行它时,即使我的请求成功了,我也进入了无限循环。似乎Failure 值从未更新。对此的任何建议将不胜感激。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    这是因为您试图将Boolean 对象添加到需要String 的函数中。为了能够将布尔值存储到 JMeter 变量中,您需要使用 vars.putObject() 函数,例如:

    vars.putObject("Failure", true)
    

    或用引号将true 括起来,这样它在Groovy 中看起来就像一个字符串:

    vars.put("Failure", "true"); 
    
    1. 将您的 JSR223 断言代码修改为如下所示:

      if (ResponseCode.equals("500")) {
          vars.put("Failure", "true")
      }
      else { 
          vars.put("Failure", "false")
      }
      
    2. 将您的 While Controller 条件修改为 ${Failure}。使用 JavaScript 是一种性能反模式,如果你需要执行一些脚本 - 去Groovy。特别是您的情况,您可以只使用${Failure} 变量作为条件,它可以是truefalse

    【讨论】:

    • 感谢 Dmitri,我按照您的建议更新了我的断言和 while 条件,但是失败的值仍然保持不变,并且我的循环仍在无限进行,而响应返回 404 这应该会导致失败的值发生变化为假。
    【解决方案2】:

    我终于让它工作了。在我的 JSR233 断言中,我将其更新为:

    if (prev.getResponseCode().equals("500")) {
        vars.put("Failure", "true")
    }
    else { 
        vars.put("Failure", "false")
    }
    

    现在可以使用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2021-11-10
      • 1970-01-01
      • 2021-06-04
      • 2022-01-04
      • 2020-09-17
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多