JMeter基于动态UID生成并行请求的实现方案求助
动态并行处理多UID请求的JMeter解决方案
核心思路
利用Parallel Sampler结合JSR223 PreProcessor(Groovy),根据正则提取的动态UID列表在运行时生成所有需并行发送的请求,彻底解决ForEach顺序执行或嵌套Parallel Controller仅发1个请求的问题。
具体配置步骤
添加Parallel Sampler
- 在测试计划对应位置添加
Parallel Sampler(需提前安装Parallel Sampler插件)。 - 在Sampler配置中,设置Variable name containing request list为
parallelRequests(需与后续脚本变量名一致)。
- 在测试计划对应位置添加
为Parallel Sampler添加JSR223 PreProcessor
- 右键点击Parallel Sampler → 添加 → 前置处理器 → JSR223 PreProcessor。
- 选择脚本语言为
Groovy(性能优于其他脚本语言,优先推荐)。
编写Groovy脚本
将以下脚本粘贴到JSR223 PreProcessor的脚本框中,根据实际API需求调整URL、请求方法、头信息和请求体:
// 获取正则提取的UID总数 def uidTotal = vars.get("UID_matchNr") as Integer // 初始化请求列表 def parallelRequests = [] // 遍历所有UID,生成对应请求 for (int i = 1; i <= uidTotal; i++) { // 获取当前循环的UID值 def currentUid = vars.get("UID_${i}") // 构建请求URL(替换为实际接口地址,参数按需调整) def requestUrl = "https://your-target-api.com/process?uid=${currentUid}&source=jmeter" // 构建请求头(根据接口要求添加,无需项可删除) def requestHeaders = [ "Content-Type": "application/json", "X-Request-ID": UUID.randomUUID().toString(), "Authorization": "Bearer ${vars.get('auth_token')}" // 若需认证Token,提前存入变量 ] // POST请求需构建请求体(GET请求可删除此部分) def requestBody = """ { "uid": "${currentUid}", "operation": "validate", "timestamp": ${System.currentTimeMillis()} } """ // 将当前请求加入列表 parallelRequests.add([ url: requestUrl, method: "GET", // 改为POST/PUT等对应方法 headers: requestHeaders, body: requestBody // POST时保留,GET时删除 ]) } // 将请求列表存入变量,供Parallel Sampler读取 vars.putObject("parallelRequests", parallelRequests)
关键说明
- 正则提取器配置:确保正则提取器匹配编号设为-1,JMeter会自动生成
UID_1、UID_2...UID_N变量,以及UID_matchNr变量存储总数量。 - 脚本适配:根据实际接口修改
requestUrl、method、requestHeaders和requestBody,GET请求可移除body字段,表单提交可用parameters: [key: "value"]替代body。 - 插件依赖:需通过JMeter插件管理器安装Parallel Sampler插件。
注意事项
- Groovy性能:Groovy脚本执行效率高,处理300-350个请求无明显性能瓶颈。
- 变量作用域:确保
UID及其他需用到的变量(如auth_token)在JSR223 PreProcessor作用域内可访问。 - 并行控制:Parallel Sampler默认并行发送所有请求,请求数量由UID总数动态决定,无需额外设置线程数。
内容的提问来源于stack exchange,提问作者Varsha
相关产品推荐
相关产品推荐

