我做了一個“while”,它以一個以前沒有定義的變數開始,所以我做了比較:
${__javaScript(${status} == "undefined",)}如果答案為“真”,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]
但就像“錯誤”并不是真的要設定,因為如果它回傳它就是退出回圈
所以我真的不明白這個錯誤資訊,有誰知道會發生什么?
uj5u.com熱心網友回復:
Javascript 中存在語法問題
以下將在您的 while 控制器中作業
${__javaScript("${status}" == "500" || "${status}" == "undefined",)}
此外,考慮到性能,建議在 Javascript上使用__groovy或__jexl3。
javaScript 不是在 JMeter 中表現最佳的腳本語言。如果您的計劃需要大量執行緒,建議使用 __jexl3 或 __groovy 函式。
常規
${__groovy(vars.get("status")=="500" || vars.get("status")=="undefined",)}
Jexl3
${__jexl3(vars.get("status")=="500" || vars.get("status")=="undefined",)}
uj5u.com熱心網友回復:
看起來像一個復制粘貼問題:
${__javaScript("${status}" == 500 || ${status} == "undefined",)}
^ ^ ^ ^
here you have ^ and here
quotation marks you don't
500用引號將其括起來也是有意義的,否則嘗試將數字與字串進行比較時可能會出現意外行為
所有JMeter 變數及其各自的值都可以使用除錯采樣器和查看結果樹偵聽器組合進行可視化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372017.html
標籤:javascript 测试 jmeter 豆壳 jmeter-5.0
