使用带有Kotlin的JSR223的绑定参数失败

向JMeter添加了对Kotlin JSR223的支持,并使用Kotlin语言执行脚本

它忽略了JMeter绑定参数,因为String类型为Parameters,尝试过:

println(Parameters)

收到未解决的错误:

javax.script.ScriptException: Error: Unresolved reference: Parameters
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compile(KotlinJsr223JvmScriptEngineBase.kt:74) ~[kotlin-compiler.jar:1.3.50-release-112]
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compile(KotlinJsr223JvmScriptEngineBase.kt:35) ~[kotlin-compiler.jar:1.3.50-release-112]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:71) [ApacheJMeter_java.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]

我尝试使用$

println($Parameters)

歧义错误

2019-11-11 08:56:21,803 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler,message: javax.script.ScriptException: Error: Overload resolution ambiguity: 
@Inlineonly public inline fun println(message: Any?): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Boolean): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Byte): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Char): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: CharArray): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Double): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Float): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Int): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Long): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Short): Unit defined in kotlin.io
javax.script.ScriptException: Error: Overload resolution ambiguity: 
@Inlineonly public inline fun println(message: Any?): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Boolean): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Byte): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Char): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: CharArray): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Double): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Float): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Int): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Long): Unit defined in kotlin.io
@Inlineonly public inline fun println(message: Short): Unit defined in kotlin.io
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compile(KotlinJsr223JvmScriptEngineBase.kt:74) ~[kotlin-compiler.jar:1.3.50-release-112]
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compile(KotlinJsr223JvmScriptEngineBase.kt:35) ~[kotlin-compiler.jar:1.3.50-release-112]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:71) [ApacheJMeter_java.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]

使用[bindings] [1]作为

也失败了
 println(bindings["ctx"])

类似错误:

 javax.script.ScriptException: Error: Unresolved reference: bindings

我也尝试添加importAllBindings,但结果相同

importAllBindings(true)

JMeter的bindings代码:

 Bindings bindings = engine.createBindings();
 bindings.put("Parameters",scriptParameters); 
 ...
 CompiledScript compiledScript = compiledScriptsCache.get(newCacheKey);
 ...  
 compiledScript.eval(bindings)

如果不使用编译脚本,则错误类似

javax.script.ScriptException: Unresolved reference: Parameters
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.asJsr223EvalResult(KotlinJsr223JvmScriptEngineBase.kt:104) ~[kotlin-compiler-embeddable-1.3.50.jar:1.3.50-release-112 (1.3.50)]
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compileAndEval(KotlinJsr223JvmScriptEngineBase.kt:63) ~[kotlin-compiler-embeddable-1.3.50.jar:1.3.50-release-112 (1.3.50)]
    at kotlin.script.experimental.jvmhost.jsr223.KotlinJsr223ScriptEngineImpl.compileAndEval(KotlinJsr223ScriptEngineImpl.kt:82) ~[kotlin-main-kts.jar:1.3.50-release-112]
    at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.eval(KotlinJsr223JvmScriptEngineBase.kt:31) ~[kotlin-compiler-embeddable-1.3.50.jar:1.3.50-release-112 (1.3.50)]
    at javax.script.AbstractScriptEngine.eval(Unknown Source) ~[?:1.8.0_191]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:225) ~[ApacheJMeter_core.jar:5.1.1 r1855137]

将Scala与JSR223结合使用时,会有类似的issue

  

使用Scala引擎时,不能使用绑定参数(在其他引擎中,如beanshell,groovy,velocity等)都可以使用

qkjqkj000 回答:使用带有Kotlin的JSR223的绑定参数失败

打开一个问题KT-35113 Failed bind parameters using JSR223 with Kotlin

本文链接:https://www.f2er.com/3116776.html

大家都在问