Jmeter 如何管理 Cookie

发表时间 ·

如今许多网站都不是简单的接收请求然后响应了,而是需要客户端同时处于“登录状态”,而证明客户端登录状态的“凭证”,就是服务器先前返回的 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 值。

保存 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?

是否勾选,取决于你的用例设计:

  • 如果每次起新的线程,该用户都作为新用户,不采用之前的登录态,那么这个设置需要勾上;
  • 如果每次起新的线程,该用户都使用之前的登录态,那么这个设置需要清除。


相关文章   欢迎到 留言板 写下你的看法。
  本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接