beanshell获取响应结果数据
http://blog.csdn.net/lluozh2015/article/details/72834014

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/lluozh2015/article/details/72834014
API接口测试中,对于接口请求respone的校验是非常重要的一个环节
在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等,BeanShell断言可以自定义断言,自由灵活的用脚本实现断言
什么是BeanShell
小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法
运行其内部的脚本处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码,因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果
先看看这样的respone
{
"message": "不能发送小于当前时间点的定时任务",
"statusCode": 200
}
现在需要验证statusCode的值是否为200
import org.json.*;
import java.util.Arrays;
//获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);
//判断返回值是否和预期一致
if (responseJson.getInt("statusCode") != 200) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "statusCode的返回值有误";
}
如果要验证respone中message的值是否与预期一致,需要怎么做呢?
import org.json.*;
import java.util.Arrays;
//获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString);
String fbpcontent = responseJson.getString("message");
if (!fbpcontent.equals("不能发送小于当前时间点的定时任务")) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "message与实际值不一致";
}
现有这样格式的respone数据
{
"statusCode": 200,
"data": [
{
"i": "50356",
"n": "项目一",
"v": "2.0",
"iconUrl": "",
},
{
"i": "45280",
"n": "项目二",
"v": "3.0",
"iconUrl": "",
},
{
"i": "14656",
"n": "项目三",
"v": "2.6",
"iconUrl": "",
},
{
"i": "66213",
"n": "项目四",
"v": "5.0",
"iconUrl": "",
}
]
}
需要解析数组data的值,如何去解析呢?
import org.json.*;
import java.util.Arrays;
//获取上一个请求的返回
String jsonContent = prev.getResponseDataAsString();
JSONObject response = new JSONObject(jsonContent);
JSONArray groups = response.getJSONArray("data");
String strData= groups.toString();
log.info(strData)
现在有更加复杂格式的respone数据
{
"priorityGroups": {
"proId": 1234,
"name": "项目一",
"groups": [
{
"id": "50356",
"items": [
{
"proId": 1360,
"n": "PC端",
"index": 1
},
{
"proId": 1361,
"n": "iOS端",
"index": 2
},
{
"proId": 1362,
"n": "安卓端",
"index": 4
}
]
}
]
},
"promotion": {
"proId": 1364,
"cusId": 84,
"name": "项目二",
"from": 1470821215,
"to": 1470907615,
"status": 1,
"objectId": 1069,
"createBy": 394,
"eff": 1470821215000,
"createTime": 1470821155000
}
}
如果需要解析groups中的数据,需要怎么实现呢?
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
String jsonContent = prev.getResponseDataAsString();
JSONObject response = new JSONObject(jsonContent);
JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups");
String strGroups = groups.toString();
BeanShell的获取数据解析,还可以使用Gson提供的方法
//prev.getResponseDataAsString是Jmeter提供的方法,可以调取上次请求的响应字符串
response = prev.getResponseDataAsString();
//使用Gson提供的方法解析json
JsonParser parser = new JsonParser();
JsonObject responseObj = (JsonObject) parser.parse(response);
beanshell获取响应结果数据的更多相关文章
- JMETER - BEANSHELL获取响应结果
获取响应结果 添加后置处理器 //获取获取请求的返回值 String response = prev.getResponseDataAsString(); //日志打印获取请求的返回值 log ...
- 获取响应数据___JSON Extractor 后置处理器
对于大部分请求返回的结果,都是json,有一个更方便使用的插件:JSON Extractor 不过得首先下载插件 https://jmeter-plugins.org/wiki/JSONPathExt ...
- 使用Typescript重构axios(六)——实现基础功能:获取响应数据
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题
在日常工作中,通常会遇到获取各种网络数据使用的情况,Java中可使用Jsoup(Python中可使用 BeatifulSoup)进行数据的获取及处理. 今天有朋友问,在使用 Jsoup 进行请求数据时 ...
- Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据
Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...
- 网络编程(发送get和post请求到服务器端,并获取响应)
一:B/S结构,浏览器端到服务器端通信依赖http协议 交互过程: 1:在浏览器地址栏输入http://ip:port/应用/资源路径 2:浏览器根据ip和服务器建立连接,port确定和那个应用进行交 ...
- JavaWeb_Day10_学习笔记1_response(3、4、5、6、7、8、9)发送状态码、响应、重定向、定时刷新、禁用浏览器缓存、响应字节数据、快捷重定向方法、完成防盗链
今天学习重点: 1.response和request响应和应答分别学习: 请求响应流程图 response 1 response概述 response是Servlet.service方法 ...
- 分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)
原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ======== ...
- FTP下载时连接正常获取不到数据
今天项目中要下载快钱的对账单,快钱对账单文件的FTP服务器是Unix系统,connectServer方法中已连接成功,reply code:220. 但是问题是download方法中的ftpClien ...
随机推荐
- switfmailer 邮件时间错误 处理
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use ...
- TestNG参数化测试-数据提供程序 @DataProvider方式
在 testng.xml 中指定参数可能会有如下的不足: 1.如果你压根不用 testng.xml. 2.你需要传递复杂的参数,或者从Java中创建参数(复杂对象,对象从属性文件或者数据库中读取的et ...
- robotframework·WEB端基础
date:2018526 day10 一.导入库 导入的库分两种,一种是导入常用库,如String.Collections等(Library String.Collections,再运用库中的关键字) ...
- python 应用 pyamg
paper idea要用到pyamg,虽然这个包只有几行代码,但是还是折磨了我挺久,配置环境什么的就废了挺多时间. 好久没用pyamg了,然后又换了电脑,突然感觉有点方,,都忘了之前怎么弄的,今天运行 ...
- 适配手机端之 rem
(function() { var psdWidth = 1080, maxRem = 100, ch = document.documentElement.clientHeight || docum ...
- python使用traceback获取详细的异常信息
原创来自:https://blog.csdn.net/mengtao0609/article/details/55049059 python使用traceback获取详细的异常信息 2017年02月1 ...
- linux修改ssh端口 以及禁止root远程登录 (实验机 CentOs)
把ssh默认远程连接端口修改为3333 1.编辑防火墙配置: vi /etc/sysconfig/iptables 防火墙新增端口3333,方法如下: -A INPUT -m state --stat ...
- Ubuntu下设置开机后自动运行命令
从道理上来讲,ubuntu开机应该是能够设置执行一些脚本的,事实上确实如此,网上给出了很多解决的方案,基本上是分为两种, 第一种是编辑/etc/下的rc.local脚本,
- hdu 1280 堆排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- mvc core2.1 Identity.EntityFramework Core ROle和用户绑定查看 (八)完成
添加角色属性查看 Views ->Shared->_Layout.cshtml <div class="navbar-collapse collapse"> ...