1、环境准备

1)  Jmeter、JDK

2) 将json.jar包置于..\lib\下

json包下载地址:https://mvnrepository.com/ (国内的maven地址)

可以参考:(https://blog.csdn.net/weixin_42636552/article/details/84929768)

3)Beanshell处理器:import org.json.*; 也可以 import org.json.JSONObject; import org.json.JSONAarry;主要是处理这两种类型的数据,Json对象和Json数组

2、主体思想

  1).获取response返回的数据(返回值)    

    String response_data = prev.getResponseDataAsString(); //自定义一个变量response_data,来获取请求的返回值String

  2).利用上一步获取的字符串形式的JSON,结合Java处理Json的方法,将需要的键值提取出来;

    JSONObject response =  new JSONObject(response_data); //自定义一个对象response,将返回值构造JSON对象

    这里构造的是JSONObject(对象JSON)也可以自己构造JSONAarry(数组对象)方法是一样的  
              JSONArray data_array = new JSONArray();

//获取响应结果中参数jobs值; jobs为数组
            JSONArray data_array = data_obj.get("data").getJSONArray("jobs");

  3).获取需要拿到的数据

    String total_metaData = response.get("data").get("pageMetaData").get("totalSize").toString();

  4).设置为Jmeter中的全局变量,供后续使用

    vars.put("total_meta",total_metaData); 

3、示例代码:

import org.json.*; //注意-------需要jmeter的lib/ext中放入 json.jar包//获取jmeter接口请求返回值。此处获取到String类型;
String response_data  = prev.getResponseDataAsString();
String result = "";
String status="";
try {result = java.net.URLDecoder.decode(response_data, "UTF-8");
} catch (UnsupportedEncodingException e) {e.printStackTrace();
}//将接口响应结果转换为jsonobject对象
JSONObject data_obj=new JSONObject(response_data);//获取响应结果中参数jobs值; jobs为数组
JSONArray data_array = data_obj.get("data").getJSONArray("jobs"); //获取jobs数组的长度
int len = data_array.length();
if(len >= 0){//只取第一个数据的值,这个是最新值JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(0);status = jsonTemp.get("status").toString();log.info("status------>"+status);
}
if(status.contains("SUCCEEDED")) {Failure = false;FailureMessage = "断言成功";log.info("断言成功");
}else{Failure = true;FailureMessage = "断言失败";log.info("断言失败");
}

代码中使用的json数据格式如下:

{"msg": "ok","code": 1000,"data": {"jobs": [{"jobName": "job0","isChecked": false,"status": "SUCCEEDED",}, {"jobName": "job1","isChecked": false,"status": "SUCCEEDED",}, {"jobName": "job03","isChecked": false,"status": "KILLED",}],"totalJobs": 3,"totalPages": 1,"pageSize": 10,"currentPage": 1},"time_used": 1008,"request_id": "ca94cb21-b769-47d9-b8c8"
}

4、解析JSON串的方法

一)、解析接口请求返回json中含数组的一层对象的简单结构
1 数据结构如下:

{
“data”: [{“cpid”: “20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4”,“dbServerName”: “192.168.0.1”},{“cpid”: “20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6”,“dbServerName”: “172.15.103.27”}],
“pageIndex”: 0,
“pageNo”: 1,
“pageSize”: 10
}

2. 如解析1中的数据指定ip为192.168.0.1的cpid,代码如下:

import org.json.JSONObject; //需要jmeter的lib/ext中放入 json.jar包
import org.json.JSONArray;//获取jmeter接口请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
//log.info(“response_data------>”+response_data); //jmeter beanshell打印出返回的结果JSONObject data_obj = new JSONObject(response_data); //将接口响应结果转换为jsonobject对象
JSONArray data_array = data_obj.getJSONArray(“data”); //获取响应结果中参数data值; data为数组
//log.info(“data_array------>”+data_array.toString());int len = data_array.length(); //获取data数组的长度String strlen = Integer.toString(len);
String cpidR="";//循环data数据中的数据找到要获取的指定数据
for(int i = 0;i <len;i++){JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i);//log.info(“jsonTemp------>”+jsonTemp.toString());String dbServerName = jsonTemp.get(“dbServerName”).toString(); //获取data中的dbServerName//log.info(“dbServerName”+i+"------>"+dbServerNameR);if(dbServerName.equals("192.168.0.1") ){cpidR = jsonTemp.get("cpid").toString();  //将满足条件的数据获取赋值给全局变量cpidRbreak;}else{continue;}
}
log.info(“cpidR------>”+cpidR);
vars.put(“orcl_cpid”,cpidR); //将获取的满足条件的cpidR值存为jmeter变量,提供下个接口使用,下个接口直接使用此处的${orcl_cpid}即可
return “成功返回cpid”;

二)、解析接口请求返回json中含数组的多层对象的复杂结构
1. json数据结构

