在做接口测试时,对响应数据的校验是非常重要的部分;在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言、BeanShell断言等等,BeanShell断言可以自定义断言,自由灵活的用脚本实现断言。

1.什么是BeanShell ?

小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法 
运行其内部的脚本处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码,因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果。

下面来介绍如何使用beanshell来进行断言和数据处理,假如我们有如下的response数据:

 {
"message": "不能发送小于当前时间点的定时任务",
"statusCode": 200
}

(1).我们使用JSONObject对象来获取json数据,首先需要下载org.json的jar包,然后在测试计划中导入该jar包,并在jmeter的lib目录下放入该jar包,下面验证statusCode的值是否等于200

 import org.json.*;

 //获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString); //判断返回值是否和预期一致
if (responseJson.getInt("statusCode") != 200) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "statusCode的返回值有误";
}

(2).如果要验证respone中message的值是否与预期一致,需要怎么做呢?

 import org.json.*;

 //获取上一个请求的返回
String jsonString = prev.getResponseDataAsString();
JSONObject responseJson = new JSONObject(jsonString); String fbpcontent = responseJson.getString("message");
if (!fbpcontent.equals("不能发送小于当前时间点的定时任务")) {
//把断言失败置为真,即用例失败,并在结果树中显示FailureMessage
Failure = true;
FailureMessage = "message与实际值不一致";
}

假如我们有如下的response响应数据:

 {
"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": "",
}
]
}

(3).我们需要解析数组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
}
}

(4).我们需要解析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();

 

最新文章

  1. jdk顺序表笔记
  2. win7下安装配置nodejs、使用npm安装express
  3. CClayer ignoreAnchorPointForPosition 参数的作用
  4. Centos源码安装Python3
  5. JSP 使用
  6. navicat 或者workbench 无法连接127.0.0.1(61)的解决方法
  7. 空格的URL编码
  8. Windows api 函数全部列表 (未完成)
  9. linux常见命令的列表
  10. [转] 三步将你的 React Native 项目运行在 Web 浏览器上面
  11. php in_array比较原理和类型比较问题
  12. 在[self addsubView:xxx]中,self.name 和 _name的区别
  13. radio与checkbox
  14. Cocos移植Android-Android.mk编译后的文件
  15. [LeetCode] 120. Triangle _Medium tag: Dynamic Programming
  16. .NET--------未能加载文件或程序集“System.Net.Http.Formatting”或它的某一个依赖项。
  17. python数据分析及展示(一)
  18. 遇到了ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
  19. [转]Peer-to-Peer Communication Across Network Address Translators
  20. 《机器学习实战》AdaBoost算法(手稿+代码)

热门文章

  1. [SoapUI] 如何让gzip和chunked的response显示出来 [设置Accept-Encoding为deflate]
  2. kbmMWtable for XE5 接近尾声
  3. mongo学习-固定集合
  4. swift UITabelVIew - 纯代码自定义tabelViewCell
  5. [Selenium With C#基础教程] Lesson-03 超级链接
  6. jmeter 性能分析 (一点点加)
  7. Codeforces758C Unfair Poll 2017-01-20 10:24 95人阅读 评论(0) 收藏
  8. c#中sealed修饰符
  9. 不用外部插件启用u盘ntfs写功能
  10. C语言—第二次作业