Jmeter之Beanshell---使用Java处理JSON块
原文出处:https://www.cnblogs.com/xpp142857/p/7374281.html
【环境】
①Jmeter版本:3.1,JDK:1.7
②前置条件:将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 ;
for(i=0 ;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块的更多相关文章
- Jmeter_Beanshell_使用Java处理JSON块
版权声明:本文为博主原创文章,转载请注明出处. [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该j ...
- Jmeter_Beanshell_使用Java处理JSON块(转)
[环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中:否则会报 ...
- 在jmeter的beanshell中用java获取系统当前时间
import java.util.*; int y,m,d,h,mi,s; Calendar cal=Calendar.getInstance(); y=cal.get(Calendar.YEAR); ...
- 记录jmeter使用beanshell断言获取复杂的json字符串参数值
实战示例 测试场景 电商系统经常会涉及到商品的库存数量的压测,在用户下单前需要先做库存余量的判断,当余量不足时用户无法下单,保证商品的有效售卖 库存余量查询响应结果 响应结果一般是json字符串的形式 ...
- jmeter之beanshell提取json数据
Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...
- Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
[前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...
- jmeter通过BeanShell 脚本,实现对http请求参数的加密
jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的 ...
- JMeter中BeanShell的实际应用
使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比 很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Be ...
- JMeter(5) JMeter之BeanShell使用
BeanShell介绍 BeanShell是用Java写成的,一个小型的.免费的.可以下载的.嵌入式的Java源代码解释器,具有对象脚本语言特性.本篇只记录一下基本的使用.有以下五个组件: Beans ...
随机推荐
- UML-类图-需要写关联名称吗?
概念模型:需要写关联名称:类图:不需要写关联名称. 注意,概念模型关联线不需要箭头.
- UML-为什么要画领域模型?
不熟悉业务的情况下, 1).找到关键概念和词汇 2).概念间的关系 熟悉业务的情况下, 1).梳理思路 完美不是目的. 另外,减少标示差异.如下图
- Java常用面试题总结
1.多线程实现方式 2.cookie和session区别 3.数据加密 4.接口并发 5.常用的集合类 6.遍历集合方式 7.接口和抽象类 8.#和$区别 9.防止sql注入 10.springMvc ...
- PTA 自测-4 Have Fun with Numbers
#include<iostream> #include<string> #include<cstring> #include<vector> using ...
- 伯特兰·亚瑟·威廉·罗素[註 1],第三代羅素伯爵(英语:Bertrand Arthur William Russell, 3rd Earl Russell,1872年5月18日-1970年2月2日),OM,FRS,英国哲学家、数学家和逻辑学家,致力于哲学的大众化、普及化。[2] 在數學哲學上採取弗雷格的邏輯主義立場,認為數學可以化約到邏輯,哲學可以像邏輯一樣形式系統化,主張逻辑原子論。[3]
一年假. 1920年7月,罗素申請了一年假; 這被批准了.他花了一年時間在中國和日本講學.对中国学术界有相当影响. 罗素说: 对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯 ...
- Office、VBA开发方案选择指南
最近很多朋友向我提出Office的开发方式方面的疑惑,主要是针对特定的系统和Office版本不知道选择哪一种编程语言.创建哪一种类型的项目. 事实确实如此,如果搞不清楚语言的特性和项目类型的特点,很可 ...
- Hibernate/JPA中@Where使用时注意
在使用Hibernate或者JPA时,我们经常会使用@Where注解实现查询过滤,在实体类上.实体属性上.查询语句上都有应用. 例如: @Where(clause = "status != ...
- 一文带你了解BOM基本知识
1.1. BOM和DOM的区别DOM就是一套操作HTML标签的API(接口/方法/属性) BOM就是一套操作浏览器的API(接口/方法/属性) 1.2. BOM中常见的对象window: 代表整个浏览 ...
- day14-单继承
#面向对象的三大特征:继承.多态.封装. #一.单继承: # 1. class Animal: #没有父类,默认继承了顶级父类object类. def __init__(self,name,aggr, ...
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
有时候,当你把你的springboot项目打成可执行的jar,放在linux上启动时,发现启动超级慢: 这往往是因为springboot内置tomcat启动时实例化SecureRandom对象随机数策 ...