如何配置JMeter实现N个用户持专属令牌各自执行多类型多轮动作
核心问题根因
配置错误主要集中在2个维度:CSV数据集共享模式不符合多线程分配逻辑,未对登录、动作循环的执行范围做正确限制,才会出现用户漏跑、重复执行的问题。
具体调整方案
1. 基础组件配置修正
用户凭据CSV配置调整
- 文件名选择你的用户列表CSV文件
- 变量名称按CSV实际列定义,比如
username,password - 分隔符和CSV实际分隔符保持一致
- 共享模式选择「当前线程组」
- 「在文件结束时再循环」设置为
False - 「在文件结束时停止线程」设置为
True
该配置可以保证100个线程刚好匹配100个用户,不会出现用户漏读、重复读取的问题。
登录逻辑调整
- 给登录请求添加
仅一次控制器作为父组件,保证每个线程(对应单个用户)只会执行一次登录,不会重复获取令牌 - JSON Extractor配置:参考值名称填
access_token,JSON Path Expression按登录接口实际返回结构调整,比如$.data.token,匹配号填1 - 后续业务Header Manager中的Authorization字段填
Bearer ${access_token}即可,JMeter线程变量为线程隔离,不会出现多用户令牌串用的问题。
2. 动作类执行逻辑配置
每类动作都统一按照以下结构配置即可:
- 新增
循环控制器,循环次数设置为100(匹配单用户单类动作执行100次的要求) - 循环控制器下添加对应类别的动作CSV配置,配置要求:
- 文件名选择对应动作的CSV文件
- 变量名称按动作CSV的实际列定义
- 共享模式选择「当前线程」
- 「在文件结束时再循环」设置为
True,如果单类动作CSV的总数据量≥10000(100用户×100次),可以设置为False保证所有动作数据不重复
- CSV配置下添加对应动作的HTTP请求,直接引用CSV提取的变量即可。
3. 最终测试计划结构参考
- 测试计划 - 全局Header Manager - HTTP请求默认值 - 用户凭据CSV配置(按上述要求配置) - 线程组(线程数100,循环次数设为1,Ramp-Up时间按需调整) - 仅一次控制器 - 登录请求 - JSON Extractor(提取令牌存为${access_token}变量) - 业务Header Manager(配置Authorization: Bearer ${access_token}) - 第一类动作循环控制器(循环次数100) - 第一类动作CSV配置 - 第一类动作HTTP请求 - 第二类动作循环控制器(循环次数100) - 第二类动作CSV配置 - 第二类动作HTTP请求 - 剩余动作类别均按上述结构依次添加
调试建议
正式压测前可以先将线程数改为2、单类动作循环次数改为2,执行后查看结果树中的用户参数、令牌、动作入参是否符合预期,确认逻辑正确后再恢复正式配置执行。
内容的提问来源于stack exchange,提问作者Nunes
相关产品推荐
相关产品推荐

