【问题标题】:Jmeter - while loop condition won't exitJmeter - while循环条件不会退出
【发布时间】:2018-02-08 05:01:14
【问题描述】:

尝试在脚本中构建一个小循环控制以防止它无限循环(因为不幸的是,这在 SUT 中是一种严重的可能性)

我有两件事我感兴趣:
state - “完成”是所需的状态
loopcount - 完成循环不应超过 10 个

我正在从 JSON 提取器中成功检索“状态”,并将“循环计数”定义为 While 控制器中的计数器元素。 两者都成功检索了相关信息。

我遇到的问题是我在 While 控制器中的 javascript 条件,它一直在循环。这是我的代码:

${__javaScript("${state}"!="COMPLETE"||"${loopcounter}" < 10),)}

我希望它在 state = Complete 或 loopcounter 超过 10 个循环时退出循环。

我到底做错了什么?

【问题讨论】:

    标签: javascript while-loop jmeter


    【解决方案1】:

    两个问题:

    • loopCounter 不应转换为字符串。所以去掉它周围的双引号
    • 您需要一个逻辑 AND 运算符,而不是 OR

    应该这样做:

    "${state}" != "COMPLETE" && ${loopcounter} < 10
    

    【讨论】:

    • 在每个 DO 循环退出后将计数器重置回 1 的最佳方法是什么?
    【解决方案2】:

    为了防止无限循环,您可以在Runtime Controller 下添加它并写入最大秒数。

    您可以在While Controller中检查一个部分 如${__javaScript(${loopcounter} &lt; 10),)}

    并在循环中添加If Controller并检查if的一部分为${__javaScript("${state}"!="COMPLETE")}和 1.添加Test Action停止线程 2.将loopcounter设置为大于10并添加Test Action进入下一个循环迭代并使其循环失败

    【讨论】:

      【解决方案3】:
      1. 在 JavaScript 中,strings 区分大小写,因此 CompleteCOMPLETE 是不同的野兽
      2. ${loopcounter} 变量不需要引号
      3. 我也认为您应该将|| 运算符替换为&amp;&amp; 运算符

      所以修改你的表达方式:

       ${__javaScript(("${state}"!="Complete" && ${loopcounter} < 5),)}
      

      有关详细信息,请参阅Using the While Controller in JMeter 文章。

      【讨论】:

      • 修改了我的表达式,它现在确实退出了循环,但现在出现以下错误:ERROR oajfJavaScript: Error processing Javascript [("PENDING"!="COMPLETE" && ${loopcounter}
      • 很可能您的${loopcounter} 变量未设置左右
      • 得到 javax.script.ScriptException: Expected ) 但在第 1 行第 27 列找到 {。我需要将 loopcounter 部分封装在 () 中吗?
      • 哪里最好设置 ${loopcounter} 变量?我在 While 循环中有循环计数器元素,将它放在外面会停止进程工作。我需要在我的用户定义变量中指定吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多