我们在做jmeter接口测试的时候,有时候碰到开发没返回数据total,只返回了一条条记录,可是呢,我们又需要知道到底返回了多少条数据时,咋办呢?咋办呢?咋办呢?

不要急,接下来,让我们见证奇迹是如何诞生的!!!

  可能有人在网上看到很多关于解析json返回数据的文章,看来看去都是一样的,于是乎,我亲测了一下,果然没用!!!(可能是本人技术太渣,无法领悟其中的真髓)没办法,只能看log信息一次次试咯!终于在各种大佬的帮助下搞好了!

第一步:将fastjson-1.2.62.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误(保险起见,再将fastjson-1.2.62.jar包同样置于jmeter的lib/ext目录下,同样将该jar包添加到测试计划的Library中)

  

我们再来看看要解析的数据格式

我们要获取到item数组长度,即item下有多少条数据。

第二步:我们要获取到这些数据,来一个接口请求,获取一下数据,然后在接口请求下加一个后置处理器BeanShell PostProcessor。话不多说,代码撸起来!(接口你们自己搞一个,我就不贴了)

import com.alibaba.fastjson.*;

//获取请求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印获取请求的返回值
log.info("==============response_data=="+response_data+"=========================");
//将String类型的返回值构造成JSONObject对象
JSONObject data_obj = JSON.parse(response_data);
//日志打印data_obj值
log.info("==============data_obj=="+data_obj+"=========================");

//将data转成JSONObject类型
JSONObject jsonData = data_obj.getJSONObject("data");

//日志打印jsonData值
log.info("==============jsonData=="+jsonData+"=========================");

//获取作为下一个请求post的参数值item(获取字符串)
//String item = jsonData.get("item").toString();

//获取作为下一个请求post的参数值item(获取JSONArray)
JSONArray item = jsonData.getJSONArray("item");

log.info("==============item=="+item+"=========================");

//获取item字符串的长度
//int len = item.length();

//获取item数组的长度
int len = item.size();

String itemLen = Integer.toString(len);

log.info("==============itemLen=="+itemLen+"=========================");
vars.put("itemNum",itemLen);

把上面的代码就这样塞到BeanShell PostProcessor进去。各位观众,看到没有,我几乎是每一行一个Log,我太难了。

第三步:执行一下,运气好的话就会看到jmeter日志里打印出以下的日志信息了

顺便说一下,代码里最后一行vars.put("itemNum",itemLen);这个是塞一个itemNum变量到jmeter里,方便后面去调用。这样一来,就获取到我们想要的数据了。

划重点:BeanShell PostProcessor为啥有标红的呢?因为网上很多的全是这样写的:JSONObject data_obj = new JSONObject(response_data); 结果我也这样试了,理所当然我失败了,报错了,Can't find constructor: com.alibaba.fastjson.JSONObject( java.lang.String ) in class:,然后我去翻json源码,一看就两构造器:public JSONObject()和public JSONObject(boolean isNull),压根儿就没有public JSONObject(String text)这样的构造函数,不报错才怪勒!换个方法转化JSONObject对象,找到了JSON.parse(String text); 这样完美解决。

  

Jmeter4.0 _Beanshell解析并获取json响应数据数组长度的更多相关文章

  1. Jmeter(三十四)_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

  2. Jmeter_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

  3. SpringMVC_01 SpringMVC五大组件、SpringMVC编程步骤(不使用注解进行配置)、SpringMVC编程步骤(利用注解进行配置)、参数获取、响应数据

    1 什么是SpringMVC 是一个mvc框架,用来简化基于mvc架构的web应用程序的 开发. 2 SpringMVC五大组件 DispatcherServlet (前端控制器) HanlderMa ...

  4. Jmeter-BeanShell断言的运用一(JSON响应数据与数据库比对)

    前言 最近在学习BeanShell断言,发现有点强大哈,只要会写代码,就没有什么是断言不了的,哈哈哈,不过我现在只会写点蹩脚的代码,下面将介绍下如何将返回的JSON数据与数据库数据做对比. 注:本次涉 ...

  5. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

  6. mitmproxy 获取请求响应数据

    比较好的一个介绍是:https://blog.wolfogre.com/posts/usage-of-mitmproxy/ mitproxy 获取请求响应数据的代码如下: # -*- coding: ...

  7. jQuery获取JSON格式数据方法

    getJSON方法: jQuery.getJSON(url,data,success(data,status,xhr)) $("button").click(function(){ ...

  8. Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题

    在日常工作中,通常会遇到获取各种网络数据使用的情况,Java中可使用Jsoup(Python中可使用 BeatifulSoup)进行数据的获取及处理. 今天有朋友问,在使用 Jsoup 进行请求数据时 ...

  9. 通过Jquery中Ajax获取json文件数据

    1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...

随机推荐

  1. 下载youtube视频到本地

    https://www.clipconverter.cc/ 先通过上面的网站对youtube视频的url 进行解析获得下载链接地址 获得链接地址后 可通过阿里云香港服务器去下载 , 速度比较快 在阿里 ...

  2. 论consul正确的关闭姿势

    最近在工作中发现一个有意思的现象,我用 ctrl+c 关闭本地 consul 的时候,报警系统并没有发出告警,说我的 node 异常,自己看了一下代码,发现 consul 的关闭还是有点猫腻的,仔细来 ...

  3. Apache新的URL路由重写规则

    在根目录下新建一个 .htaccess 后缀文件,将下面代码放进去即可 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multivie ...

  4. 在ensp上STP配置和选路规则

    原理概述 这次我们模拟的实验内容 搭建实验拓扑 搭建完拓扑之后,我们在交换机上启动STP服务,将交换机的STP模式改为普通生成树STP 配置完成之后我们来看一下S1生成树的状态(大约30秒之后,因为生 ...

  5. Django框架深入了解_02(DRF之序列化、反序列化)

    序列化:将Python对象准换成json格式的字符串,反之即为反序列化 DRF的序列化使用过程: 使用drf的序列化组件 -1 新建一个序列化类继承Serializer -2 在类中写要序列化的字段 ...

  6. Django 报错 admin.E408 admin.E409 admin.E410

    报错内容 ERRORS: ?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MI ...

  7. logrus 剖析之 formatter

    使用 logrus 通过 formatter 来定义输出日志的格式,具体例子如下: package main import ( log "github.com/Sirupsen/logrus ...

  8. zap+日志分级分文件+按时间切割日志整合demo

    实现功能     info debug 级别的日志输出到 /path/log/demo.log     warn error .... 级别的日志输出到 /path/log/demo_error.lo ...

  9. docekr安装mysql,redis,git和maven 脚本

    编写脚本 images_install.sh #!/bin/bash # author:qiao # 安装脚本 # reids:3.2(自启) mysql:5.7(自启)或者JDK:1.8 tomca ...

  10. linux 系统扩容 VMware Centos---VMware ESXi

    用到的命令 df  fdisk  pvcreate   pvdisplay    vgdisplay    vgextend    lvdisplay    lvextend  resize2fs 0 ...