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

如何在JMeter中指定多用户名行循环执行Login API测试?

实现思路与步骤

1. 调整目标用户变量格式

把User Defined Variables里的用户名改成逗号分隔的字符串,比如:

target_users=Test1,Test3

后续要增删测试用户,直接修改这个字符串就行,不用改动逻辑代码。

2. 初始化用户数组与循环索引

在Thread Group下添加JSR223 Sampler,执行以下代码拆分用户列表并初始化循环参数:

// 拆分目标用户为数组
def targetUsers = vars.get("target_users").split(",")
vars.putObject("users_array", targetUsers)
// 记录数组长度,用于循环判断
vars.put("users_array_size", String.valueOf(targetUsers.length))
// 初始化当前用户索引
vars.put("current_user_index", "0")

3. 用While Controller控制多用户循环

添加While Controller,设置循环条件为:

${__jexl3(${current_user_index} < ${users_array_size},)}

这个条件会在遍历完所有目标用户后自动停止循环。

4. 取出当前待处理的用户名

在While Controller内部、CSV配置之前,添加JSR223 PreProcessor,取出当前索引对应的用户名:

def users = vars.getObject("users_array")
def currentIndex = Integer.parseInt(vars.get("current_user_index"))
def currentUser = users[currentIndex]
vars.put("current_username", currentUser)

5. 配置CSV数据过滤

修改CSV Data Set Config的参数:

  • Filename:保持你的CSV文件路径不变
  • Variable Names:Username,AccessKey,Token
  • Filter Records:勾选后输入过滤条件:
    ${__jexl3(Username == '${current_username}',)}
    
  • Recycle on EOF:设为False
  • Stop thread on EOF:设为False
    这样CSV只会加载当前用户名对应的行数据,确保后续API调用使用该用户的AccessKey和Token。

6. 放置用户专属API流程

把Login API以及该用户需要执行的所有后续API,放到While Controller内、CSV配置之后。这些API会自动读取当前用户的变量值。

7. 切换到下一个用户

在While Controller内的最后位置,添加JSR223 PostProcessor,更新循环索引:

def currentIndex = Integer.parseInt(vars.get("current_user_index"))
vars.put("current_user_index", String.valueOf(currentIndex + 1))
// 重置CSV读取指针(如果CSV的计数器变量为csv_counter,可根据实际调整)
vars.put("csv_counter", "0")

这一步会让下一次循环自动加载下一个用户的数据。

额外说明

  • 临时调整测试用户时,只需要修改User Defined Variables里的target_users字符串,无需改动其他逻辑。
  • 若CSV中存在同一用户名的多行数据,过滤条件会匹配所有对应行,配合循环可处理同一用户的多组测试数据。

内容的提问来源于stack exchange,提问作者Joseph Quiñones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:40:44