在 《Jmeter 如何管理 Cookie 》一文中提到,Cookie Manager 的作用范围是当前的线程组。如果有多个线程组,需要将 Cookie 在线程组之间传递,就需要使用全局属性传递。具体做法见本文内容。
本文使用的 Jmeter 是 4.0 版本
本文目的
假如我们使用结构如下的测试计划:
Test Plan
├─ Setup Thread Group
│ ├─ HTTP Cookie Manager
│ └─ Log on # 拿到 Cookie
│
├─ Thread Group
│ └─ Request # 使用 Cookie
│
└─ TearDown Thread Group
└─Log out # 使用 Cookie
从图中可以看出,包括三个独立的线程组。其中
Setup Thread Group
中包含登录步骤 Log on
,获得登录 Cookie
Thread Group
是正式发请求的部分,希望在请求中带上前面获得的 Cookie
TearDown Thread Group
负责善后事务,同样希望带上 Cookie
思路
为了达到上述目的,基本的步骤分解如下:
Setup Thread Group
中 保存 Cookie 到属性变量(Properties)
Thread Group
从属性变量(Properties)中读出 Cookie
TearDown Thread Group
从属性变量(Properties)中读出 Cookie
保存 Cookie
在 Jmeter 如何管理 Cookie 一文讨论过保存 Cookie 到属性变量的的方法,这里再介绍一下,具体是:
允许保存 Cookie
首先编辑 Jmeter 的属性文件: bin/jmeter.properties
, 修改其中的
# CookieManager behaviour - should Cookies be stored as variables?
# Default is false
#CookieManager.save.cookies=false
最后一行去掉#号,并改为
CookieManager.save.cookies=true
Cookie 在属性中保存的形式
上面的步骤完成后,CookieManager 每次收到一个新的 Cookie ,会保存在属性值,比如名称为 site
的 Cookie 会保存到 COOKIE_site
变量里。可以用 Debug Sampler 查看保存的变量。我们在脚本里加上 Debug Sampler :
Test Plan
├─Setup Thread Group
│ ├─ HTTP Cookie Manager
│ ├─ Log on
│ ├─ Debug Sampler # 用于记录属性值列表
│ └─ View Results Tree # 用于查看属性值列表
│
...
默认情况下, Debug Sampler 是不显示属性值的,需要将开关打开:
以百度为例
举个例子,我们请求百度的首页:会得到一些 Cookie:
获得的响应中有 set-Cookie 的内容:
到 Debug Sampler 中就可以看到 保存在变量列表中:
保存 Cookie
下面需要将 Cookie 变量转移到属性中。为 Log on 一步添加 JSR223 PostProcessor
Test Plan
├─Setup Thread Group
│ ├─ HTTP Cookie Manager
│ └─ Log on
│ └─ JSR223 PostProcessor \# 新增
│
├─ Thread Group
│ └─ Request
│
└─TearDown Thread Group
└─ Log out
在 JSR223 PostProcessor 的代码文本框中,填入如下 Groovy 代码:
props.put("cookie_site", vars.get("COOKIE_site"))
这条语句的意思是,从当前线程组的变量中,提出 COOKIE_site
变量的值,存入名叫 cookie_site
的属性中。 关于 props.put
和 vars.get
方法,具体用法参考 Jmeter 的 vars 和 props 用法
加载 Cookie
全局属性
接下来,则按照 Jmeter 的变量类型和作用域 一文的分析,在线程组之间传递变量,最佳的方法是利用 Jmeter Properties(属性)。
从上图看出,属性的作用范围是全局的,从每个线程组内部可以读取或者写入属性值。既然上面的 保存一节 已经将Cookie写入属性,接下来可以在另一个线程组中读出Cookie
添加 Cookie Manager
加载 Cookie 的方法,只要在线程组内添加 Cookie Manager
Test Plan
├─Setup Thread Group
│ ├─ HTTP Cookie Manager
│ └─ Log on
│ └─ JSR223 PostProcessor
│
├─ Thread Group
│ ├─ HTTP Cookie Manager # 新增
│ └─ Request
│
└─TearDown Thread Group
└─ Log out
插入 Cookie
每条 Cookie 包括三部分:
- Cookie 名称
- Cookie 值
- 作用域 Domain
都体现在 Cookie Manager 的 User-Defined Cookies 一栏内:
在上图中,手动新增一条名为 site
的Cookie,然后使用 ${__property()}
函数 读取 cookie_site
属性值,同时指定了作用域 ${your_domain}
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/jmeter-share-cookie/ ,且不得用于商业用途。