JMeter的HTTP Cookie管理器是用来像浏览器一样自动处理Cookie的,能让虚拟用户自然地维持会话如登录状态不需要你手动去抓取和传递Cookie。
1. 是做什么的?
自动接收:服务器响应头里的Set-Cookie,会自动存下来。
自动发送:后续请求中,会把符合域名、途径规则的Cookie自动带上。
这样就能模拟登录 - 查看个人主页 - 下单等需要会话保持的流程。
2. 怎样添加?
在线程组上右键 - 添加 - 配置元件 - HTTP Cookie管理器。
一般放在线程组层级,对整个线程组下的所有请求生效。
3. 参数详解
打开Cookie管理器,会看到几个选项:
每次反复清除Cookie?(Clear Cookies Each Iteration)
如果勾选,每次线程循环开始时都会清空所有Cookie,相当于每次循环都重新开始一个全新会话。
登录流程测试:如果需要跑一次登录后反复执行业务,一般不勾选。
需要每次新用户身份的测试:可以勾选,但要注意这可能会让之前的登录状态丢失,一般更好的做法是用 JSR223 预处理来清理,或者直接用每次线程迭代都执行一次登录来包括。
Cookie方法(Cookie Policy)
建议保持默认的standard,它会按照RFC标准处理Cookie 的域名、途径一致和过期,最接近真实浏览器。除非有特殊需求,一般无需更改。
实现(Implementation)
默认用HC4CookieHandler,兼容性好一般不需要动。
用户自定义Cookie(User-Defined Cookies)
你可以手动添加一些固定的 Cookie 键值对。
比如测试环境中需要绕过登录,直接把 SESSIONID=xxx 写死在这里。
支持 JMeter 变量:值可以填 ${myCookie},再用前置处理器动态赋值。
4. 使用场景
场景一:模拟登录后保持会话
这是最典型的用法。
添加一个HTTP Cookie管理器(什么都不用配,用默认设置)。
设置一个登录请求(如POST用户名密码),服务器返回会话 Cookie。
后续的业务请求(如查看订单)会自动带上这个 Cookie,保持登录态。
不要手动去处理Set-Cookie响应头,让Cookie管理器全自动工作。
场景二:需要禁用Cookie的测试
有些功能要求禁用Cookie 时,系统仍能正常工作(比如退化为 URL 重写)。
只需把Cookie管理器里的 每次反复清除Cookie勾选,并且不添加任何自定义Cookie,那么每次循环Cookie都是空的,等效于不发送 Cookie。
或者干脆移掉Cookie管理器(没有管理器就不会发送任何 Cookie)。
场景三:多线程组共享/隔离会话
一个测试计划中,Cookie管理器默认是一个线程内共享的,不同线程的Cookie相互独立(因为每个线程有自己的一套Cookie存储)。
如果希望所有线程共用一套Cookie(比如模拟所有用户都用同一个登录态),可以添加一个HTTP Cookie管理器 到测试计划根层级(而不是线程组内),这样所有线程组下的请求都能访问到这份Cookie。但这并不常用,因为一般并发用户需独立会话。
5. 注意事项
不要混用手动 Cookie头和Cookie管理器
如果你在HTTP信息头管理器里手动添加了 Cookie: ... 头,会和 Cookie 管理器冲突且优先级更高,可能导致Cookie管理器失效。保持只用一种方式管理Cookie。
作用域和执行顺序
Cookie管理器是按 JMeter 作用域规则生效的。如果有多个Cookie管理器,内部会合并,且线程组内的会包括测试计划中的同名Cookie方法设置。一般一个线程组只放一个。
登录请求的 Cookie 可能清不掉?
有时需要模拟用户完全退出,除了清除 Cookie,还可能需要请求注销接口或模拟关闭浏览器。JMeter 不像浏览器那样支持清空会话,你可以用 JSR223 Sampler 写 sampler.getCookieManager().clear() 来强制清空,或者更简单地:把每次反复清除 Cookie勾上,并让登录请求放在循环内,每次迭代都重新登录。
调试Cookie
如果想看 Cookie 管理器里到底存了什么,可以添加 调试取样器(Debug Sampler) 并设置 JMeterVariables=true,运行后在结果树查看 COOKIE_xxx 变量,或者直接在 HTTP Cookie 管理器中给某个 Cookie 加一个变量名(可以在用户自定义 Cookie里设置),这样就会被存为变量方便查看。
只要你需要维持会话,直接在线程组下加一个 HTTP Cookie 管理器 就行,大多数情况不需要额外配置。
如果遇到明明登录成功了,后续请求却返回未登录的问题,优先检查:
是不是勾选了每次反复清除 Cookie导致登录状态被清。
是不是在 HTTP 头管理器里硬编码了 Cookie 头包括了管理器。