本来没打算写这个系列的,又看了看JMeter的文档,发现Groovy在JMeter中能发挥很多非常有趣的功能,虽然语法和API比较隐晦,但好得不多。

前面已经写过文章介绍了Groovy断言:​​用Groovy处理JMeter断言和日志​​。

下面介绍下一个题目:Groovy处理JMeter变量,这里的变量分为线程私有(局部)和线程共享(全局)。

线程私有

  • 首先新建一个简单的线程组和一个简单的请求:

用Groovy处理JMeter变量_预处理程序

请注意参数​​t​​去的是局部变量​​MY1​​的值。

  • 添加JSR223 预处理程序

用Groovy处理JMeter变量_性能测试_02

脚本内容如下:

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
  • 查看结果树

用Groovy处理JMeter变量_预处理程序_03

至此已经完美搞定私有变量。

线程共享

线程共享变量的处理方法跟上一个基本一模一样,除了对象名和方法名意外。

脚本内容如下:

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变量_JMeter_04

  • 查看结果树

用Groovy处理JMeter变量_linux_05

Groovy如何处理JMeter的变量的Demo到此结束了。