1)_setproperty函数:将值保存成jmeter属性
2)_property函数:在其他线程组中使用property函数读取属性
一、跨线程接口引用变量
1. 法一:jmeter自带函数_setProperty和_property
1. 1线程组 01
- 创建登录的【HTTP请求】,并配置接口所需参数;
- 创建【正则表达式提取器】,用正则表达式提取token字段;
applay to 选择“主请求和子请求”
3、创建【BeanShel后置处理器】,编写脚本,将正则表达式中的变量变成全局变量:
利用函数助手:将需要提取的设置为全局变量
${__setProperty(p_csrf_token,${csrf_token},)};
- 后面的 ${csrf_token} 是正则表达式提取器中的变量;
- 前面的 csrf_token是新定义的全局变量,后续跨线程组使用时是使用的这个变量名。
1.2 线程组 02
使用上述变量处通过函数助手property参数化写入${__property(p_csrf_token,,)}即可实现跨线程组。
Jmeter之内置函数__property和__P的区别_jmeter property函数-CSDN博客
创建并配置好【HTTP请求】
参数调用:
${__property(p_csrf_token,,)}
2. 法二:beanshell自带方法
String newToken = vars.get("token");//将变量token赋值给变量newToken
props.put("newToken1",newToken);//将newToken赋值给newToken1,此时newToken1已成为全局变量,其他线程直接引用${__P(newToken1)}
String aaa = props.get("newToken1");//获取全局变量newToken1复制给aaa
BeanShell后置处理器
String newToken = vars.get("token");
props.put("newToken1",newToken);
String aaa = props.get("newToken1");
3. 法三:调用java方法
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("newToken1","${token}");//将变量token赋值给全局变量newtoken1,其他线程直接引用${__P(newToken1)}
BeanShell后置处理器
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("newToken1","${token}");
二、跨线程cookie关联 (token关联)
cookie和token都用此方法
1. 全局配置文件jmeter.propties
修改bin目录下全局配置文件jmeter.propties中的【CookieManager.save.cookies=true】--注意修改后需要重启jmeter
2.查看调试取样器(Debug Sampler)
3. Cookie值设为全局变量
从调试取样器中取得Cookie的值并且设置为全局变量
注意:变量名不能随便取,必须响应头里面的变量名一致
${__setProperty(W2S_lastvisit,COOKIE_W2S_lastvisit,)}
${__setProperty(W2S_visitor,COOKIE_W2S_visitor,)}
${__setProperty(csrf_token,COOKIE_csrf_token,)}
4. 设置Http Cookie管理器
把取得的值设置到Http Cookie管理器中
注意:
- cookie管理器与线程组同一级
- cookie管理器中的域一定要填写为正确的请求地址
5.跨线程组直接调用
三、 运行设置
让线程按顺序执行
运行结果