原文出处: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块的更多相关文章

  1. Jmeter_Beanshell_使用Java处理JSON块

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

  2. Jmeter_Beanshell_使用Java处理JSON块(转)

    [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中:否则会报 ...

  3. 在jmeter的beanshell中用java获取系统当前时间

    import java.util.*; int y,m,d,h,mi,s; Calendar cal=Calendar.getInstance(); y=cal.get(Calendar.YEAR); ...

  4. 记录jmeter使用beanshell断言获取复杂的json字符串参数值

    实战示例 测试场景 电商系统经常会涉及到商品的库存数量的压测,在用户下单前需要先做库存余量的判断,当余量不足时用户无法下单,保证商品的有效售卖 库存余量查询响应结果 响应结果一般是json字符串的形式 ...

  5. jmeter之beanshell提取json数据

    Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...

  6. Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密

    [前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...

  7. jmeter通过BeanShell 脚本,实现对http请求参数的加密

    jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的 ...

  8. JMeter中BeanShell的实际应用

    使用Jmeter的BeanShell断言,把响应数据中的JSON跟数据库中的记录对比 很多时候我们需要把Response Data取到的 Json 字符串跟数据库里的对比,来验证接口的正确性,使用Be ...

  9. JMeter(5) JMeter之BeanShell使用

    BeanShell介绍 BeanShell是用Java写成的,一个小型的.免费的.可以下载的.嵌入式的Java源代码解释器,具有对象脚本语言特性.本篇只记录一下基本的使用.有以下五个组件: Beans ...

随机推荐

  1. Celery架构

    Celery 官方 # Celery 官网:http://www.celeryproject.org/ # Celery 官方文档英文版:http://docs.celeryproject.org/e ...

  2. BBS项目架构实现

    一.注册功能 注册页面搭建 auto_id 数据校验 使用forms组件实现(forms) 创建一个文件夹随意,创建一个.py中 在.py文件中创建类继承form.Form 创建字段实现,实现对字段的 ...

  3. Python中比较特殊的几种数据类型list、tuple、dict、set

    list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集合,可以随时添加和删除其中的元素. >>> classmates = ['Li', 'Tom', ' ...

  4. Python - 文件和目录

    # -*- coding: utf-8 -*- import os print(os.name) # 获取操作系统类型 # print(os.uname()) # 获取操作系统的详细信息,Win不支持 ...

  5. android中的适配器模式

    原文: https://blog.csdn.net/beyond0525/article/details/22814129 类适配模式.对象适配模式.接口适配模式

  6. ubuntu Elasticsearch环境搭建

    https://www.cnblogs.com/pigzhu/p/4705870.html

  7. Vue框架:挂载点-过滤器-事件指令-表单指令

    近期学习安排 1.Vue框架 前台html+css+js框架,是不同于js与JQuery的数据驱动框架, 学习的知识点:指令 |  实例成员 | vue项目 2.drf框架 django的插件,完成前 ...

  8. RegexUtil

    package org.linlinjava.litemall.core.util; import java.util.ArrayList; import java.util.Collections; ...

  9. 虚拟环境(virtualenv)

    为什么需要虚拟环境: 到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中.但是这样有一个问题,就是如果你 ...

  10. 个人云主机 博客上线 家用宽带-树莓派2-certbot-docker 运行环境简介

    https://blog.cuidp.top/ 博客主页,目前刚建好,没什么数据 服务是 https://github.com/TryGhost/Ghost 现插件是https://github.co ...