本来没打算写这个系列的,又看了看JMeter的文档,发现Groovy在JMeter中能发挥很多非常有趣的功能,虽然语法和API比较隐晦,但好得不多。
前面已经写过文章介绍了Groovy断言:用Groovy处理JMeter断言和日志。
下面介绍下一个题目:Groovy处理JMeter变量,这里的变量分为线程私有(局部)和线程共享(全局)。
线程私有
- 首先新建一个简单的线程组和一个简单的请求:
请注意参数t
去的是局部变量MY1
的值。
- 添加JSR223 预处理程序
脚本内容如下:
OUT. println 'FunTester'
log.error '输出JMeter控制台错误'
vars.put("MY1","FunTester")
def my_var = vars.get("MY");
log.warn "输出参数-------- ${vars} console"
log.info("222222 " + my_var);
OUT. println 'FunTester'log.error '输出JMeter控制台错误'vars.put("MY1","FunTester")def my_var = vars.get("MY");log.warn "输出参数-------- ${vars} console"log.info("222222 " + my_var);复制代码
- 控制台输出
2020-03-03 21:02:30,499 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2020-03-03 21:02:30,517 ERROR o.a.j.m.J.JSR223 预处理程序: 输出JMeter控制台错误
2020-03-03 21:02:30,518 WARN o.a.j.m.J.JSR223 预处理程序: 输出参数-------- org.apache.jmeter.threads.JMeterVariables@14a52b54 console
2020-03-03 21:02:30,518 INFO o.a.j.m.J.JSR223 预处理程序: 222222 FunTester
- 查看结果树
至此已经完美搞定私有变量。
线程共享
线程共享变量的处理方法跟上一个基本一模一样,除了对象名和方法名意外。
脚本内容如下:
OUT. println 'FunTester'
log.error '输出JMeter控制台错误'
vars.put("MY1","FunTester")
def my_var = vars.get("MY1");
log.warn "输出参数-------- ${vars} console"
log.info("222222 " + my_var);
props.put("MY",test())
log.info(props.get("MY"))
def test(){
"funtest" + fan()
}
def fan(){
System.currentTimeMillis()
}
这里我稍微写了两个方法,验证了一下Groovy的方法是否可行
- 参数设置
- 查看结果树
Groovy如何处理JMeter的变量的Demo到此结束了。