大家好,这篇博文中主要是介绍怎么用JMeter的BeanShell去获取复杂的JSON串中的某个参数的值,这将

便于我们用JMeter做出更完美的自动化测试;

  首先有这样一个json串:

  {

    "code": 0,

    "data": {

    "2018720-0317": [{

      "cpurl": "https://cdn.i5sesol.com/isesolImall/",

      "cxmc": "",

      "jhsl": 1,

      "cxwj": "",

      "xsddbh": "111807200000645200",

      "gybh": "TJTYCPGYBH",

      "gybzbh": "20171225000001",

      "cpcz": ",,,",

      "pgdrwbh": "2018720-0317-0366",

      "cpmc": "星座+签名定制狮子座",

      "bgsl": 0,

      "xlh": "2018052401",

      "gygxbh": "TJZDXDGX",

      "cpbh": "1532047578068",

      "cxList": [],

      "r1": "null"

      }],

    "2018720-0318": [{

      "cpurl": "https://cdn.i5sesol.com/isesolImall/",

      "cxmc": "",

      "jhsl": 1,

      "cxwj": "",

      "xsddbh": "111807200000645300",

      "gybh": "TJTYCPGYBH",

      "gybzbh": "20171225000001",

      "cpcz": ",,,",

      "pgdrwbh": "2018720-0318-0367",

      "cpmc": "星座+签名定制狮子座",

      "bgsl": 0,

      "xlh": "2018052401",

      "gygxbh": "TJZDXDGX",

      "cpbh": "1532048096286",

      "cxList": [],

      "r1": "null"

      }]

    },

  "message": "成功"

  }

 

  如上图中,画红框的部分,参数xsddbh(111807200000645300)的值可知,在下一个接口请求中,需要用到上图中的参数

cpbh(1532048096286)的值,然而参数xsddbh在json串中的每个list都有,那么这时候怎么办呢?在这里我将用alibaba.fastjson

这个包进行讲解:

一、下载Alibaba Fastjson Jar包,放在自己能够标识的目录,并在测试计划中引用该jar包,如下图所示:

二、在测试计划中添加线程组,并在线程组中添加BeanShell PreProcessor,如下图所示:

三、在BeanShell PreProcessor中引入json解析相关jar包,这里用到的jar包如下图所示:

四、将本文开头的json串放到BeanShell PreProcesso,当然需要转移成String类型的,同时并解析该json串

4.1、这里方便大家使用我直接将该String串写出来

String tr = "{\"code\": 0,\"data\": {\"2018720-0317\":[{\"r2\": \"null\",\"cpurl\": \"https://cdn.i5sesol.com\",\"cxmc\":\"\",\"jhsl\": 1,\"cxwj\": \"\",\"xsddbh\": \"111807200000645200\",\"gybh\": \"TJTYCPGYBH\",\"gybzbh\": \"20171225000001\",\"cpcz\": \",,,\",\"pgdrwbh\": \"2018720-0317-0366\",\"cpmc\": \"星座+签名定制狮子座\",\"bgsl\": 0,\"xlh\":\"2018052401\",\"gygxbh\": \"TJZDXDGX\",\"cpbh\": \"1532047578068\",\"cxList\": [],\"r1\": \"null\"}],\"2018720-0318\": [{\"r2\": \"null\", \"cpurl\": \"https://cdn.i5sesol.com/isesolImall\",\"cxmc\": \"\",\"jhsl\": 1,\"cxwj\": \"\",\"xsddbh\": \"111807200000645300\",\"gybh\": \"TJTYCPGYBH\",\"gybzbh\": \"20171225000001\",\"cpcz\": \",,,\",\"pgdrwbh\": \"2018720-0318-0367\",\"cpmc\": \"星座+签名定制狮子座\",\"bgsl\": 0,\"xlh\": \"2018052401\",\"gygxbh\": \"TJZDXDGX\",\"cpbh\": \"1532048096286\",\"cxList\": [],\"r1\": \"null\"}]},\"message\": \"成功\"}";

在BeanShell PreProcessor中显示如下图所示:

4.2、将上面的Sting字符串转换成json串,并获取其中data的

  //转换成JSON串

JSONObject json = JSONObject.parseObject(tr);

  //获取data的json串;

  JSONObject data = json.getJSONObject("data");

4.3、用迭代器去获取data中的元素,并循环 

while(it.hasNext()){
Object key = it.next();
String value = JSONObject.toJSONString(key);
JSONArray array = JSONArray.parseArray(value);
System.out.println(value);
for(int i = 0; i < array.size(); i++) {//循环json数组
JSONObject ob = (JSONObject) array.get(i);//得到json对象
System.out.println(ob);
String xsddbh= ob.getString("xsddbh");//获取json对象中列名为xsddbh的值
if(xsddbh.equals("111807200000645300")) {
String cpbh = ob.getString("cpbh");
System.out.println("cpbh"+cpbh);

}
}
}

