我们在做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. [LeetCode] 337. House Robber III 打家劫舍 III

    The thief has found himself a new place for his thievery again. There is only one entrance to this a ...

  2. SRC漏洞挖掘

    SRC目标搜集 文章类的平台 https://www.anquanke.com/src 百度搜索 首先得知道SRC厂商的关键字,利用脚本搜集一波. 比如[应急响应中心]就可以作为一个关键字.通过搜索引 ...

  3. 【视频开发】 十全大补:CxImage图像处理类库

     十全大补:CxImage图像处理类库 转载IT168        CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JP ...

  4. idea中默认maven配置

    使用idea时,通常会配置自己的maven,但是发现每创建一个新项目都需要重新配置一遍,原来在idea中有一个默认配置,修改后就会全局生效,具体配置如下: 简单两步,配置完成.

  5. layui父页面执行子页面方法

    parent.window[layero.find('iframe')[0]['name']].子页面方法(); layero.find('iframe')[0].contentWindow.子页面方 ...

  6. LeetCode 290. 单词规律(Word Pattern) 41

    290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern 和一个字符串 str,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如,pattern ...

  7. [转帖]Latch

    Latch (转) http://blog.csdn.net/tianlesoftware/article/details/5263238 2013-05-24 15:33:09 huashanlun ...

  8. [转帖]linux Shell sort按照指定列排序

    linux Shell sort按照指定列排序 https://blog.csdn.net/weixin_38308151/article/details/80760133 kubectl get p ...

  9. Java开发笔记(一百三十六)JavaFX的窗格

    虽然Java自诞生之初就推出了AWT,紧接着第二版又推出升级后的Swing,打算在桌面开发这块大展拳脚:可是后来Java在服务器开发上大放异彩,在桌面开发上反而停滞不前,可谓失之J2SE收之J2EE. ...

  10. django RetrieveModelMixin 查询字段替换

    mixins 中RetrieveModelMixin 获取当个实例 其中的主键pk获取,可以通过lookup_field 如:要换成用username字段进行查询 注:替换的字段要有唯一约束 look ...