【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果
脚本结构
上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确。Json格式的相应结果
{ "code": 0, "msg": "success", "success": true, "data": [ { "materialCode": "6902265111719", "materialName": "海天蒸鱼豉油450ml*12", "materialType": 1, "sixNineCode": "6902265111719", "expirationDate": 720, "packingSpecification": 12, "basicUnit": "BOX", "minSaleUnit": "BOT", "importFlag": 1, "transportFlag": 0, "sourceSystem": 10, "createrName": "MD自动转换物料", "updaterName": "loms", "pkId": "6902265111719", "mdMaterialCode": "6902265111719", "verifyStatus": 2, "creater": -2, "createTime": 1538984955619, "updater": -2, "updateTime": 1538984955619, "useStatus": 1 }, { "materialCode": "6902265113003", "materialName": "海天特辣黄豆酱230g*15", "materialType": 1, "sixNineCode": "6902265113003", "expirationDate": 720, "packingSpecification": 15, "basicUnit": "BOX", "minSaleUnit": "BOT", "importFlag": 1, "transportFlag": 0, "sourceSystem": 10, "createrName": "MD自动转换物料", "updaterName": "loms", "pkId": "6902265113003", "mdMaterialCode": "6902265113003", "verifyStatus": 2, "creater": -2, "createTime": 1538984956726, "updater": -2, "updateTime": 1538984956726, "useStatus": 1 } ], "EnumVal": {} }
BeanShell脚本
import org.json.JSONObject; import org.json.JSONArray; String result = prev.getResponseDataAsString(); JSONObject response = new JSONObject(result); JSONArray array = response.getJSONArray("data"); if (array.length() != 2) { Failure=true ; FailureMessage ="array size < 2"; return; } int count = 0; for (int i = 0; i < 2; i++) { JSONObject temp = array.getJSONObject(i); String pkId = temp.get("pkId").toString(); if (pkId.equals("6902265111719")) { if (!temp.get("materialCode").equals("6902265111719")) { Failure=true ; FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode"); return; } if (!temp.get("materialName").equals("海天蒸鱼豉油450ml*12")) { Failure=true ; FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName"); return; } count++; } if (pkId.equals("6902265113003")) { if (!temp.get("materialCode").equals("6902265113003")) { Failure=true ; FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode"); return; } if (!temp.get("materialName").equals("海天特辣黄豆酱230g*15")) { Failure=true ; FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName"); return; } count++; } } if (count != 2) { log.info("count != 2"); Failure=true ; FailureMessage ="pkId not in range"; return; } log.info(array.toString())
1、先通过prev.getResponseDataAsString获取到响应的返回结果,然后通过org.json.JSONObject和org.json.JSONArray两个类来解析返回的相应结果。
2、解析出想要的Json对象后,在for循环中对Json对象中每一个需要检测的值和期望的进行比对,如果不正确,Failure设置为true,FailureMessage设置具体的错误信息。
3、for循环中有可能一开始的pkId取值就和期望不一致,所以这时需要计算下遍历的计数count,如果计数和期望的不一致,说明响应结果和期望结果的数量不一致。
【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果的更多相关文章
- 使用BeanShell断言判断请求返回的Json相应结果(不同json格式整理)
第一种json格式 { "code": 0, "msg": "success", "success": true, &q ...
- jmeter ---测试TCP服务器/模拟发送TCP请求
jmeter测试TCP服务器/模拟发送TCP请求 jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响 ...
- jmeter测试TCP服务器/模拟发送TCP请求
jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应. jmeter模拟发送TCP请求的方法: 1. ...
- jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...
- java 接口请求返回通用json
public class BaseResponseBody { // 不能添加属性 仅做泛型使用 } public class ResponseBase<T extends BaseRespon ...
- Jmeter测试入门——带token的http请求
安装 官网下载地址:http://jmeter.apache.org/download_jmeter.cgi 下载完成后解压zip包 启动JMeter,双击JMeter解压路径bin下面的jmeter ...
- php 判断请求是否是json
$object =file_get_contents("php://input"); $arr = is_json($object); if($arr){ var_dump($ar ...
- 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解
目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...
- jmeter测试结果jtl字段分析
1 Bytes Throughput Over Time 每秒传输字节吞吐量,表明Jmeter在测试时,随着时间推移发送和接受的字节数 2 Response Codes per Second ...
随机推荐
- (转)进程process和线程thread的关系
写的很好很明白cpu每次只能执行一个进程,所以其他进程会挂起 在一个进程中,允许存在n个线程,n个线程共享这个进程中的资源 多个线程在共享的时候存在资源互斥,一次只能一个线程,会需要加锁 一次存在固定 ...
- 查找系统中jdk的位置
查找系统中jdk的位置: [root@localhost native]# find /|grep jni_md.h /var/lib/docker/overlay2/ec7a5439382a8a6d ...
- Vue packages version conflicts 错误修复
我们在使用Vue作为weex中的前端框架的开发过程中,某次 npm start 遇到了如下的错误: Vue packages version mismatch: - vue@2.5.16 - vue- ...
- java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...
- code#5 P4 逻辑树
逻辑树 时间限制: 3.0 秒 空间限制: 512 MB 相关文件: 题目目录 题目描述 有一棵树,叫逻辑树. 这个树有根,有 2N−1 个节点,其中 N 个叶子,每个非叶节点恰好有两个孩子. 每 ...
- ABAP术语-V2 Module
V2 Module 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/21/1115720.html Analogously to V1 the ...
- MySQL进阶(视图)---py全栈
目录 mysql进阶(视图)---py全栈 一.什么是视图? 二.视图的特性 三.视图的优点 四.使用场合 五.视图基本操作 六.案例 mysql进阶(视图)---py全栈 一.什么是视图? 视图是从 ...
- 在阿里云的CentOS 6.5 上面安装 timidity++ 和 ffmpeg(含libmp3lame) 实现命令行将midi转换为mp3
首先使用yum安装需要的组件 yum install -y automake autoconf libtool gcc gcc-c++ yasm yasm-devel 然后从sourceforge下载 ...
- 基于 pyMongo 和 wxPython 实现的 MongoDB Schema Analyser
MongoDB 作为文档型 NoSql 数据库,它的集合表结构往往不像关系型数据库那么固定和统一,同一个集合下的文档(document)的字段变化和差异可能很大,特别是在数据模型缺乏良好规划和规范的数 ...
- 初识hadoop之分布式文件系统(HDFS)
Hadoop常用发行版: Apache Hadoop CDH Cloudera Distributed Hadoop HDP Hortonworks Data Platfrom 分布式文件系统(H ...