如何用JMeter模拟浏览器缓存及会话过期测试场景?
JMeter实现该场景的步骤
1. 基础线程组配置
- 创建线程组,设置线程数=10(对应10个并发用户),循环次数选「永远」,勾选「调度器」并设置持续时间=3600秒(控制总测试时长1小时)。
2. 处理会话30分钟过期逻辑
每个用户每30分钟需要重新登录,更新会话凭证:
- 在组内最顶部添加登录HTTP请求,配置账号、密码等参数,用正则表达式/JSON提取器把登录返回的会话凭证(如Token、Cookie)保存到JMeter变量。
- 给登录请求添加固定定时器,设置延迟为1800000毫秒(30分钟),勾选「仅在采样器之前」,确保每30分钟自动触发一次登录,覆盖旧的会话凭证。
- 在登录请求的后置处理器中添加代码,清空缓存标记(比如用JSR223后置处理器执行
vars.put("api1_cache_exists", "0"); vars.put("api1_cache", "");),保证新会话下首次调用API1会走服务器。
3. 模拟浏览器本地存储缓存
JMeter没有原生缓存机制,手动实现首次请求缓存、后续复用逻辑:
- 添加If控制器,条件设为
${__jexl3(${api1_cache_exists} == 0,)},判断是否未缓存API1响应。 - 在If控制器内添加API1的HTTP请求:
- 请求成功后,用后置处理器把响应体保存到变量
api1_cache,同时设置api1_cache_exists=1标记缓存已存在。
- 请求成功后,用后置处理器把响应体保存到变量
- 在If控制器外添加JSR223取样器,直接返回缓存内容:
- 取样器内代码:
SampleResult.setResponseData(vars.get("api1_cache"), "UTF-8"); SampleResult.setResponseCode("200"); SampleResult.setSuccessful(true);,模拟从浏览器缓存获取数据,不发起服务器请求。
- 取样器内代码:
4. 控制API1连续调用频率
给API1的调用逻辑(If控制器+JSR223取样器)添加固定定时器,设置每次调用的间隔(比如1秒,根据实际用户操作频率调整),实现连续调用效果。
5. 验证与监控
- 添加「查看结果树」「聚合报告」监听器,检查:
- 登录请求每30分钟执行一次;
- 每次会话内首次API1请求走服务器,后续请求返回缓存内容;
- 会话过期后,缓存标记被清空,重新触发首次服务器请求。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

