【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 ...
随机推荐
- leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
Longest Increasing Subsequence 最长递增子序列 子序列不是数组中连续的数. dp表达的意思是以i结尾的最长子序列,而不是前i个数字的最长子序列. 初始化是dp所有的都为1 ...
- SublimeLinter插件对PHP语法检测不起作用的解决办法
系统:windows7+sublime3 1.安装sublimelinter ctrl+shift+p=>pi=>回车=>sublimelinter=>回车 2.安装好后进行配 ...
- linux 中安装mysql8.0
转载自:http://www.linuxidc.com/Linux/2016-11/137608.htm 可能有人会惊奇MySQL为何从5.x一下跳跃到了8.0.事实上,MySQL 5.x系列已经延续 ...
- crobtab不执行定时任务的原因及解决办法
服务未能启动或者权限问题.路径问题,网上很多种解决办法,就不多的说了. 1.查看crond日志: cat /var/log/cron 刚开始我的日志里面并没有执行写的脚本. 原因在于在脚本开始没有写s ...
- Web—13-判断网站请求来自手机还是pc浏览器
判断网站请求来自手机还是pc浏览器 #判断网站来自mobile还是pc def checkMobile(request): """ demo : @app.route(' ...
- Easyui之accordion修改Title样式,字体等
.accordion{background:#fff;overflow:hidden;}.accordion .accordion-header{background:#efefef;border-t ...
- (1)linux和oracle---环境搭建
对linux和oracle一直是敬而远之,稍微有些了解.无奈由于工作需要这次要硬着头皮上了!@#!@@#$%^^ 对于重windows用户的我来说,简直是万种折磨. 算是做个记录吧,一定要坚持下去. ...
- 小程序中 function (res)的理解
刚看到小程序里面一段代码 success: function (res) { console.log('搜索结果:'); console.log(res); wx.hideToast(); if (r ...
- 点击label执行两次的bug
首先我是这样的写的: <label> <input type="checkbox">点击 </label> 无论点击input还是文字,都会执行 ...
- Redis之配置文件redis.conf
解读下 redis.conf 配置文件中常用的配置项,为不显得过于臃长,已选择性删除原配置文件中部分注释. # Redis must be started with the file path as ...