You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,也可以用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:25:34