【环境】

  ①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;
}

 结果如下:

 
 

Jmeter_Beanshell_使用Java处理JSON块(转)的更多相关文章

  1. Jmeter_Beanshell_使用Java处理JSON块

    版权声明:本文为博主原创文章,转载请注明出处. [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该j ...

  2. Jmeter之Beanshell---使用Java处理JSON块

    原文出处:https://www.cnblogs.com/xpp142857/p/7374281.html [环境] ①Jmeter版本:3.1,JDK:1.7 ②前置条件:将json.jar包置于. ...

  3. [Java基础]代码块及java反编译

    块的作用域:   块(即复合语句)是指一对花括号括起来的若干条简单的java语句.块确定了变量的作用域.一个块可以嵌套在另一个块中.但是,在嵌套的两个块中声明同名的变量时应注意,块中变量申明在块外变量 ...

  4. Java集合 Json集合之间的转换

    1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSO ...

  5. Java对象 json之间的转换(json-lib)

    在这里主要简单的介绍一下,如何使用json-lib这个工具包来完成Java对象(或集合)与json对象(或集合)之间的转换~ 1. Java对象转换成json(既创建json) 关键类:JSONObj ...

  6. Java 的 JSON 开源类库选择比较(zz)

    在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April  ...

  7. java的static块执行时机

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

  8. java中json包的使用以及字符串,map,list,自定义对象之间的相互转换

    做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...

  9. java系列--JSON数据的处理

    http://blog.csdn.net/qh_java/article/details/38610599 http://www.cnblogs.com/lanxuezaipiao/archive/2 ...

随机推荐

  1. ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 题目大意就是求一个序列里面长度为m的递增子序列的个数. 首先可以列出一个递推式p(len, i) =  ...

  2. js中eval详解

    先来说eval的用法,内容比较简单,熟悉的可以跳过   eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. ...

  3. CF 293E Close Vertices——点分治

    题目:http://codeforces.com/contest/293/problem/E 仍旧是点分治.用容斥,w的限制用排序+两个指针解决, l 的限制就用树状数组.有0的话就都+1,相对大小不 ...

  4. bzoj 4530 大融合 —— LCT维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...

  5. Poj_1002_java解决

    一.Description 电话号码的标准格式是七位十进制数,并在第三.第四位数字之间有一个连接符.电话拨号盘提供了从字母到数字的映射,映射关系如下: A, B, 和C 映射到 2 D, E, 和F ...

  6. Mybaits整合Spring自动扫描 接口,Mybaits配置文件.xml文件和Dao实体类

    1.转自:https://blog.csdn.net/u013802160/article/details/51815077 <?xml version="1.0" enco ...

  7. Break 、Continue 和ReadOnly、Const和Ref和Out params

    Break和Continue区别 之前对于Break和Continue:ReadOnly和Const:ref和out,params之类的基础东东学习过,但是一直没有仔细去研究到底是怎么一回事儿,最近在 ...

  8. Linux TCP通信例子

    TCP通信的C/S模型 ///server.c #include <sys/types.h> #include <sys/socket.h> #include <stdi ...

  9. java数据库连接模板代码通用收集

    package org.lxh.dbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLE ...

  10. 错误:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web

    在eclipse的workspace里面找到该项目. 依次进入:.settings->org.eclipse.wst.common.project.facet.core.xml. 打开文件后,将 ...