如何使用JMeter并行控制器执行动态URL列表的并行请求
JMeter动态URL数量配置Parallel Controller并行请求实现方案
前置校验
首先确认你的URL提取规则配置正确:
- 使用JSON提取器/正则表达式提取器提取URL时,匹配数字参数必须设为
-1,即提取所有匹配结果 - 提取完成后JMeter会自动生成两类变量:
url_matchNr:值为实际提取到的URL总数量url_1、url_2...url_N:按顺序存储每个提取到的URL值
可以添加Debug Sampler运行一次,确认上述变量生成正常。
具体配置步骤
- 添加Parallel Controller
在URL提取器的作用域下游添加Parallel Controller,将其命名为URL并行请求控制器,控制器基础配置按需选择:如果需要在结果树中单独查看每个子请求的执行结果,取消勾选Generate parent sample选项即可。 - 添加初始化采样器
在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"))
- 公共组件配置(按需)
如果所有并行请求需要统一鉴权、请求头、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
相关产品推荐
相关产品推荐

