我需要在Apache jmeter项目中的两个线程组之间共享一些变量。我发现变量不能在线程组之间共享,我必须使用属性。我在第一个线程组的JSR223预处理器内编写了以下脚本,以设置属性值。它毫无例外地运行。
@Grab('org.yaml:snakeyaml:1.17')
import org.yaml.snakeyaml.Yaml;
import org.apache.jmeter.services.FileServer;
String baseDir = FileServer.getFileServer().getBaseDir()
Yaml ymlparser = new Yaml()
Map config = ymlparser.load((baseDir+"/config/tool.yaml" as File).text)
String base_path = baseDir + "/data/" + trafficConfig.find{it.key=="name"}?.value
${__setProperty(basePath, base_path)};
如果我从同一JSR223预处理器记录属性'basePath'的值,它将返回正确的值。
然后,我正在从第二个线程组中的JSR223预处理器读取属性值,如下所示。
${__property(basePath, base_path)}
log.info( base_path );
它将通过jmeter日志中的以下异常。
2019-11-02 18:54:19,353错误o.a.j.m.JSR223PreProcessor:问题出在 JSR223脚本,JSR223预处理器javax.script.ScriptException: javax.script.ScriptException:groovy.lang.MissingPropertyException:否 这样的属性:类的Script470的basePath org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:162) 〜[groovy-all-2.4.16.jar:2.4.16]在 javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) 〜[?:1.8.0_221]在 org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:225) 〜[ApacheJMeter_core.jar:5.1.1 r1855137]在 org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]在 org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137]在 org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137]在 org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]在 org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]在 java.lang.Thread.run(Thread.java:748)[?:1.8.0_221]
答案 0 :(得分:2)
使用props
设置属性
props.put("basePath", base_path);
在JSR223组件中不要使用${}
语法