浅谈配置元件之HTTP Cookie管理器

浅谈配置元件之HTTP Cookie管理器

在进行Web测试时,处理Cookies是非常关键的一环,因为Cookies常用于存储用户会话信息、登录状态等。JMeter中的“HTTP Cookie管理器”(HTTP Cookie Manager)正是为此设计的配置元件,它能自动处理HTTP请求中的Cookie,模拟浏览器的行为,使得测试更加真实和准确。

1. 为什么需要HTTP Cookie管理器

● 维护会话状态:许多Web应用依赖于Cookie来维持用户的会话状态。不处理Cookie可能导致登录后无法访问受保护的页面。
● 自动化处理:手动管理每个请求的Cookie非常繁琐且易出错。HTTP Cookie管理器自动发送、接收并存储Cookie,简化测试脚本编写。
● 真实模拟:模拟浏览器的Cookie处理方式,使测试结果更贴近实际用户操作场景。

2. 添加HTTP Cookie管理器

  1. 打开JMeter,创建或打开一个测试计划(Test Plan)。
  2. 右键点击测试计划下的任意一个合适的层级(如线程组Thread Group),选择“添加”(Add)> “配置元件”(Config Element)> “HTTP Cookie管理器”(HTTP Cookie Manager)。

3. 配置HTTP Cookie管理器

基本设置
● Cookie 策略(Policy):选择Cookie的处理策略。默认为“standard”,适用于大多数情况。其他选项如“compatibility”用于兼容旧版浏览器的Cookie策略。
● 每次反复清楚Cookies(Clear cookies each iteration):如果勾选,每次迭代开始前都会清除所有已存储的Cookie,适用于需要模拟新会话的场景。
● 存储在Cookie管理器中的Cookie:运行待上自己需要的Cookie。

4. 使用示例

首先我们使用SpringBoot框架编写两个测试接口

import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

@RestController
public class Welcome {

    @GetMapping(value = "/welcome")
    public String welcome(){
        return "Hello World";
    }

    @GetMapping(value = "/cookie")
    public String getCookieValue(@CookieValue(name = "my-cookie", required = false) String cookieValue, HttpServletResponse response) {
        // 检查cookie是否存在
        if (cookieValue != null) {
            return "上次请求中的cookie值: " + cookieValue;
        } else {
            // 设置一个新的cookie
            String newCookieValue = "setnewcookie";
            Cookie cookie = new Cookie("my-cookie", newCookieValue);
            cookie.setMaxAge(24 * 60 * 60); // 设置cookie的过期时间为24小时
            response.addCookie(cookie);
            return "未找到先前的cookie。\n已设置新cookie值: " + newCookieValue;
        }
    }
}

我们编写这么一个JMeter脚本
在这里插入图片描述
线程组:保持默认
HTTP Cookie管理器:设置默认
获取Cookie(http取样器):
● 协议:http
● 服务器名称或IP:127.0.0.1
● 端口:8091(根据实际情况编写)
● 方法:GET
● 路径:/cookie
● 内容编码:utf-8
调用欢迎接口(http取样器):
● 协议:http
● 服务器名称或IP:127.0.0.1
● 端口:8091(根据实际情况编写)
● 方法:GET
● 路径:/welcome
● 内容编码:utf-8

情况1:勾选每次反复清除Cookies

该种情况下,设置线程组循环次数为2,运行JMeter脚本,通过查看结果树可以看到如下内容:
第一次获取cookie接口获取的响应数据Response Body内容为:

未找到先前的cookie。
已设置新cookie值: setnewcookie

第二次获取cookie接口请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
[no cookies]

获取的响应数据Response Body内容为:

未找到先前的cookie。
已设置新cookie值: setnewcookie

查看两次响应数据的Response headers都能够看到如下内容

Set-Cookie: my-cookie=setnewcookie; Max-Age=86400; Expires=Tue, 18-Jun-2024 11:54:24 GMT

情况2:不勾选每次反复清除Cookies

第一次获取cookie接口获取的响应数据Response Body内容为:

未找到先前的cookie。
已设置新cookie值: setnewcookie

第二次获取cookie接口请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
Cookie Data:
my-cookie=setnewcookie

获取的响应数据Response Body内容为:

上次请求中的cookie值: setnewcookie

情况3:不勾选每次反复清除Cookies,存储在Cookie管理中的Cookie填写内容

参数如下:
● 名称:my-cookie
● 值:112345678
● 域:127.0.0.1
● 路径:/
第一次获取cookie接口获取的请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
Cookie Data:
my-cookie=12345678

第一次获取cookie接口获取的响应数据Response Body内容为:

上次请求中的cookie值: 12345678

第二次获取cookie接口请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
Cookie Data:
my-cookie=12345678

获取的响应数据Response Body内容为:

上次请求中的cookie值: 12345678

情况4:Cookie策略:ignoreCookies,其它默认

第一次获取cookie接口获取的请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
[no cookies]

第二次获取cookie接口获取的请求Request Body内容为:

GET http://127.0.0.1:8091/cookie
GET data:
[no cookies]

5. 注意事项

● 安全与隐私:JMeter会明文存储Cookie信息,注意保护敏感数据。
● 性能影响:大量或复杂的Cookie管理可能会对测试性能造成一定影响,尤其是在高并发测试场景下。
● 测试设计:合理配置Cookie管理器,避免不必要的清除操作,以更准确地模拟用户行为。

6.结语

HTTP Cookie管理器是JMeter中不可或缺的配置元件,对于准确模拟Web应用的用户交互至关重要。通过合理配置,可以显著提升测试脚本的真实性和测试效率。掌握其使用方法,是进行高效Web性能测试的关键一步。

  • 34
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔波儿灞爱霸波尔奔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值