【发布时间】:2022-01-06 16:54:38
【问题描述】:
我做了一个“while”,它以一个之前没有定义的变量开始,所以我做了比较:
${__javaScript(${status} == "undefined",)} 如果答案是
"true" while 循环开始并工作;它运行一次并获取请求的新状态,这次的值为 == 500,因为我使用 JSON 提取器获取 API 中返回的新状态,然后 API 停止,因为状态不再未定义,现在== 500,工作得很好。但是
当我使用“或”比较进行另一次验证时:
${__javaScript("${status}" == 500 || ${status} == "undefined",)}
如果状态字段中的响应与“未定义”或“500”不同,它应该退出循环,但是当它返回“错误”时它继续运行,我查看了日志并得到以下错误:
**2021-11-29 18:05:10,029 ERROR o.a.j.f.JavaScript: Error processing Javascript: ["ERROR" == 500 || ERROR == "undefined"]
javax.script.ScriptException: ReferenceError: "ERROR" is not defined in <eval> at line number 1**
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:454) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) ~[nashorn.jar:?]
at org.apache.jmeter.functions.JavaScript.executeWithNashorn(JavaScript.java:141) [ApacheJMeter_functions.jar:5.4.1]
at org.apache.jmeter.functions.JavaScript.execute(JavaScript.java:102) [ApacheJMeter_functions.jar:5.4.1]
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:138) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:113) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:100) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.WhileController.getCondition(WhileController.java:142) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.WhileController.endOfLoop(WhileController.java:62) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.WhileController.nextIsNull(WhileController.java:85) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.GenericController.next(GenericController.java:170) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.WhileController.next(WhileController.java:117) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.GenericController.next(GenericController.java:175) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.control.LoopController.next(LoopController.java:134) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.AbstractThreadGroup.next(AbstractThreadGroup.java:91) [ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:291) [ApacheJMeter_core.jar:5.4.1]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_271]
但是像“ERROR”并不是真的要设置,因为如果它返回它就是退出循环
所以我真的不明白这个错误信息,有人知道可能发生了什么吗?
【问题讨论】:
-
在声明之前使用变量似乎很奇怪。实际代码是什么?为什么不这么定义呢?
-
typeof status === "undefined" ||状态 === 500
-
您尝试使用
"${status}" == "undefined"吗? -
"${status}" == "undefined" 是的,试过了。我已经尝试了几种变体,但都没有成功,当我没有看到如何再试一次时,我在这里玩了一下,看看是否有人会知道。
-
是我只有在运行api之后才有状态,api返回一个状态,比如“500”,或者“成功”或“错误”,我已经声明了,虽然它是500 它应该继续运行,但是 api 在循环内然后循环没有启动,因为它没有“状态”的值,当我修复“状态 == 500”时,它是循环之前的变量,即使在循环内更新了状态,它也采用变量的固定值,而不是新状态,所以我想定义即使状态尚未设置,它也会启动。
标签: javascript testing jmeter beanshell jmeter-5.0