Jmeter(4)Beanshell获取响应体的某一字段

本文介绍如何使用JMeter配合json.jar插件,通过Beanshell后置处理器解析JSON响应体并提取所需字段值的方法,适用于接口自动化测试场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般,提取请求的响应体某个字段时可以采用正则提取器、边界提取器、json提取器等等,操作比较简单。
除此之外,还可以使用Beanshell后置处理器提取响应体的字段值,将json格式的响应体为字符串类型的内容转换为JSON对象,从而利用JSON对象的方法轻松的得到我们期望的值。

前提
需要提前下载好json.jar插件,然后将该jar包放入jmeter安装目录/lib/ext下。

请求返回报文如下

{	"code": 0,
	"success": true,
	"message": "成功",
	"data": {
		"amount": 8000,
		"SpuIdlist": [{
			"SkuId": 22044,
			"name": "iphone13"},
			{"SkuId": 22045,
			"name": "huawei"}]
			}
}

取data下的amount
思路:

  1. new一个JSONObject对象
  2. 利用对象的get(“字段”)方法获取字段内容,获取的类型根据实际获取的内容决定,String、int、数组等都有可能
  3. 继续获取下一个层级data下面amout的值,每一个层级间用点 . 表示,由于amount值为整型,打印时要转换成String类型
import org.json.*;   //导入org.json包

String Response = prev.getResponseDataAsString();    //获取响应数据Response
log.info("响应体数据:" + Response);

JSONObject responseJson = new JSONObject(Response);  //整个Response作为JSON对象
success = responseJson.get("success");        //通过对象的get("字段")方法获取字段内容
log.info("响应code字段:" + success);
amount= responseJson.get("data").get("amount");
log.info("响应amount字段:" + amount.toString());

如果需要继续获取SpuIdlist数组的话,
方法1:

接上文
amount= responseJson.get("data").get("SpuIdlist");
log.info("响应SpuIdlist数组:" + SpuIdlist.toString());

方法2:

import org.json.*;   //导入org.json包

String Response = prev.getResponseDataAsString();    //获取响应数据Response

JSONObject responseJson = new JSONObject(Response);  //整个响应体Response转化为JSON对象
//通过responseJson对象,按层级获取数组第一个元素的值,直接转换为json对象
JSONObject listJson=(JSONObject)responseJson.get("data").get("SpuIdlist").get(0);
log.info(listJson.get("SkuId"));
回答: 根据提供的引用内容,可以看出你想要在JMeterBeanShell后置处理程序中获取响应结果中的data里的Id数据。你可以使用以下代码来实现这个目标: ``` import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSON; import java.util.Map; String response_data = prev.getResponseDataAsString(); JSONObject data_obj = JSON.parseObject(response_data); String str = data_obj.getString("data"); log.info("str:" + str); JSONObject jsondata = JSON.parseObject(str); String Id = jsondata.getString("Id"); vars.put("Id", Id); log.info("Id:" + Id); ``` 这段代码将会解析响应结果中的data字段,并将其中的Id值存储在JMeter的变量中,以便后续使用。请确保你已经在测试计划中加载了fastjson-1.2.75.jar,并在BeanShell后置处理程序中正确引入了相关的类。 #### 引用[.reference_title] - *1* [jmeterBeanShell 后置处理程序打印报错接口的请求与返回](https://blog.youkuaiyun.com/dream_back/article/details/124432485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [jmeter BeanShell 后置处理程序 读取响应消息](https://blog.youkuaiyun.com/sijin_190527/article/details/122041963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [jmeter BeanShell 后置处理程序获取请求响应头数据做关联](https://blog.youkuaiyun.com/baidu_31295661/article/details/122195830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值