ps:将上述代码可以在eclipse中调试一下,如果直接粘贴至BeanShell PreProcesso中,可能会有字符串空格问题

4.4、最终解析并获取到cpbh的值在BeanShell PreProcesso中显示如下图所示:

五、执行脚本,在控制台中查看cpbh的值,如下图所示:

从图中可以看到结果被成功取出

六、如果再希望cpbh这个参数在下面被取到,那么我们需要需要用到jmeter的函数vars.put

  vars.put("cpbh",cpbh);

七、查看该参数是否能够传递给下一个http请求,如下图所示:

7.1、添加一个http请求,并引用该变量,如下图所示:

7.2、执行脚本,查看变量值是否被引用,如下图所示:

至此,jmeter在做自动化是引用比较复杂的变量解析完毕。

这里欢迎大家进群交流:775129837

JMeter获取复杂的JSON串中的参数的值的更多相关文章

  1. jmeter在返回的json串中提取需要的值

    接口测试时我们需要对某条信息进行修改,如我们先创建了一篇文章,然后进行修改操作 我们就需要找到该文章的唯一标志,如id 示例:我们要将下图返回的json 中id进行提取 注:可输入$.加需要的key即 ...

  2. (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法

    (六)Net Core项目使用Controller之一 一.简介 1.当前最流行的开发模式是前后端分离,Controller作为后端的核心输出,是开发人员使用最多的技术点. 2.个人所在的团队已经选择 ...

  3. iOS解决json串中的NSNull类型

    iOS解决json串中的NSNull类型   后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符 ...

  4. mysql json_extract函数获取json字段中某个key的值

    参考:https://www.cnblogs.com/chuanzhang053/p/9139624.html json_extract函数可以获取json对象中指定key的值,用法:json_ext ...

  5. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  6. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  7. JavaScript获取select下拉框中的第一个值

    JavaScript获取select下拉框中的第一个值 1.说明 获取select下拉框中的第一个值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  8. .NET 获取Get方式URL中的参数键值

    在Web开发中,我们常常会涉及到需要获取Get方式URL中的参数键值的情况,这里简单介绍三种方法: 第一种:常用的做法有使用JavaScript获取location.href后用正则表达式匹配获取此U ...

  9. iOS开发解决json串中的NSNull类型

    后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放 ...

随机推荐

  1. 编译安装 mysql 5.5,运行 cmake报错Curses library not found

    是因为 curses库没有安装,执行下面的语句即可 yum -y install ncurses-devel 如果上述命令的结果是no package,则使用下面的命令安装 apt-get insta ...

  2. 2018.8.18 servlet使用的会话跟踪除session外还有哪些方式

    解释HTTP HTTP是一种无连接的协议,如果一个客户端只是单纯地请求一个文件(HTML或GIF),服务器端可以响应给客户端,并不需要知道一连串的请求是否来自于相同的客户端,而且也不需要担心客户端是否 ...

  3. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

  4. MySQL中的if和case语句使用总结

    create table test( id int primary key auto_increment, name ), sex int ) ),(),(),() ,'男','女') from te ...

  5. 你可能不知道的 new.target

    new 是构造函数生成实例的命令, ES6为 new 命令引入了 new.target属性.这个属性用于确定构造函数是怎么调用的. 在构造函数中, 如果一个构造函数不是通过 new操作符调用的, ne ...

  6. js实现二分查找

    二分查找需要数组是有序的,1.先从有序数组的最中间元素开始查找,如果和要查找的元素相等,直接返回索引,若不相等则下一步.2.如果指定的元素大于或者小于中间元素,则在大于或小于的那一半区域内查找,重复第 ...

  7. WPF与Silverlight对比

    1.WPF中控件的肤色可以直接:telerik:StyleManager.Theme=”XXXXX”,不用再导入肤色的dll包.可Silverlight使用系统肤色时,要导入肤色的dll包. WPF引 ...

  8. 【整理】PHP获取客户端真实IP地址详解

    php获取客户端IP地址有四种方法,这五种方法分别为REMOTE_ADDR.HTTP_CLIENT_IP.HTTP_X_FORWARDED_FOR.HTTP_VIA. REMOTE_ADDR 是你的客 ...

  9. JAVAOOP异常

    排序: Try-catch-finally:try正常执行,如果有异常执行catch后执行finally,如果没有直接执行finally 执行顺序:try-catch:try中的语句正常执行,如果遇到 ...

  10. C# 创建新线程

    首先需要包含命名空间 using System.Threading; 然后创建进程 Thread th = new Thread(new ThreadStart(ThreadMethod)); //创 ...