如今许多网站都不是简单的接收请求然后响应了,而是需要客户端同时处于“登录状态”,而证明客户端登录状态的“凭证”,就是服务器先前返回的 Cookie. 只有客户端再次发起请求的时候携带上 Cookie,才能证明当前用户处于已登录状态。本文讨论 Jmeter 如何管理 Cookie.
本文使用的 Jmeter 版本是 4.0
简介
Cookie Manager 为 Jmeter 管理整个测试过程中的 Cookie,你不需要关心 Cookie 在什么时候接收、什么时候发出,只需要将这个元件加在测试计划上,剩下的事情就交个它了。
添加的操作步骤是: Add > Config Element > HTTP Cookie Manager
一个 HTTP Cookie Manager 将负责所有线程组各自的登录信息,且线程之间互不影响,就像浏览器的各个 tab 一样管理各自的 Cookie。
查看 Cookie
Cookie Manager 结果中并不能查看 Cookie 的值。不过可以从 View Result Tree 中的相关的 Sampler Result 中观察到 Cookie 值。
![](/resource/image/tech/jmeter-cookie-management/531.png)
保存 Cookie
一般情况下,不需要手动保存 Cookie 的值,因为测试过程中 Cookie Manager 会自动管理各站点的 Cookie,所以 2.3.2 以后版本的 Jmeter,默认关闭了保存变量的功能。
如果想打开保存变量功能,首先需要编辑 Jmeter 的属性文件:bin/jmeter.properties
修改其中的
# CookieManager behaviour - should Cookies be stored as variables?
# Default is false
#CookieManager.save.cookies=false
最后一行去掉#号,并改为
CookieManager.save.cookies=true
默认情况下,名称为 AAA 的 Cookie 会保存到 COOKIE_AAA 变量里。
作用范围
Cookie Manager 的作用范围是当前的线程组。比如,
Test Plan
├─HTTP Cookie Manager
├─Thread Group1
└─Thread Group2
在上面这种层级结构里,Cookie Manager 只管理 Thread Group1 中的产生的 Cookie,等效于
Test Plan
├─Thread Group1
│ └─HTTP Cookie Manager
└─Thread Group2
如果想让多个 Thread Group 都能管理 Cookie,应该分别为它们配备 Cookie Manager,如下:
Test Plan
├─Thread Group1
│ └─HTTP Cookie Manager
└─Thread Group2
└─HTTP Cookie Manager
于多个 Thread Group 之间传递 Cookie 的方法,见另一篇: Jmeter 在线程组之间共享 Cookie
手动添加 Cookie
上一步 保存为变量 后,就可以在 Cookie Manager 中手动添加 Cookie. 不过,这个 Cookie 将在 当前线程组 的所有线程中共享。
每次循环清除 Cookie
Cookie Manager 界面上有一个设置,叫 Clear cookies each iteration?
![](/resource/image/tech/jmeter-cookie-management/530.png)
是否勾选,取决于你的用例设计:
- 如果每次起新的线程,该用户都作为新用户,不采用之前的登录态,那么这个设置需要勾上;
- 如果每次起新的线程,该用户都使用之前的登录态,那么这个设置需要清除。
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板