在Jmeter做性能测试或接口测试时,当多个请求关联时需要处理Cookie。
Jmeter对Cookie进行存取的管理可以使用HTTP Cookie管理器组件。以下对HTTP Cookie管理器的使用进行说明。
场景:
用户登录后,查询打开某一个任务
jmeter 添加线程组并创键http请求,没有添加HTTP Cookie 管理器,执行后查看结果树,有报错如下。
选中线程组,添加HTTP Cookie 管理器,添加完成后显示如下
上述图中,添加了一个HTTP Cookie 管理器,对Cookie进操作,新增了一个JSESSIONID的cookie,具体的值是从变量中取出;另外域、路径必须要输入,尤其是域;因为Jmeter现版本默认不支持跨域的请求,不填的话设置的Cookie不会被带上。
接下来就是取Cookie的操作,通常取的Cookie都是从Response Header里取的,取的目的一般都是给另一个不同的线程来用,因为如果是同一个线程的不同次迭代的情况那么Jmeter会自动带上,无需我们设置。那么HTTP Cookie管理器是如何工作,如何取出cookie呢?
如果一个 HTTP 请求,返回结果中包含cookie信息,那么HTTP Cookie管理器会自动将该 cookie 保存起来,后续所有的对该网站的请求都使用同一个 cookie。所以 JMeter 的每个线程都有自己独立的"cookie 保存区域"。这些 cookie 不会显示在 HTTP Cookie管理器里,可以通过察看结果树来对其进行查看。
具体步骤如下:
1、进入jmeter的安装目录bin目录下,修改jmeter.properties文件
搜索找到CookieManager.save.cookies=true并设置为true,并保存
2、重启jmeter,再次打开jmeter
3、在需要取Cookie的线程组里添加一个HTTP Cookie 管理器,设置如上图
当执行脚本后,HTTP Cookie 管理器获取到的cookie就会被自动保存在变量里(具体的变量名格式为"COOKIE_xxxx","COOKIE_"为前缀),其中xxxx为具体的实际cookie名;这样在同一个线程内其它操作组件都是可以直接通过${COOKIE_xxxx}来获取 cookie值。如果不希望这个前缀可以对属性 "CookieManager.name.prefix=" 进行定义。