第一步,先获取到要跨线程组传递的参数值。新增一个正则表达式提取器。
提取需要获取的值。
第二步,把获取的值进行设值。主要是为了在其他线程组中可以获取到该参数值。
第三步,获取设置的值,在其他线程组进行使用。
新建BeanShell后置处理器:BeanShell PostProcessor
方法一:使用__setProperty函数进行设置全局变量,该函数使用方法:
设置值:${__setProperty(key,value)}; #此处的key不需要写成“key”
获取值:${__P(“key”)};
${__P(变量名)} 基本等同于${__property(变量名)}
${__P(init,2)} , ${__property(init,start,200)}
可以自行定义变量名称,及变量的默认值
P 变量名为init, 值为2 ,使用的时候直接${__P(init,2)}就可以,改变量的结果为2
${__property(init,start,200)} 变量名为init, 默认值为200,同时会将200默认传给start这个变量,start可进行再使用 ${start}
P和property的区别就是是否将第一个变量的值存储到另外一个变量中
设置值:
实际应用如下:
获取值:
方法二:
设置值:使用vars和props,props 和 vars 主要有两点区别:
1.vars 只能在当前线程内使用,props 可以跨线程组使用
2.vars 只能保存 String 或者 Object,props 是 Hashtable 对象
使用方法:
设置值:vars.put("key","value")
获取值:vars.get("key","value")
vars和props都有put和get方法 ,但是由于我们要操作的是跨线程组的,所以只能使用props进行put值。
设置值:
获取值:
测试结果:
注:在第二个线程组中,我使用的是 BeanShell前置处理器BeanShell PreProcessor进行的取值,获取到值后,可以使用vars函数进行设置值,在HTTP request 中使用。
示例如下:
测试结果:
附、Bean Shell常用内置变量
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b) props.put("PROP1","1234");
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
sampler - (Sampler):gives access to the current sampler
更多方法可参考:org.apache.jmeter.samplers.SampleResult