You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在JMeter中实现从下拉菜单随机选择账户(正则关联场景下的多用户随机需求)

嘿,我来帮你搞定这个随机选账户的需求!结合你已经完成的脚本关联和CSV配置,这里有几个实用的方案,从简单到灵活都能适配你的场景:

解决方案

1. 快速调整CSV数据集配置实现基础随机

这是最直接的方法,不用改太多脚本,只需要调整你的CSV数据集配置UI:

  • 打开CSV数据集配置面板,找到**「允许随机顺序」**选项并勾选(默认是按顺序读取,勾选后每次迭代会随机抽取CSV里的一行)
  • 把**「共享模式」**设置为当前线程组(让每个虚拟用户独立随机选账户,避免多个用户重复选同一个)
  • 如果你的CSV包含用户名和密码两列,直接在登录请求里引用对应的变量(比如${username}${password})就行,每次登录都会自动随机取一组账户。

2. 手动用函数实现更灵活的随机控制

如果需要更精准的控制(比如指定随机范围、和其他逻辑联动),可以用测试工具的内置函数组合实现:

  1. 先把CSV里的所有账户提前存入用户自定义变量,比如:
    • account_1=user1, account_1_pwd=pwd1
    • account_2=user2, account_2_pwd=pwd2
    • ...直到account_5=user5, account_5_pwd=pwd5
  2. 在登录请求的前置处理器里,生成1-5的随机数:
    ${__Random(1,5,random_acc_id)}
    
    这里random_acc_id是存储随机数的变量名
  3. __V函数引用对应的账户和密码:
    • 用户名:${__V(account_${random_acc_id})}
    • 密码:${__V(account_${random_acc_id}_pwd)}
      这样每次登录都会随机选取一个1-5的账户组。

3. 进阶:避免同一用户重复选取相同账户

如果要保证同一个虚拟用户的每次迭代(每次登录)都选不同的账户(就像你例子里第一次选1、第二次选5的效果),可以用Groovy代码实现:

  1. 在登录请求的JSR223 PreProcessor里添加以下代码:
    // 从CSV读取的账户列表(也可以直接从CSV配置变量里获取)
    def accountList = [
        ["user1", "pwd1"],
        ["user2", "pwd2"],
        ["user3", "pwd3"],
        ["user4", "pwd4"],
        ["user5", "pwd5"]
    ]
    // 获取当前用户已使用的账户
    def usedAccounts = vars.get("used_accs")?.split(",") ?: []
    // 筛选出未使用的账户
    def availableAccs = accountList.findAll { acc -> !usedAccounts.contains(acc[0]) }
    // 如果所有账户都用过了,重置已使用列表
    if (availableAccs.isEmpty()) {
        usedAccounts = []
        availableAccs = accountList
    }
    // 随机选一个可用账户
    def randomAcc = availableAccs[new Random().nextInt(availableAccs.size())]
    // 存入变量供登录请求使用
    vars.put("current_user", randomAcc[0])
    vars.put("current_pwd", randomAcc[1])
    // 更新已使用账户列表
    usedAccounts.add(randomAcc[0])
    vars.put("used_accs", usedAccounts.join(","))
    
  2. 在登录请求里引用${current_user}${current_pwd}即可,这样同一个用户每次登录都会选之前没用到的账户,用完所有账户后再循环。

4. 适配已有的关联配置

因为你已经完成了正则关联,只需要把原来固定的账户变量替换成上面生成的随机变量(比如${current_user}),确保登录请求的参数引用正确即可,不需要修改关联逻辑。

附:参考CSV格式

如果用第一种方案,你的CSV可以是这样的(第一行是表头,后续每行是一组账户):

username,password
user1,pwd1
user2,pwd2
user3,pwd3
user4,pwd4
user5,pwd5

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

火山引擎 最新活动