场景:用户登陆后会本地会保存cookie,cookie是用来跟服务端验证此用户已经登陆过的重要信息,但是如何获取并在其他请求时将此cookie传递给服务器呢?
在线程组下面之直接添加HTTP Cookie管理器,Jmeter会自动将线程组下面的cookie值保存并在此线程组中其他API中传递的,首先,要确保jmeter.properties中CookieManager.save.cookies=true
那么,跨线程间怎么传递cookie?
获取参数值->设置为全局变量->调用参数,下面详细介绍一下操作步骤
方法一:
-
通过抓包工具(Fiddler,Charles,network)等可知道cookie是在响应Header或者响应文本中返回可客户端的
- 添加正则表达式获取cookie值,需要检查的响应字段需要选择【信息头】
Set-Cookie: PHPSESSID=(.*); path=/; HttpOnly
其中,
引用名称:数据名称
正则表达式:参看正则式将匹配的数据提取出来
模板:表示使用提取到的第几个值,如:表示取第1个
匹配数字:0代表随机取值,1代表全部取值
缺省值:如果正则表达式未匹配到,即使用该值
- 添加BeanShell PostProcessor,并将正则表达式提取器中的值设置为全局变量
${__setProperty(newPHPSESSID,${PHPSESSID},)};
同时,也可通过下面方式在BeanShell PostProcessor设置全局变量:
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("Cookie", "${PHPSESSID}");
- 在其他需要调用的线程下添加HTTP Cookie管理器,并取出环境变量值
${__property(newPHPSESSID,,)}
同样,亦可通过添加前置BeanShell PreProcessor处理器,并通过代码取出环境变量,并将它设置为局部变量;而后在线程组下方添加HTTP Cookie管理器并调用此参数
import org.apache.jmeter.util.JMeterUtils;
String value = JMeterUtils.getProperty("Cookie");
vars.put("Cookie",value);
-
最后运行线程组就ok了,接口A请求头中有cookie信息了
方法2:
除了步骤3中使用的配置元件与方法1不一样外,整体操作类似
步骤3:在其他需要调用的线程下添加HTTP信息头管理器,并取出环境变量值
参考文档:
Jmeter如何保持cookie,让所有请求都能用同一个cookie,免去提取JSESSIONID
Jmeter获取Cookie并传递到下一个线程---跨线程后cookie找不到了
jmeter手动添加cookie及线程间cookie共享的2种方法
jmeter学习指南之深入分析跨域传递cookie