1. 概述

本教程将深入探讨 JMeter 如何管理会话和 Cookie,并指导你构建一个完整的测试流程:登录应用、访问受保护资源、最后登出。过程中我们将使用 HTTP Cookie ManagerCSV Data Set Config响应断言 等组件,确保测试能真实模拟用户行为。

2. Web 应用中的会话管理

Web 应用的会话与 Cookie 管理形式多样,对身份认证和用户体验至关重要。以 表单登录 为例:成功发送一次认证请求后,服务器会返回包含 JSESSIONID 的 Cookie,后续请求只需携带此标识,无需重复提交凭证。

2.1 JMeter 的会话处理机制

⚠️ 与浏览器不同,JMeter 需要显式配置才能维持请求间的状态。核心依赖两个组件:

3. 配置 JMeter 测试计划

我们将用这些组件构建一个完整测试流程:登录 → 访问资源 → 登出。最终结构如下:

test plan

3.1 创建线程组

线程组是测试的核心控制单元,负责管理用户数量和迭代次数。操作路径:右键 Test PlanAdd > Threads (Users) > Thread Group,关键配置如下:

thread group

  • Stop Thread:登录失败时立即终止测试,避免无效请求堆积
  • Number of Threads:3(模拟多用户并发,需确保数据库有足够测试账号)
  • Loop Count:2(验证应用处理重复登录的能力)
  • Same user on each iteration:控制迭代间用户身份是否保留(本场景中因包含登出操作,该选项无实质影响)

其他默认配置无需修改,与会话管理无关。

3.2 使用 CSV 文件加载用户

📄 多用户测试最安全高效的方式是使用 CSV 文件。创建 users.csv 文件:

username,password
alex_foo,password123
jane_bar,password213
john_baz,password321

添加配置:右键 Thread GroupAdd > Config Element > CSV Data Set Config

csv db

核心配置说明:

  • Filename:指定 CSV 文件路径(必填)
  • Variable Names:重写列名变量(需配合 "Ignore first line" 使用)
  • Recycle on EOF:文件数据用尽时是否循环读取(false 时返回 "EOF")

定义的变量可在后续请求和断言中通过 ${变量名} 引用。

🍪 这是 JMeter 会话管理的核心组件。添加路径:右键 Thread GroupAdd > Config Element > HTTP Cookie Manager

cookie manager

关键选项:

  • Clear cookies each iteration:每次迭代清除 Cookie(与 "Same user on each iteration" 互斥)
  • Use Thread Group configuration:继承线程组的 Cookie 清除策略

4. 创建登录请求

🔐 首先构建登录请求:右键 Thread GroupAdd > Sampler > HTTP Request

login request

关键配置项:

  • Protocol:根据应用选择 HTTP/HTTPS
  • Server Name or IP:目标服务器地址
  • Method:POST(表单登录常用)
  • Path/login(登录接口)
  • Follow Redirects:仅当需在重定向页断言时勾选(否则影响性能)

Body Data 使用 CSV 变量动态填充(Spring Security 默认参数名):

username=${username}&password=${password}

4.1 添加 HTTP Header Manager

📋 必须声明 Content-Type 头。操作:右键登录请求 → Add > Config Element > HTTP Header Manager

header manager

❌ 缺少此头会导致登录失败,服务器无法解析请求体。

4.2 断言登录重定向

✅ 成功登录应返回 302 重定向。添加断言:右键登录请求 → Add > Assertions > Response Assertion

assert redirected

配置要点:

  • Response Code + Equals
  • Patterns to Test302

4.3 断言无登录错误

🚫 登录失败时响应头会包含错误信息。添加第二个断言:

test login error

配置说明:

  • Response Headers:检查响应头
  • Contains + Not:排除包含指定字符串的情况
  • Patterns to Testerror(错误页标识)
  • Custom failure message:可引用 ${username} 生成定制错误信息

5. 访问受保护资源

🔒 Cookie Manager 会自动携带会话 Cookie,后续请求可直接访问受保护资源:

protected request

添加响应断言验证返回内容(假设接口返回当前用户名):

assert user resource

配置要点:

  • Text Response:检查响应文本
  • Matches:精确匹配
  • Patterns to Test${username}

6. 创建登出请求

🚪 在测试流程末尾添加登出请求:

logout

添加登出成功断言(检查响应头包含 "logout"):

logout assert

至此完成完整的认证用户并发测试流程。

7. 请求结果分析

🔍 通过监听器可视化请求过程。添加:右键 Thread GroupAdd > Listener > View Results Tree

登录请求响应头(可看到 JSESSIONID): results

资源请求体(自动携带 Cookie): request result

资源响应体(验证返回用户名): results response

8. 总结

本文系统讲解了 JMeter 的会话与 Cookie 管理机制,通过构建完整的登录-访问-登出测试流程,验证了应用对用户会话的维护与注销能力。掌握这些技巧后,你可以轻松模拟复杂的认证场景,确保系统在高并发下的稳定性。


原始标题:Session/Cookie Management in Apache JMeter | Baeldung