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

JMeter响应体多值匹配与并行请求迭代逻辑咨询

从响应体提取参数并实现JMeter并行请求解决方案

一、正则匹配与迭代逻辑修正

你的Groovy脚本核心思路可行,但存在关键逻辑错误:if (matcher) 的判断方式不对,Groovy中Matcher对象本身始终为true,需用 matcher.find() 确认是否匹配到目标内容。另外迭代时建议增加空值判断,避免无效循环。

修正后的脚本如下:

def i = 1
def results = [] 

while (true) {
    def match = vars.get("accountInfo_" + i)
    // 终止条件:变量不存在或为空
    if (!match) {
        break
    }
    // 正则匹配pa与pz间的数字、pxResults()内的参数
    def paPzPattern = /pa(\d+)pz\.pxResults\((\d+)\)/
    def matcher = (match =~ paPzPattern)
    if (matcher.find()) {
        def paNumber = matcher.group(1)
        def pxResultNumber = matcher.group(2)
        // 按需求组合格式,可直接生成请求所需参数串
        def requestParam = "pa${paNumber}_pxResult(${pxResultNumber})"
        results.add(requestParam)
        log.info("已提取参数组合:${requestParam}")
    }
    i++
} 

// 将结果存入JMeter变量,供后续并行控制器使用
vars.put("parallelRequestList", results.join(","))
// 返回结果用于调试
return results.join(', ')  

二、与Parallel Controller结合实现并行请求

1. 前置配置

  • 确保接口请求的正则表达式提取器中,Match No. 设置为 -1,让JMeter自动生成 accountInfo_1、accountInfo_2... 等批量变量,供脚本迭代读取。
  • 将上述修正后的Groovy脚本放入接口请求的 JSR223 PostProcessor 中。

2. 并行请求配置

  1. 添加 Parallel Controller,在设置里把「最大并行数」设为 6。
  2. 在Parallel Controller内添加 ForEach Controller:
    • 输入变量前缀:request_
    • 输出变量名称:currentRequest
    • 勾选「忽略第一个空值」
  3. 给ForEach Controller内的AJAX请求添加 JSR223 PreProcessor,拆分当前参数:
    def pattern = /pa(\d+)_pxResult\((\d+)\)/
    def matcher = (vars.get("currentRequest") =~ pattern)
    if (matcher.find()) {
        vars.put("paNumber", matcher.group(1))
        vars.put("pxResultNumber", matcher.group(2))
    }
    
  4. 在AJAX请求中,直接用 ${paNumber} 和 ${pxResultNumber} 填充所需参数即可。

3. 参数拆分辅助

在测试计划开头添加 User Defined Variables,或在Groovy脚本后加 JSR223 PostProcessor,用JMeter内置逻辑拆分参数列表:

// 拆分逗号分隔的参数列表为批量变量
def requestList = vars.get("parallelRequestList")
if (requestList) {
    def requests = requestList.split(',')
    for (int j = 0; j < requests.length; j++) {
        vars.put("request_${j+1}", requests[j].trim())
    }
}

这样ForEach Controller就能遍历所有提取到的参数组合,在Parallel Controller中最多同时运行6个AJAX请求,满足并行需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:22:39