JMeter网站并行用户性能测试脚本优化建议请求
JMeter性能测试脚本优化建议
一、先排查HTTP请求异常核心问题
从你提供的截图来看,请求返回异常(大概率是4xx/5xx状态码),先做基础排查:
- 核对请求的协议、域名、路径:录制时可能因代理配置出错,导致路径多了前缀或缺失部分内容,和浏览器真实请求对比修正
- 校验请求头信息:确保
User-Agent、Cookie、Referer等关键头和真实浏览器完全一致,很多网站会通过这些信息拦截非浏览器发起的请求 - 检查请求参数:搜索、商品详情、加购等请求的动态参数(比如商品ID、csrf令牌)必须从前面的响应中提取,不能用录制时的硬编码值,否则会因参数过期失效导致请求失败
二、匹配测试场景的脚本调整
1. 实现4个用户依次延迟5秒启动
- 线程组设置线程数=4,添加
JSR223 Timer,用以下代码实现错峰启动:// 第n个线程(从0计数)延迟n*5000毫秒启动 def threadNum = ctx.getThreadNum() return threadNum * 5000
2. 实现循环3次且每次搜索不同商品
- 给核心流程套一个
Loop Controller,设置循环次数=3 - 准备商品关键词列表,用
CSV Data Set Config读取:- 新建CSV文件,每行一个关键词(比如
手机,电脑,耳机,平板) - 配置
CSV Data Set Config,设置Recycle on EOF?=False、Stop thread on EOF?=False,确保每次循环取不同关键词,搜索请求中用${searchKey}引用变量
- 新建CSV文件,每行一个关键词(比如
- 若不想用CSV,也可以用
JSR223 PreProcessor生成随机关键词:def keywords = ["手机", "电脑", "耳机", "平板", "智能手表"] def randomIdx = new Random().nextInt(keywords.size()) vars.put("searchKey", keywords[randomIdx])
3. 实现“未找到商品则重新搜索”逻辑
- 在搜索请求后添加
Response Assertion,检查响应中是否包含目标商品关键词(或商品ID) - 用
If Controller判断断言结果:若断言失败(未找到),则跳转回搜索请求重新执行(可结合Go To Loop Controller实现循环重试) - 更精准的方式是用
JSR223 PostProcessor解析搜索结果的HTML/JSON,提取商品ID列表,如果列表为空则触发重新搜索
4. 验证商品成功加入购物车
- 在加购请求后添加
Response Assertion,检查响应中是否包含“加入购物车成功”这类提示文本 - 或者校验加购接口的返回状态码(比如200)和响应体中的成功标识(如
"success":true) - 也可以额外请求购物车列表接口,验证商品是否存在于购物车中
三、通用脚本优化细节
- 启用
HTTP Cookie Manager:自动管理会话Cookie,避免因Cookie失效导致请求被拦截 - 添加
HTTP Header Manager:复制浏览器F12中导出的请求头,确保请求和真实用户行为一致 - 过滤冗余请求:录制时会生成大量静态资源请求(图片、CSS、JS),如果不需要测试静态资源性能,可通过
HTTP Request Defaults或Filter Results过滤掉,减少脚本冗余 - 做好参数关联:所有动态参数(比如csrf令牌、商品ID、会话ID)必须通过
Regular Expression Extractor或JSON Extractor从前面的响应中提取,不能硬编码 - 对比请求差异:用
View Results Tree查看JMeter请求和浏览器正常请求的参数、头信息、请求方式差异,快速定位问题
内容的提问来源于stack exchange,提问作者Srinivaso
相关产品推荐
相关产品推荐

