JMeter用BeanShell获取复杂的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

原文地址:https://www.cnblogs.com/weimeizhizuo/p/9351206.html

时间: 2024-11-01 21:37:48

JMeter用BeanShell获取复杂的JSON串中的某个参数的值的相关文章

Javascript RegExp对象---获取url中某一个参数的值

RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes实例:window.location.href:http://localhost:8100/aspx/main/ServiceCenter_list.aspx?category_id=93&page=2要匹配到的category_id=93:/category_id=\d+/g 创建 RegExp 对象的语法: new RegExp(pattern, at

jmeter压测学习3-提取json数据里面的token参数关联

前言 现在很多接口的登录是返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值. 上一个接口返回的token作为下个接口的入参. 案例场景 我现在有一个登陆接口A,登陆成功后返回一个token值.有一个获取绑定卡号的接口B,但是接口B必须要先登录后传登录的token才能访问 A接口登录接口文档基本信息 访问地址:http://127.0.0.1:8000/api/v1/login/ 请求类型:POST 请求头部:application/json

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

后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放在NSDictionary类别中 #pragma mark - 私有方法 //将NSDictionary中的Null类型的项目转化成@"" +(NSDictionary *)nullDic:(NSDictionary *)myDic { NSArray *keyArr = [myDic a

iOS解决json串中的NSNull类型

后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放在NSDictionary类别中 #pragma mark - 私有方法 //将NSDictionary中的Null类型的项目转化成@"" +(NSDictionary *)nullDic:(NSDictionary *)myDic { NSArray *keyArr = [myDic a

jmeter--正则提取json串中一个大括号对象里指定字段值的的另一个字段的值

需要提取如图红框_id的值,整个返回里有多个类似的大括号对象: 里面的第一个id的值,但是整个json串不止这么一个,并且只能匹配quality_level是349的这个大括号里的第一个id的值.下面使用3种方法: 第一种:最笨的方法,所有字段都写出来做匹配 {"_id":"(.{10,30}?)","agent":{"_id":"[^"]*?","name":"[^

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

接口测试时我们需要对某条信息进行修改,如我们先创建了一篇文章,然后进行修改操作 我们就需要找到该文章的唯一标志,如id 示例:我们要将下图返回的json 中id进行提取 注:可输入$.加需要的key即可查找对应的值($.代表根节点) 注:一般这种创建文章等登录后操作是需要先进行鉴权的 进行提取以下为提取步骤: 使用后置处理器中的JSON Extractor(json提取器) 添加: 配置JSON Extractor(json提取器): 添加一个Debug Sampler(调试取样器ctrl +

jmeter使用Beanshell预处理器从指定列表中获取随机值

变量mynation从列表{"china", "US", "UK"}中随机取值 String[] nation = new String[]{"china", "US", "UK"}; Random random = new Random(); int i = random.nextInt(nation.length); vars.put("mynation",nat

获取URL中指定的参数的值 — location.search

1.先看看location对象 2.其中的search属性就获取当前URL的查询部分(问号?之后的部分) 3.改造location.search 比如当前URL为:https://www.hao123.com/?name=leaf&age=12,获取age的值 location.search.substring(1).split('&')[1].split('=')[1]. 当然可以用循环获取所有想要字段的值

python json.dumps 中的ensure_ascii 参数引起的中文编码问题

在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u56fd" 输出的会是 '中国' 中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False: >>> import json >>> print jso