Jmeter(三十四)_Beanshell解析并提取json响应

Posted 飞天小子性能课堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter(三十四)_Beanshell解析并提取json响应相关的知识,希望对你有一定的参考价值。

 

https://pan.baidu.com/s/1df1HDkFzChYNAbsSazizpw 提取码:hhn7
jmeter 全系列文档资料

https://pan.baidu.com/s/1rD3H9EGbu0u11E8ofpAl3A 提取码:8q65
性能测试初级到高级系列资料 

1:前置条件

将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误

2:解析思路

利用beanshell获取到json响应,然后通过JSONObject 和JSONArray 将数组解析,遍历数组的length之后,提取参数值

我们需要解析如下的json响应,提取出中间的Name和population

 

//导入json包
import org.json.*;
//获取获取请求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印获取请求的返回值
log.info(response_data);
//将String类型的返回值构造成JSONObject对象
JSONObject data_obj = new JSONObject(response_data);

//获取作为下一个请求post的参数值Province(两种方式)
//String Provincelist_str = data_obj.get("Province").toString();
JSONArray Provincelist_str = data_obj.getJSONArray("Province");
//log.info(Provincelist_str);

//获取Province数组的长度
int len = Provincelist_str.length();

String strlen = Integer.toString(len);

vars.put("MessageNum",strlen);

log.info(strlen);

int i = 0;

for(;i < len;++i)
{
//获取 data[ i ] 数组对象
JSONObject jsonTemp = (JSONObject)Provincelist_str.getJSONObject(i);

switch(i)

{
case 0:
//两种提取参数的写法
String NameItems = jsonTemp.getString("Name");
// String NameItems = jsonTemp.get("Name").toString();

// 两种打印参数的方法
// vars.put("Name_1", jsonTemp.getString("Name"));
vars.put("Name_1", NameItems);
log.info(NameItems);

}
}

加debug之后,发现提取到了两组数据,分别是省份和人口,之后就可以在后续接口进行调用了

 

 

以上是关于Jmeter(三十四)_Beanshell解析并提取json响应的主要内容,如果未能解决你的问题,请参考以下文章

JMeter学习(三十四)测试报告优化

JMeter学习(三十四)测试报告优化

Jmeter(三十四)Jmeter-Question之“Cookie获取”

jmeter beanshell调用jmeter函数

Jmeter 常用函数(19)- 详解 __BeanShell

JMeter学习(三十六)发送HTTPS请求(转载)