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

如何在JMeter事务控制器中并行运行请求?解决线程数超标问题

如何在JMeter中模拟混合串行/并行的登录事务(替代LoadRunner的web_concurrent_start)

核心问题分析

你遇到的线程暴增问题,是因为默认Parallel Controller会为每个子请求创建独立线程,这和浏览器的并行请求逻辑不符。浏览器是在同一个会话线程内异步发起多个请求,而非创建大量线程。要实现类似LoadRunner web_concurrent_start()的效果,需要用更贴合浏览器行为的并发控制方式。


解决方案步骤

1. 安装bzm - Parallel Controller插件

这个插件提供了同线程内异步执行请求的模式,不会额外创建线程,完美匹配浏览器的并行请求逻辑。可以通过JMeter插件管理器搜索「bzm - Parallel Controller」一键安装,也可以手动下载jar包放到JMeter的lib/ext目录下重启JMeter。

2. 配置并行控制器的执行模式

将需要并行执行的请求放入bzm - Parallel Controller,然后修改控制器的核心配置:

  • 找到Execution Mode选项,选择「Parallel execution within the same thread (using HttpClient Async)」
  • 可选:设置Max Concurrency参数,匹配浏览器的并发连接限制(比如Chrome默认单域名6个并发)

3. 组合串行与并行逻辑

按照浏览器实际请求顺序组织JMeter结构:

  • 串行部分:直接放在线程组下(比如初始的登录页面GET请求、登录表单提交请求)
  • 并行部分:将需要同时发起的请求(如静态资源、并行接口)放入配置好的bzm - Parallel Controller中

示例结构:

Thread Group(2个线程,1个用户/线程)
  - HTTP Request: GET 登录页面(串行)
  - bzm - Parallel Controller(同线程异步模式)
    - HTTP Request: 加载登录页CSS
    - HTTP Request: 加载登录页JS
    - HTTP Request: 获取验证码接口
  - HTTP Request: POST 登录表单(串行)
  - bzm - Parallel Controller(同线程异步模式)
    - HTTP Request: 获取用户菜单接口
    - HTTP Request: 获取系统通知接口

4. 事务统计配置

如果需要统计整个登录流程的总耗时,直接将上述整个结构放入Transaction Controller即可。注意勾选控制器的「Include duration of timer and pre-post processors in generated sample」选项,确保统计完整的事务耗时。


验证与注意事项

  • 线程数验证:运行脚本后,JMeter的线程数应与你线程组设置的一致(比如2个),不会出现几百个额外线程
  • HTTP请求实现:确保所有HTTP请求的「Implementation」设置为「HttpClient4」,异步模式依赖该实现
  • 对照浏览器请求:通过开发者工具的「网络」标签,确认并行请求的分组和顺序,保证JMeter结构与实际浏览器行为一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:18:27