JMeter Groovy脚本读取响应头值供后续请求使用的问题求助
JMeter JSR223 Groovy 读取响应头参数修复方案
原有代码问题
prev.getResponseHeaders()返回值为完整响应头拼接的字符串,而非键值对集合,直接调用each会逐字符遍历- 变量名拼写错误:定义变量为
headerList,内层遍历错误写为headersList,会触发未定义变量异常 - 语法错误:
if(it.equals("transactionRef")缺少右闭合括号,log.info"Required Header: "it缺少字符串拼接符,直接触发语法解析失败 - 匹配逻辑错误:响应头每行格式为
头名: 头值,直接与transactionRef做全等判断永远为假,无法匹配到目标响应头
修复后可用代码
// 读取前一个请求的全部响应头,按换行分割为单条头记录 def headerLines = prev.getResponseHeaders().split(System.getProperty("line.separator")) def requiredHeaderValue = null def targetHeaderName = "transactionRef" headerLines.each { line -> // 跳过空行 if (line.trim() == "") return // 仅分割第一个冒号,避免头值内含冒号时解析异常 def colonIndex = line.indexOf(":") if (colonIndex < 1) return def headerName = line.substring(0, colonIndex).trim() def headerValue = line.substring(colonIndex + 1).trim() if (headerName == targetHeaderName) { requiredHeaderValue = headerValue log.info("Required Header ${targetHeaderName} found, value: ${requiredHeaderValue}") // 匹配到目标后终止遍历 return } } // 将参数存入JMeter变量供后续请求调用 if (requiredHeaderValue != null) { vars.put("transactionRef", requiredHeaderValue) } else { log.error("Target header ${targetHeaderName} not found in response headers") }
使用说明
后续请求需要引用该参数时,直接使用JMeter变量语法${transactionRef}即可,脚本需放置在需要提取响应头的请求之后。
内容的提问来源于stack exchange,提问作者user1920
相关产品推荐
相关产品推荐

