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

如何修改JMeter电商负载测试脚本实现随机选择分类与子分类

电商Web应用JMeter负载测试脚本优化方案

一、核心需求拆解

实现随机选择主分类(女装、男装、童装)及对应子分类(上衣、下装、连衣裙等),动态生成分类/子分类的GET请求,替代原脚本中固定的女装分类逻辑。

二、具体实现步骤

1. 整理分类与子分类映射关系

先把所有主分类、子分类的ID和对应关系整理成CSV文件,方便后续随机读取和维护:

# 主分类列表(categories.csv)
主分类ID,主分类名称
423426002,女装
423426003,男装
423426004,童装

# 子分类列表(subcategories.csv,关联主分类ID)
主分类ID,子分类ID,子分类名称
423426002,5468790,上衣
423426002,5468791,下装
423426003,5468800,上衣
423426003,5468801,下装
423426004,5468810,连衣裙
423426004,5468811,套装

2. 随机读取主分类

  • 添加CSV Data Set Config组件,配置如下:
    • 文件名:指向categories.csv
    • 变量名称:main_cat_id,main_cat_name
    • 分隔符:,
    • 读取模式:Random order(随机读取每条主分类)
    • 其他保持默认

3. 关联读取对应子分类

  • 添加Filtered CSV Data Set Config(需先安装JMeter插件管理器,安装"Filtered CSV"插件),配置如下:
    • 文件名:指向subcategories.csv
    • 变量名称:sub_cat_id,sub_cat_name
    • 分隔符:,
    • 过滤条件:主分类ID == ${main_cat_id}(只读取当前主分类对应的子分类)
    • 读取模式:Random order(随机选一条子分类)

如果不想装插件,也可以用JSR223 Sampler写简单代码实现:

// 读取子分类CSV并过滤当前主分类对应的条目
def subcats = new File('subcategories.csv').readLines().drop(1).findAll { line ->
    line.split(',')[0] == vars.get('main_cat_id')
}
// 随机选一条
def randomSubcat = subcats[new Random().nextInt(subcats.size())].split(',')
vars.put('sub_cat_id', randomSubcat[1])
vars.put('sub_cat_name', randomSubcat[2])

4. 替换脚本中的硬编码请求

把原脚本中固定的分类URL替换为变量:

  • 主分类请求:${主URL}/browse/category/${main_cat_id}
  • 子分类请求:${主URL}/browse/category/${main_cat_id}/subcategory/${sub_cat_id}

5. 动态提取子分类(可选,若需从页面响应中获取子分类)

如果不想预先维护CSV,而是想从主分类页面的响应中动态提取子分类并随机选择:

  • 在主分类请求后添加正则表达式提取器:
    • 引用名称:subcat_ids
    • 正则表达式:/browse/category/.*?/subcategory/(\d+)
    • 模板:$1$
    • 匹配数字:-1(提取所有子分类ID)
  • 添加随机变量组件:
    • 变量名称:random_idx
    • 最小值:1
    • 最大值:${subcat_ids_matchNr}(匹配到的子分类数量)
  • 子分类请求URL改为:${主URL}/browse/category/${main_cat_id}/subcategory/${subcat_ids_${random_idx}}

6. 适配不同分类的筛选逻辑

如果不同分类的筛选条件(如尺码)有差异,可添加If Controller:

  • 条件设置:${main_cat_name} == "女装"
  • 在Controller下添加女装专属的筛选请求;同理复制Controller修改条件,添加男装、童装的筛选逻辑。

三、注意事项

  • 确保脚本中所有会话相关参数(如Cookie、VIEWSTATE等)都通过正则表达式提取器或JSON提取器动态获取,避免硬编码导致请求失败。
  • 运行脚本前先单独调试单条请求,验证变量替换是否正确,分类跳转是否正常。

内容的提问来源于stack exchange,提问作者Raxon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:53:11