为什么我可以将 groovy 闭包保存到 JMeter 的公开道具哈希表而不是 groovy 函数?
why I can save a groovy closure to JMeter's exposed props Hashtable but not a groovy function?
问题
有人知道为什么我可以将 groovy 闭包保存到 JMeter 公开的 props 哈希表而不是 groovy 函数吗?
最小示例
在一个测试计划中,在一个线程组中,在一个使用脚本语言 Groovy 3.0.3 的 JSR223 采样器中,我有以下最小的失败示例(当粘贴到Jmeter GUI 或从文件名“test.groovy”引用):
def bern = { p -> Math.random() < p }
props.put("bern", bern)
closure = props.get("bern")
log.warn("props closure call: " + closure(1.0))
def bernoulli (double p) {
Math.random() < p
}
props.put("bernoulli", bernoulli)
funct = props.get(bernoulli)
log.warn("props function call: " + funct(1.0))
这是我的预期输出(在 JMeter 日志查看器中)
props closure call: true
props function call: true
这是我得到的日志输出
props closure call: true
...text
Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptExecution:
groovy.lang.MissingPropertyException: No such property bernoulli for class:
Script<jmeter generated groovy script number> ...
相关
您可以使用以下语法将函数存储到 props
中:
// def props = [:]
def bernoulli (double p) {
Math.random() < p
}
props.put("bernoulli", this.&bernoulli)
funct = props.get("bernoulli")
println funct(1.0)
表达式 this.&bernoulli
只是使用 method pointer operator .&
.
将 bernoulli
函数转换为闭包
问题
有人知道为什么我可以将 groovy 闭包保存到 JMeter 公开的 props 哈希表而不是 groovy 函数吗?
最小示例
在一个测试计划中,在一个线程组中,在一个使用脚本语言 Groovy 3.0.3 的 JSR223 采样器中,我有以下最小的失败示例(当粘贴到Jmeter GUI 或从文件名“test.groovy”引用):
def bern = { p -> Math.random() < p }
props.put("bern", bern)
closure = props.get("bern")
log.warn("props closure call: " + closure(1.0))
def bernoulli (double p) {
Math.random() < p
}
props.put("bernoulli", bernoulli)
funct = props.get(bernoulli)
log.warn("props function call: " + funct(1.0))
这是我的预期输出(在 JMeter 日志查看器中)
props closure call: true
props function call: true
这是我得到的日志输出
props closure call: true
...text
Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptExecution:
groovy.lang.MissingPropertyException: No such property bernoulli for class:
Script<jmeter generated groovy script number> ...
相关
您可以使用以下语法将函数存储到 props
中:
// def props = [:]
def bernoulli (double p) {
Math.random() < p
}
props.put("bernoulli", this.&bernoulli)
funct = props.get("bernoulli")
println funct(1.0)
表达式 this.&bernoulli
只是使用 method pointer operator .&
.
bernoulli
函数转换为闭包