【环境】

  ①Jmeter版本:3.2,JDK:1.8

  ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;

  ③处理器:Beanshell处理器,import org.json.*;(一般习惯使用到什么import什么,如:import org.json.JSONObject、import org.json.JSONAarry;)

【思路】

  ①获取请求的返回值,即Json响应;

    String response_data = prev.getResponseDataAsString();  //注意此处获取到的是String类型;

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

    需要利用JSONObject或者JSONArray构造JSON对象。

    JSONObject JsonData = new JSONObject(StrData);

  ③替换某些需要变更的字段值,再将新的JSON处理为Jmeter的参数,用于下一个请求的参数化值;

    JsonData.put("status", "CLOSED");

    String NewData = JsonData.toString();

    vars.put("NewStrData",NewData);

【示例1-----JSONObject对象】

  ①获取到JSON对象,需要提取其中的data对象,并更换“issueHandleType”字段的值为“CLOSE”,再构造成参数字符串;

  A请求后添加BeanShell后置处理器,代码如下:

import org.json.JSONObject;String response_data = prev.getResponseDataAsString(); //获取请求返回值。注意此处只能获取到String类型;
log.info(response_data);JSONObject data_obj = new JSONObject(response_data); //将String类型的返回值构造成JSONObject对象,才可使用Java对象的方法对其进行操作;String StrData = data_obj.get("data").toString(); //获取作为下一个请求post的参数值data;
log.info(StrData); //Log中显示的字段顺序会与“response_data”中的字段顺序有差异,JSON串的正确与否无关字段顺序;JSONObject JsonData = new JSONObject(StrData); //将获取到的“data”字符串构造成JSON对象;JsonData.put("issueHandleType", "CLOSE"); //更新issueHandleType的json值;
JsonData.put("solution", "2017_解决方案_性能测试");
JsonData.put("status", "CLOSED");
JsonData.put("handleType", "CLOSE");
JsonData.put("complaintTypeSecondCode", "URGE"); //异常类型;
JsonData.put("complaintTypeSecondName", "催件");
JsonData.put("lastUpdateTime", "${timestamp}");
JsonData.put("lastUpdator", "${UserName}");
JsonData.put("lastUpdatorName", "${UserName}");String NewData = JsonData.toString(); //将JSON对象保存为String类型,Jmeter中的请求的参数均以字符串的形式传递;
vars.put("NewStrData",NewData);
log.info(NewData);

  请求的响应结果如下:

【示例2-----JSONArray对象】

  ①需要提取返回值中,每一个对象数组中的每一个 uuid 及 id 的键值:获取JSON对象,再提取data数组内容并获取data数组长度,最后循环提取每一个 uuid 及 id 的键值;备注:1个客服同时与10个客户聊天,在聊天开始之前,需要捞取到这10个客户的uuid(uuid)及conversationId(id);

  以下代码删除某些操作,仅用于提取每一个uuid和id值;

import org.json.JSONObject;
import org.json.JSONArray;try {String response_data = prev.getResponseDataAsString(); //获取请求返回值。注意此处只能获取到String类型;JSONObject data_obj = new JSONObject(response_data); //将String类型的返回值构造成JSONObject对象;JSONArray data_array = data_obj.getJSONArray("data");   //data为数组int len = data_array.length();                                                //获取data数组的长度String strlen = Integer.toString(len);vars.put("MessageNum",strlen);//log.info(strlen);int i = 0;for(;i < len;++i){JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i);      //获取 data[ i ] 数组对象;switch(i){case 0:    vars.put("uuid_1", jsonTemp.getString("uuid")); vars.put("conversationId_1", jsonTemp.getString("id")); break;case 1:    vars.put("uuid_2", jsonTemp.getString("uuid")); vars.put("conversationId_2", jsonTemp.getString("id")); break;//..................................此处省去7次处理case 10:    vars.put("uuid_11", jsonTemp.getString("uuid")); vars.put("conversationId_11", jsonTemp.getString("id")); break;default:break;}}
}
catch (Throwable ex) {log.error("Failed in Beanshell", ex);throw ex;
}

  结果如下:

