【问题标题】:Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: ReferenceError: "setTimeout" is not definedJSR223 脚本 JSR223 Sampler 中的问题,消息:javax.script.ScriptException: ReferenceError: "setTimeout" is not defined
【发布时间】:2021-09-07 16:53:34
【问题描述】:

我有一个要求,我需要运行 JS 文件来获取令牌。 JS 文件引用了浏览器加载时可用的变量,例如“window”、“setTimeout”函数。

但是我需要加载这个 Jmeter 并提取令牌。问题是 JSR233 说它没有引用“window”或“setTimeout”函数(否则在浏览器中可用)。

当我运行它时,我收到以下错误。有什么方法可以让我们在 Jmeter 中处理这些函数。

021-06-24 13:11:08,246 错误 o.a.j.p.j.s.JSR223Sampler:存在问题 JSR223 脚本 JSR223 采样器,消息:javax.script.ScriptException: ReferenceError:“setTimeout”未定义在 /Users/pprabhak/performance/apache-jmeter-5.4.1/bin/BehaviorAnalytics-2.2.0.min.js 在第 12 行 javax.script.ScriptException: ReferenceError: “setTimeout”未定义在 /Users/pprabhak/performance/apache-jmeter-5.4.1/bin/BehaviorAnalytics-2.2.0.min.js 在第 12 行 jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:477) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:433) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.api.scripting.NashornScriptEngine$3.eval(NashornScriptEngine.java:521) ~[jdk.scripting.nashorn:?] 在 javax.script.CompiledScript.eval(CompiledScript.java:89) ~[java.scripting:?] 在 org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.4.1] 在 org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72) [ApacheJMeter_java.jar:5.4.1] 在 org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:638) [ApacheJMeter_core.jar:?] 在 org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558) [ApacheJMeter_core.jar:?] 在 org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:?] 在 org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:?] 在 java.lang.Thread.run(Thread.java:834) [?:?] 引起:jdk.nashorn.internal.runtime.ECMAException: ReferenceError:“setTimeout”未定义在 jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.objects.Global.noSuchProperty(Global.java:1616) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.scripts.Script$Recompilation$21736$268435452$BehaviorAnalytics_2_2_0_min$cu10$restOf.VAAP$:split-2(/Users/pprabhak/performance/apache-jmeter-5.4.1/bin/BehaviorAnalytics-2.2.0. min.js:12) ~[?:?] 在 jdk.nashorn.internal.scripts.Script$重新编译$17386$73052$BehaviorAnalytics_2_2_0_min.VAAP(/Users/pprabhak/performance/apache-jmeter-5.4.1/bin/BehaviorAnalytics-2.2.0.min.js:1) ~[?:?] 在 jdk.nashorn.internal.scripts.Script$Recompilation$17388$BehaviorAnalytics_2_2_0_min$cu1$restOf.:program(/Users/pprabhak/performance/apache-jmeter-5.4.1/bin/BehaviorAnalytics-2.2.0.min.js:1 ) ~[?:?] 在 jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:655) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.Context.evaluateSource(Context.java:1438) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.Context.load(Context.java:962) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.objects.Global.load(Global.java:1720) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.scripts.Script$重新编译$17383$^eval_/0x0000000800b68040.:program(:3) ~[?:?] 在 jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:655) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527) ~[jdk.scripting.nashorn:?] 在 jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:428) ~[jdk.scripting.nashorn:?] ... 9 更多 2021-06-24 13:11:08,249 信息 o.a.j.t.JMeterThread:线程已完成:线程组 1-1

【问题讨论】:

  • 这可能是因为 JMeter JSR 223 Sampler 不是 Web 浏览器环境。像window 这样的对象被浏览器暴露了

标签: jmeter jmeter-5.0


【解决方案1】:

Window 对象与网络浏览器密切相关,您将无法在 JSR223 测试元素中使用。

有两种处理方式:

  1. 使用WebDriver Sampler plugin

  2. 在 JSR223 测试元素中复制 JavaScript 文件的逻辑(注意 Groovy language is recommended for scripting),如果脚本需要一些参数,您应该能够使用 JMeter 的 Post-Processors 从之前的响应中获取它们

【讨论】:

  • 谢谢,我会检查这个
  • 我是 JS 新手,因此请告诉我以下是否有效。 WDS.vars.put('VAAP', "/Users/<user>/performance/apache-jmeter-5.4.1/bin/Analytics-2.2.0.min.js")
  • 我可以“加载”来加载这个 JS。但我以同样的问题结束,说“窗口”不可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2020-05-30
  • 2023-03-04
  • 2017-10-26
  • 1970-01-01
  • 2014-03-03
相关资源
最近更新 更多