{
“data”: [{“cpid”: “20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4”,“dbServerName”: “192.168.0.1”“coonpool”:{“poolid”:“123456789”,“poolname”:“nametest”} //第二层对象},{“cpid”: “20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6”,“dbServerName”: “172.15.0.25”“coonpool”:{“poolid”:“A123456789”,“poolname”:“nametest”}}
],
“pageIndex”: 0,
“pageNo”: 1,
“pageSize”: 10
}

2. jmeter使用beanshell解析的java代码如下:
需求:获取poolid为123456789的poolname与cpid

import org.json.JSONObject;
import org.json.JSONArray;//获取请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
log.info(“response_data------>”+response_data);JSONObject data_obj = new JSONObject(response_data);
JSONArray data_array = data_obj.getJSONArray(“data”); //获取响应结果中参数data值; data为数组log.info(“data_array------>”+data_array.toString());
int len = data_array.length(); //获取data数组的长度String strlen = Integer.toString(len);
String cpid ="";
String poolname="";for(int i = 0;i <len;i++){JSONObject responseRunVo1 = (JSONObject)data_array.getJSONObject(i);JSONObject responseRunVo2 = (JSONObject)jsonTemp.getJSONObject(“connpool”);// log.info(“获取数组的第二层对象元素:”+responseRunVo);String poolidR= responseRunVo2.getString("poolid");if (poolidR.equals("123456789") ){cpid =responseRunVo1.getString("cpid");   //第一层对象的数据poolname= responseRunVo2.getString("poolname");  //第二层对象的数据           break;}else{continue;}
}log.info(“cpid------>”+cpid);
log.info(“poolname------>”+poolname);vars.put(“orcl_cpid”,cpid);
vars.put(“orcl_poolname”,poolname);
//下个接口可以直接使用变量orcl_cpid与orcl_poolname获取结果值
return “成功返回”;

Jmeter BeanShell使用json.jar包处理Json数据相关推荐

  1. BeanShell使用json.jar包处理Json数据

    环境准备 ①Jmeter版本 ,JDK ②前置条件:将json.jar包置于..\lib\下, 如果还是报错,可以将该jar包添加到测试计划的Library中:否则会报:Typed variable ...

  2. Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换

    总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain;public class ...

  3. java json解析jar包,解析json常用jar包

    13.轻量级的 JSON API:内置了一个轻量级的 JSON API 14.响... 1.加入 Jackson.jar? 2.在配置文件中配置 json 的映射? 3... 和json都是一种数据交 ...

  4. jmeter 导入java,JMeter导入自定义的Jar包的详解教程

    1.简介 原计划这一篇是介绍前置处理器的基础知识的,结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢???我一一回复告诉他们和引入插件的Jar包一样的道理,一通百 ...

  5. java转json jar包_java转换json需导入的jar包说明

    commons-beanutils-1.8.0.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBe ...

  6. java json jar包_jsonobject jar包下载

    JSONObject所必须的6个jar包分享给需要的朋友,这是json开发必备的jar工具架包,如果您正需要的话不如马上来脚本之家下载这款官方最新的jsonobject jar包供您进行json开发, ...

  7. 外部jar包_大数据系列之PySpark读写外部数据库

    本文以MySQL和HBASE为例,简要介绍Spark通过PyMySQL和HadoopAPI算子对外部数据库的读写操作 1.PySpark读写MySQL MySQL环境准备参考"数据库系列之M ...

  8. java jdbc jar包_大数据从入门到深入:JavaEE 之 数据库技术 JDBC(1)

    1章 JDBC 1.1 JDBC概述 JDBC(Java DataBase Connectivity,java动态数据 库连接技术)是一种用于执行SQL语句的Java API : Applicatio ...

  9. json jar包支持

    json-lib工具包(json核心包) 下载地址: json-lib-2.4-jdk15.jar http://sourceforge.net/projects/json-lib/files/jso ...

最新文章

  1. 使用Depth Texture
  2. C#调用WebService实例和开发
  3. 【解决方案】vue不是内部或外部命令
  4. 傻瓜都能看懂的高并发量服务器架构
  5. 获取map第一个的key和value_Hadoop学习之路(3)Map-Shuffle-Reduce详解与源码
  6. % mysql 代表_MySQL中的星号(*)和百分号(%)代表表示什么,MySQL的库名、表名、字段名、字段值是否区分大...
  7. 计算机可以调剂其他专业吗,机械能跨专业调剂计算机吗
  8. springcloud之eureka集群搭建
  9. matlab 绘图 模板,【科研绘图】MATLAB可视化代码模板
  10. MiiX私享会 · 第六期: BCH姜家志100分钟深聊BCH硬分叉与算力战!
  11. 计算机识别不到硬盘,电脑认不到硬盘怎么回事 电脑开机认不到硬盘处理方法...
  12. c语言五子棋存盘,C语言 五子棋(初学者版).doc
  13. 有孚网络与南方物流集团签署项目合作协议,共创数字服务领域新载体
  14. mysql 创建 unique key_MySQL-创建表时一起使用时,“ PRIMARY KEY”,“ UNIQUE KEY”和“ KEY”的含义...
  15. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  16. 什么是元认知?其效果和锻炼方法的介绍!
  17. LM(Levenberg–Marquardt)算法原理及其python自定义实现
  18. MTK Android8.1 UI之蓝牙和WiFi
  19. Mac word文档突然丢失 找回方法
  20. #IT人的升职加薪tips# 如何真正学习Go 语言[翻译]

热门文章

  1. java实现redis客户端_windows下java swt实现操作redis的客户端工具
  2. Oracle Groundbreakers 亚太巡演 2021中国区精彩抢先看
  3. 2020年11月 Oracle WebLogic 高危预警:CVE-2020-14750 无需认证攻击
  4. DBA跳槽应该去大公司还是小公司?99%的人这样说...
  5. 青铜到王者:AIOps 平台在腾讯的升级之路
  6. 生产环境频繁内存溢出,原来就是因为这个“String类”
  7. 要想下班早,微服务架构少不了
  8. 数仓备机DN重建:快速修复你的数仓DN单点故障
  9. 天呐,这群“员工”的业务能力太强了
  10. 利用文字技术帮助选购商品,慧眼“识”物的人都这样做……