JMeter中JSON Extractor如何按travelID长度提取BoundId
实现JMeter中按travelID长度条件提取BoundId的方法
完全可行,以下两种方法可实现需求:
方法一:使用JSON Extractor结合JSON Path表达式
利用JMeter JSON Extractor支持的正则匹配,直接通过JSON Path筛选符合条件的节点:
配置JSON Extractor时,将JSON Path Expression设置为:
$..Itemdetails[?(@.availabilityDetails[*].travelID =~ /.{33}/)].BoundId该表达式会递归查找所有包含长度为33的travelID的
Itemdetails节点,并提取对应的BoundId。- 原理:
/.{33}/是正则表达式,匹配任意33个字符的字符串,精准对应travelID的长度要求;$..用于遍历所有层级的Itemdetails节点。
- 原理:
其他参数(如Reference Name、Match No.等)按原有需求配置即可。
方法二:使用JSR223 PostProcessor(Groovy脚本)
如果JSON Path的函数支持有限,用Groovy脚本可实现更灵活的逻辑:
- 添加JSR223 PostProcessor,选择Groovy作为脚本语言。
- 输入以下脚本:
脚本会遍历响应JSON的层级结构,检查每个travelID的长度,符合条件时提取对应的BoundId并存入JMeter变量。import groovy.json.JsonSlurper def responseBody = prev.getResponseDataAsString() def json = new JsonSlurper().parseText(responseBody) def targetBoundId = null json.data.RenewalDetails.each { renewal -> renewal.Itemdetails.each { item -> item.availabilityDetails.each { avail -> if (avail.travelID?.length() == 33) { targetBoundId = item.BoundId return // 找到第一个匹配项后退出循环 } } if (targetBoundId) return } } if (targetBoundId) { vars.put("BoundId", targetBoundId) // 将结果存入变量供后续使用 }
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

