Jmeter-在一个JSR223采样器中声明数组变量,以便在另一个JSR223Sampler中访问它 https://mrhaki.blogspot.com/2009/08/groovy-goodness-turn-methods-into.html
问题
有人知道为什么我可以将groovy闭包保存到JMeter的公开道具Hashtable,而不保存groovy函数吗?
最小示例
在一个测试计划中,在一个线程组中,在使用脚本语言Groovy 3.0.3的JSR223采样器中,我有以下最小失败示例(当粘贴到Jmeter GUI中的"script"框中或从文件名"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> ...
相关
Jmeter:如何初始化映射一次并为线程组中的所有线程共享它您可以使用以下语法将函数存储到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
只是使用方法指针运算符.&
将bernoulli
函数转换为闭包。