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

如何使用JMeter并行控制器执行动态URL列表的并行请求

JMeter动态URL数量配置Parallel Controller并行请求实现方案

前置校验

首先确认你的URL提取规则配置正确:

  • 使用JSON提取器/正则表达式提取器提取URL时,匹配数字参数必须设为-1,即提取所有匹配结果
  • 提取完成后JMeter会自动生成两类变量:
    • url_matchNr:值为实际提取到的URL总数量
    • url_1、url_2...url_N:按顺序存储每个提取到的URL值
      可以添加Debug Sampler运行一次,确认上述变量生成正常。

具体配置步骤

  1. 添加Parallel Controller
    在URL提取器的作用域下游添加Parallel Controller,将其命名为URL并行请求控制器,控制器基础配置按需选择:如果需要在结果树中单独查看每个子请求的执行结果,取消勾选Generate parent sample选项即可。
  2. 添加初始化采样器
    在Parallel Controller的上级同级位置添加一个JSR223 Sampler,命名为初始化并行请求,语言选择Groovy,粘贴以下脚本:
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
import org.apache.jmeter.control.ParallelController

// 读取提取到的URL总数量
int totalUrl = (vars.get("url_matchNr") ?: "0") as int
if (totalUrl < 1) {
    log.info("未提取到有效URL,跳过并行请求生成")
    SampleResult.setSuccessful(true)
    return
}

// 定位指定名称的Parallel Controller
def parallelController = null
ctx.getThreadGroup().traverse { element ->
    if (element instanceof ParallelController && element.getName() == "URL并行请求控制器") {
        parallelController = element
        return true
    }
    return false
}

if (!parallelController) {
    log.error("未找到目标Parallel Controller,请检查命名是否一致")
    SampleResult.setSuccessful(false)
    SampleResult.setResponseMessage("并行控制器查找失败")
    return
}

// 清理历史生成的请求,避免重复添加
def removeList = []
parallelController.getTestElements().each { child ->
    if (child.getName().startsWith("request")) {
        removeList << child
    }
}
removeList.each { parallelController.removeTestElement(it) }

// 按URL数量动态生成对应HTTP请求
for (int i = 1; i <= totalUrl; i++) {
    String targetUrl = vars.get("url_${i}")?.trim()
    if (!targetUrl) continue

    HTTPSamplerProxy httpReq = new HTTPSamplerProxy()
    httpReq.setName("request${i}")
    // 以下配置按你的实际业务场景修改
    httpReq.setDomain(targetUrl)
    httpReq.setProtocol("https")
    httpReq.setPort(443)
    httpReq.setPath("/")
    httpReq.setFollowRedirects(true)
    httpReq.setUseKeepAlive(true)

    parallelController.addTestElement(httpReq)
}

SampleResult.setSuccessful(true)
SampleResult.setResponseData("已生成${totalUrl}个并行HTTP请求".getBytes("UTF-8"))
  1. 公共组件配置(按需)
    如果所有并行请求需要统一鉴权、请求头、Cookie等配置,直接将HTTP Header Manager、HTTP Cookie Manager、HTTP Request Defaults等配置元件放在Parallel Controller的上级或同级即可,会自动作用到所有动态生成的请求上。

效果验证

添加查看结果树后启动测试:

  • 首先执行初始化并行请求采样器,根据提取到的URL数量动态向Parallel Controller中添加对应数量的HTTP请求
  • 执行到Parallel Controller时,会自动并行启动所有生成的request1、request2...requestN请求,请求目标就是提取到的对应URL,完全匹配动态数量的需求

注意事项

  • 脚本中查找的Parallel Controller名称必须和你实际设置的控制器名称完全一致,否则会报错
  • 如果你提取的URL本身包含协议(如https://example.com/path),需要自行修改脚本逻辑拆分协议、域名、路径部分,不要直接用setDomain传入完整URL
  • 请使用JMeter Plugins官方发布的Parallel Controller组件,第三方修改版本可能存在动态添加采样器不兼容的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.18 16:15:45