微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么我可以在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.&函数转换为闭包。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。