在 《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}