Javascript Jmeter-当循环条件无效时';t出口

Javascript Jmeter-当循环条件无效时';t出口,javascript,while-loop,jmeter,Javascript,While Loop,Jmeter,试图在脚本中构建一个小循环控件以防止它无限循环(因为不幸的是,在SUT中这是一个严重的可能性) 我有两件事感兴趣: 状态-“完成”是所需的状态 loopcount-完成循环不应超过10个 我正在从JSON提取器成功检索“state”,并已将“loopcount”定义为While控制器中的计数器元素。 两者都成功地检索到了相关信息 我的问题是我的javascript条件在While控制器中,它一直在循环。这是我的代码: ${__javaScript("${state}"!="COMPLETE"||

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

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

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

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

${__javaScript("${state}"!="COMPLETE"||"${loopcounter}" < 10),)}
${uuu javaScript(${state}”!=“COMPLETE”| |“${loopcounter}”<10),)}
我希望它在state=Complete或loopcounter超过10个循环时退出循环

我到底做错了什么?

两个问题:

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

"${state}" != "COMPLETE" && ${loopcounter} < 10
“${state}”!=“完成”&&${loopcounter}<10

为了防止无限循环,您可以将其添加到下面,并写入最大秒数

您可以在控制器运行时签入一个部件 作为
${uuu javaScript(${loopcounter}<10),)}

并在循环中添加
If控制器
,并检查If的一部分作为
${{uuu javaScript(${state}”!=“COMPLETE”)}
和 1.添加
测试操作
以停止线程 2.将loopcounter设置为大于10,并添加
测试操作
,以转到下一个循环迭代,并使其失败循环

  • 在JavaScript中是区分大小写的,所以
    Complete
    Complete
    是不同的
  • ${loopcounter}
    变量周围不需要引号
  • 我还认为应该用
    &
    运算符替换
    |
    运算符
  • 因此,请将您的表达式修改为:

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

    有关更多详细信息,请参阅文章

    已经修改了我的表达式,现在它确实退出了循环,但是现在得到了以下错误:error o.a.j.f.JavaScript:error processing JavaScript[(“PENDING”!=“COMPLETE”&&&${loopcounter}<5)]很可能您的
    ${loopcounter}
    变量没有设置,或者随后我得到了javax.script.ScriptException:Expected)但找到了{在第1行第27列。是否需要在()中封装loopcounter部分?在哪里最好设置${loopcounter}变量?我在While循环中设置了循环计数器元素,将其放置在外部会停止进程工作。是否需要在用户定义的变量中指定?在每个Do循环退出后,将计数器重置回1的最佳方法是什么?