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

JMeter后台同步请求并行执行异常问题及优化方案咨询

JMeter同步场景问题修复及替代实现方案

一、用户详情重复问题修复

你的核心问题是全局props被多线程覆盖:props是JMeter的全局属性,所有线程共享,当多个用户登录时,后登录的用户会覆盖props里的令牌、用户ID,导致第二个线程组的所有线程都拿到最后一个用户的信息,出现重复。修复方案如下:

  1. 为每个线程单独存储用户数据

    • 登录线程组中,提取令牌和用户ID后,结合线程编号用__setProperty函数存储:
      • 存储令牌:${__setProperty(token_${__threadNum},${token},)}(${token}为你提取的令牌变量)
      • 存储用户ID:${__setProperty(userId_${__threadNum},${userId},)}(${userId}为你提取的用户ID变量)
    • 同步线程组中,获取对应线程的用户数据:
      • 获取令牌:${__P(token_${__threadNum},)}
      • 获取用户ID:${__P(userId_${__threadNum},)}
  2. 调整登录等待逻辑为线程独立判断
    不要用全局的login=true作为while循环的判断条件,改为每个线程独立的登录状态:

    • 登录线程组中,登录成功后设置当前线程的属性:${__setProperty(loggedIn_${__threadNum},true,)}
    • 同步线程组的while循环条件改为:${__jexl3(${__P(loggedIn_${__threadNum},false)} != true,)},确保每个线程只等待自己的登录完成。

二、其他同步场景实现方法

除了双线程组的方式,还有几种更简洁的实现思路:

方法1:同一线程组内实现并行+定时循环

不需要拆分线程组,在同一个线程组内完成登录、主业务请求、同步请求的并行:

  • 添加Parallel Controller(需通过JMeter插件管理器安装"Parallel Controller and Samplers")
  • Parallel Controller下分两个分支:
    • 分支1:放置你的主业务请求流程
    • 分支2:复用登录后的线程变量,添加Loop Controller(循环次数设为5),里面放同步请求,再添加Constant Timer(设置60000毫秒),确保每次同步请求间隔60秒。
      这种方式下每个线程的用户数据都是独立的,不会出现覆盖问题。

方法2:单线程组内用Loop+定时器实现

如果不需要和主请求严格并行,只是同步请求每60秒执行一次:

  • 登录请求完成后,添加Loop Controller(循环次数设为5)
  • 循环控制器内放置同步请求,然后添加Constant Timer,设置60000毫秒,这样每次同步请求执行后等待60秒再执行下一次。
  • 主业务请求可根据需求放在循环控制器外或调整执行顺序。

方法3:使用Test Action Sampler控制等待

在同步线程组中,用Test Action Sampler替代while循环的等待逻辑:

  • 同步线程组启动后,先执行Test Action Sampler,通过__jexl3判断当前线程的登录状态,未登录则设置"Duration (ms)"为1000(等待1秒)后重试,避免空转占用资源
  • 确认登录状态后,添加Loop Controller执行5次同步请求,每次请求后添加Test Action Sampler设置等待60000毫秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:31:19