为什么我可以在JMeter的裸露道具Hashtable上保存一个常规的闭包,而不是一个常规的函数呢? 问题最小示例相关

问题描述

问题

任何人都知道为什么我可以将常规的闭包保存到JMeter公开的props哈希表中,而不是常规的函数吗?

最小示例

在测试计划中,在线程组中,在脚本语言为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.&函数转换为闭包。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...