当前位置: 首页 > news >正文

beanshell获取响应结果数据

http://blog.csdn.net/lluozh2015/article/details/72834014

【Jmeter】BeanShell断言--数据处理

标签: jmeter
 分类:
Interface(20) 

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);

转载于:https://www.cnblogs.com/jtestroad/p/8459439.html

相关文章:

  • XYGame-网络同步3-防作弊
  • 红黑树 - C++代码实现
  • 自己定义iOS上双击Home键图切换
  • 数据预测的步骤
  • Elasticsearch学习笔记-04.2删除文档
  • 磁珠与电感的区别,看了就灰常明白了
  • Spring Quartz 集群动态创建任务
  • 考试题解集合
  • sublime Text3 插件
  • Http1.0和Http1.1的主要区别
  • DOM操作表格
  • BZOJ1486 最小圈 [分数规划+负权环]
  • 医疗成像领域引进人工智能: AI 帮助医生进行成像分析
  • linux命令总结basename
  • 遍历字典 NSDictionary
  • JWT究竟是什么呢?
  • Mybatis初体验
  • Netty源码解析1-Buffer
  • unity如何实现一个固定宽度的orthagraphic相机
  • yii2权限控制rbac之rule详细讲解
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 排序算法学习笔记
  • ​第20课 在Android Native开发中加入新的C++类
  • ​业务双活的数据切换思路设计(下)
  • (BFS)hdoj2377-Bus Pass
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (十三)Flask之特殊装饰器详解
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)linux文件内容查看
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (原)Matlab的svmtrain和svmclassify
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ***原理与防范
  • ./和../以及/和~之间的区别
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET6实现破解Modbus poll点表配置文件
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/sudoer文件配置简析
  • :O)修改linux硬件时间
  • [ 数据结构 - C++]红黑树RBTree
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Angular 基础] - 指令(directives)
  • [codeforces]Checkpoints
  • [Hive] 常见函数
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [java] 23种设计模式之责任链模式
  • [LeetBook]【学习日记】数组内乘积
  • [LeetCode] Minimum Path Sum
  • [lesson17]对象的构造(上)
  • [one_demo_16]直接插入排序的demo