JMeter获取复杂的JSON串中的参数的值

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

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

  首先有这样一个json串,如下图所示:

  如上图中,画红框的部分,参数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 = json1.getJSONObject("data");

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

  //使用容器的iterator()方法返回一个Iterator

  Collection iterator = data.values();
  Iterator it = iterator.iterator();

  //hasNext()方法判断容器中是否还有元素
  while(it.hasNext()){

  //通过Iterator的next()方法返回第一个元素
  Object key = it.next();

  //获取第一个元素下面的value值
  String value = JSONObject.toJSONString(key);

  //将第元素下面的value转换成json
  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对象
  String xsddbh= ob.getString("xsddbh");//获取json对象中列名为xsddbh的值
  if(xsddbh.equals("111807200000645300")) {
  String cpbh = ob.getString("cpbh");
  System.out.println("的值是"+cpbh);
      }
    }
  }

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

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

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

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

  vars.put("cpbh",cpbh);

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

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/weimeizhizuo/p/9351206.html