【P6】JMeter HTTP Cookie管理器
文章目录
- 一、测试网站
- 二、Cookie 设置规则
- 2.1、无配置元件时,Cookie 不会自动设置(与线程组设置无关)
- 2.2、有配置元件,不选任何参数时,Cookie 自动设置(与线程组设置无关)
- 2.3、有配置元件,选上清空策略时,优先取配置元件(每一次迭代会清空 Cookie,与线程组设置无关)
- 2.4、有配置元件,选择参考线程组时,看线程组设置(分2种情况)
- 2.5、Cookic 是作用在线程级别的,不同线程的 Cookie 彼此完全独立
- 2.6、通过 CookieManager.save.cookies=true 可以将 Cookie 保存为变量,名称固定以 COOKIE_ 开头可通过 CookieManager.name.prefix 定义
- 2.7、可以加入一些自定义 Cookie
一、测试网站
慕慕生鲜: http://111.231.103.117/#/login
-
页面提供登录了用户名和密码
-
按F12或右键检查,网络中获取登录信息
二、Cookie 设置规则
2.1、无配置元件时,Cookie 不会自动设置(与线程组设置无关)
(1)、Test Plan 右键 <<< 添加 <<< 配置元件 <<< HTTP请求默认值
-
协议:http
-
服务器名称或IP:111.231.103.117
-
端口:8083
-
内容编码:utf-8
-
高级中可以设置超时(毫秒),连接:5000;响应:1000
(2)、网页调试工具中,点击标头,找到请求标头,全部选中,复制
(3)、Test Plan 右键 <<< 添加 <<< 配置元件 <<< HTTP信息头管理器 <<< 从剪切板添加(会自动添加好)
(4)、Test Plan 右键 <<< 添加 <<< 线程(用户)<<< 线程组
(5)、线程组右键 <<< 添加 <<< 取样器 <<< HTTP请求 <<< 从剪切板添加(会自动添加好)
-
请求方法:GET
-
路径:/login
-
添加参数,用户名和密码
(6)、线程组右键 <<< 添加 <<<监听器 <<< 查看结果树
(7)、点击启动
-
第一个和第二个请求为同一个线程,因为循环迭代两次,所以第二个请求还是在同一个线程里。同理,第三个和第四个请求为同一个线程
-
可以看到,第一次 HTTP请求中的响应数据,响应头中返回了一个 Cookie
-
第二次再次方式 HTTP请求时,在请求的请求体中并没有带 Cookie
(8)、取消勾选线程组中的 Same user on each iteration,再次运行
没有配置元件(HTTP Cookie管理器),Cookie 不会自动设置,线程组中的 Same user on each iteration 勾不勾选意义不大
2.2、有配置元件,不选任何参数时,Cookie 自动设置(与线程组设置无关)
(1)、Test Plan 右键 <<< 添加 <<< 配置元件 <<< HTTP Cookie管理器
- 自定义一个 Cookie
(2)、线程组不勾选 Same user on each iteration,启动
(3)、线程组勾选 Same user on each iteration,启动
(4)、点击查看结果树,查看请求信息
-
第一个和第二个请求为同一个线程,因为循环迭代两次,所以第二个请求还是在同一个线程里。同理,第三个和第四个请求为同一个线程
-
前两个请求为线程组勾选了 Same user on each iteration,后两个为线程组未勾选 Same user on each iteration
-
第一个 Cookie 为自定义设置的,红框中的为请求所返回的响应头中的 Cookie
有配置元件(HTTP Cookie管理器),Cookie 会自动设置,线程组中的 Same user on each iteration 勾不勾选意义不大
2.3、有配置元件,选上清空策略时,优先取配置元件(每一次迭代会清空 Cookie,与线程组设置无关)
(1)、HTTP Cookie管理器勾选每次反复清除Cookies?
(2)、线程组不勾选 Same user on each iteration,启动
(3)、线程组勾选 Same user on each iteration,启动
(4)、点击查看结果树,查看请求信息
-
第一个和第二个请求为同一个线程,因为循环迭代两次,所以第二个请求还是在同一个线程里。同理,第三个和第四个请求为同一个线程
-
前两个请求为线程组未勾选了 Same user on each iteration,后两个为线程组勾选 Same user on each iteration
-
第一个 Cookie 为自定义设置的,可以看到只有一个自定义的 Cookie
有配置元件(HTTP Cookie管理器),选择清空策略时,Cookie 不会自动设置,线程组中的 Same user on each iteration 勾不勾选意义不大
2.4、有配置元件,选择参考线程组时,看线程组设置(分2种情况)
(1)、HTTP Cookie管理器勾选 Use Thread Group configuration
to control cookie clearing
(2)、线程组不勾选 Same user on each iteration,启动
(3)、线程组勾选 Same user on each iteration,启动
(4)、点击查看结果树,查看请求信息
-
第一个和第二个请求为同一个线程,因为循环迭代两次,所以第二个请求还是在同一个线程里。同理,第三个和第四个请求为同一个线程
-
前两个请求为线程组未勾选了 Same user on each iteration,后两个为线程组勾选 Same user on each iteration
有配置元件(HTTP Cookie管理器),选择参考线程组时(Use Thread Group configuration to control cookie clearing),线程组中的 Same user on each iteration 才会生效,勾选后 Cookie 会自动设置。参考第四个请求信息
2.5、Cookic 是作用在线程级别的,不同线程的 Cookie 彼此完全独立
(1)、线程组设置线程数为2,循环次数为3
(2)、HTTP请求在名称处,添加 ${__threadNum} 用于获取线程号,点击启动
(3)、点击查看结果树,查看请求信息
-
第一个线程的三个请求,当第一个请求响应头返回 Cookie 后,后续此线程的第二个和第三个请求,会自动设置此 Cookie
-
第二个线程所返回的 Cookie 和第一个线程所返回的 Cookie 不一致
不同的线程,会获取不同的 Cookie
2.6、通过 CookieManager.save.cookies=true 可以将 Cookie 保存为变量,名称固定以 COOKIE_ 开头可通过 CookieManager.name.prefix 定义
将获取的 cookie 保存并变成一个变量,后续可以方便使用这个 cookie 变量
(1)、在 Jmeter 安装路径下,打开 bin 目录,编辑 jemeter.properties,将 CookieManager.save.cookies 设置为 true,并去掉 #
(2)、线程组右键 <<< 添加 <<< 后置处理器 <<< Debug PostProcessor(调试后置处理程序)
Debug PostProcessor(调试后置处理程序):将一些属性变量打印出来
(3)、清空全部后,点击启动,点击查看结果树
-
将请求的属性变量打印出来,点开后,在响应数据 <<< Response Body 中可查看
-
一个 COOKIE_JSESSIONID 变量,存储着 Cookie 信息
-
只要请求的 Response headers 响应头中有 Set-Cookie,就会相对应注册一个变量
(4)、线程组右键 <<< 添加 <<< 后置处理器 <<< JSR223 PostProcessor(JSR223 后置处理程序)
log.info("获取 cookie:"+vars.get("COOKIE_JSESSIONID"));
(5)、选项菜单中,点击日志查看,打开日志,清除全部后,启动
日志打印出了 cookie,可以使用 COOKIE_JSESSIONID 变量获取到 cookie
2.7、可以加入一些自定义 Cookie
(1)、在 HTTP Cookie管理器中设置自定义的 cookie
-
名称、值:随意设置
-
域:IP 或者域名
-
路径:/
(2)、清除全部,点击启动,点击查看结果树,查看 cookie 信息
在请求的请求 <<< Request Body 下,有两个 cookie,其中第一个为自定义的 cookie,第二个为请求响应头中返回的 cookie