获取response的其他几个方法:

Jmeter之Beanshell使用(二)Java处理JSON块相关推荐

  1. Jmeter入门实战(二)如何使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比

    很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Beanshell断言可以比较灵活的实现这个需求. Beanshell是一种类似JAVA的 ...

  2. Jmeter Beanshell采样器调用JAVA方法(二)

    BeanShell Sampler调用添加的java方法 1.BeanShell Sampler里添加java方法 public static String test() {vars.put(&quo ...

  3. JMeter实用教程【二】-BeanShell的使用

    为什么要使用BeanShell 之前在做客服域相关接口生产环境压测的时候,遇到一个问题,那就是签名如何生成,网关的同学是有提供相关签名计算的jar包,如何使用提供的jar包在JMeter中生成签名?B ...

  4. jmeter 使用beanshell 编写脚本

    目录 一.介绍 1.1 介绍 1.2 下载&启动 二.jmeter中创建beanshell脚本 三.jmeter与beanshell 数据交互 3.1 例子1 beanshell 将变量传给j ...

  5. jmeter 请求发送加密参数(其中包含Json嵌套)

    jmeter 请求发送加密参数(其中包含Json嵌套) 某个接口的请求参数非常多,并且接口请求要求有MD5签名校验:签名的方式为在Headers或是请求中包含一个sign参数,该参数值通过对URL.M ...

  6. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  7. java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...

  8. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  9. biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    造成原因:JS内置有32位整数,而number类型的安全整数是53位.如果超过53位,则精度会丢失.正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样 ...

最新文章

  1. 稳健+成长股池(转载)
  2. [HEOI2016TJOI2016]排序(二分+线段树)
  3. html5之api,HTML5之API(示例代码)
  4. Linux允许61440端口,释放对某端口的占用
  5. Unity5 Roll A Ball项目笔记
  6. 软件配置管理的作用?软件配置包括什么?
  7. Corgi-ICode —— 帮你少写点代码
  8. 万卷书计划-2016年开启
  9. AI芯片:Edge TPU(谷歌出品)【在边缘(edge)设备上运行的“专用集成芯片”】【量化操作:Edge TPU使用8 位权重进行计算,而通常使用32位权重。所以我们应该将权重从32位转换为8位】
  10. 关于wintc编译成功,输出黑框中无结果显示
  11. img 标签 引入svg图片
  12. 动画交互应用——星球引力
  13. PTA R7-5 Jack cheng的烦恼3
  14. 百万级电商秒杀架构设计
  15. 行业短信 运营思路_游戏行业短信平台解决方案
  16. win7更新_Win7用户福音:微软集成更新的新版Windows 7镜像泄露
  17. mac下安装nvm以及node
  18. linux 音频文件切割_linux下通过CUE分割APE、FLAC、WAV无损音频
  19. 很不错的一款软件--护眼精灵
  20. 我的世界java三叉戟怎么得_我的世界三叉戟怎么获得 三叉戟获得方法介绍

热门文章

  1. YYDS 的 IDEA插件,没装上的安排起来!
  2. 皮一皮:人生就像编程,总有防不胜防的bug会被人发现...
  3. 写过Mybatis插件?那说说自定义插件是如何加载的吧?
  4. 每日一皮:有人质疑新疫苗的免疫率低?
  5. 后端开发必知必学的 Linux 命令行大全
  6. 你有遇到过MySQL因大小写敏感导致的问题吗
  7. 牛逼的人没有不看书的(送书福利)
  8. 阿里云Redis开发规范
  9. linux mysql5.6 编码_CentOS 7下修改MySQL5.6编码方式 解决网站中文显示问号
  10. 牛腩知识小结-盒子模型