如何在JMeter中按指定条件提取JSON中的同名字段值?
在JMeter中提取指定条件的JSON字段值
嘿,我来给你一步步讲怎么搞定这个需求——从返回的JSON数组里,找到customerPpid=467133011的对象,提取它对应的customerFormattedPhoneNumber值。这里有两种实用方法,你可以根据情况选:
方法1:用JSON Extractor(推荐,简单高效)
这是JMeter自带的专门处理JSON的组件,不用写代码,配置一下就行:
- 第一步:在返回目标JSON的HTTP请求下面,右键选择
Add -> Post Processors -> JSON Extractor - 第二步:填写以下配置项:
- Reference Name:给提取到的值起个变量名,比如
targetPhone(后续用${targetPhone}调用) - JSON Path Expression:填这个路径表达式:
$.[?(@.customerPpid == '467133011')].customerFormattedPhoneNumber注意:因为你的
customerPpid是字符串类型,所以要给数值加单引号;如果是数字类型就去掉引号 - Match No.:填
1(我们只需要第一个匹配的结果,这里也只有一个符合条件的对象) - Default Value:可以填
NOT_FOUND之类的默认值,防止没找到结果时变量为空
- Reference Name:给提取到的值起个变量名,比如
- 第三步:配置完后,运行脚本,就能用
${targetPhone}拿到你要的(786)402-9010了
方法2:用JSR223 PostProcessor(适合复杂逻辑)
如果后续需要做更多自定义处理,或者你更习惯写代码,就用这个方法,推荐选Groovy语言(性能最优):
- 第一步:同样在HTTP请求下面,右键选择
Add -> Post Processors -> JSR223 PostProcessor - 第二步:在组件的Language下拉框里选
groovy - 第三步:在Script框里粘贴这段代码:
import groovy.json.JsonSlurper // 获取接口返回的JSON字符串 def responseBody = prev.getResponseDataAsString() def jsonParser = new JsonSlurper() def jsonArray = jsonParser.parseText(responseBody) // 遍历数组,找到符合customerPpid条件的对象,提取手机号 def desiredPhone = jsonArray.find { item -> item.customerPpid == '467133011' }?.customerFormattedPhoneNumber // 将结果存入JMeter变量,找不到的话用默认值 vars.put("targetPhone", desiredPhone ?: "NOT_FOUND")代码里的
?.是安全导航符,避免找不到对象时抛出空指针异常 - 第四步:同样用
${targetPhone}引用提取到的值
验证提取结果的小技巧
可以添加一个Debug Sampler到测试计划里,运行脚本后查看Debug Sampler的响应数据,就能看到targetPhone变量是否正确获取到了目标值。
内容的提问来源于stack exchange,提问作者Ghosh Banti
相关产品推荐
相关产品推荐

