Question
Anyone know why I can save a groovy closure to JMeter's exposed props Hashtable but not a groovy function?
Minimal example
In a test plan, in a thread group, in a JSR223 sampler with script language Groovy 3.0.3, I have the following minimal failing example (fails both when pasted into the "script" box in the Jmeter GUI or referenced from the file name "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))
Here's my expected output (in the JMeter log viewer)
props closure call: true
props function call: true
Here's the log output I'm getting
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> ...
You could store a function into
props
with the following syntax:The expression
this.&bernoulli
just converts thebernoulli
function to a closure using the method pointer operator.&
.