研究这个的目的是:如果返回信息是比较复杂的,需要对返回信息中数据以及数据的层级做断言

我找了一些我们的接口,层级关系都太简单了,最复杂的就是这两个了:【而且都是get接口,原来get接口还要增加测试点啊~^_^】

或者获取json数据的值,又如何看出层级关系呢?

说说思路吧:

1. 我以前没有考虑过这个问题,咋一问我也想不起来,想着要写beanshell来处理了吧,内心是抗拒的。但如果必须要校验,也只能慢慢研究写了;

2.研究过程中【先百度嘛^_^】,恰巧昨天看到Postman中对json数据处理逻辑,对返回信息中json数据可以如下操作,这是postman提供的功能,心里寻思着beanshell按照此逻辑一步步写,将每个第一层取出判断,再到第二层[2].xx,一层层做判断;

3. 那万一因为返回信息json内容不一样,有的返回10个元素,有的不做返回(比如null默认不返回),那岂不是要报错【看来得和开发确认好】;

4.Json默认返回,即使某个字段为null, 也是返回的,比如 name:null

try{

var jsonData = pm.response.json();

} catch (e) {

console.log("No body");

}

pm.environment.unset("fileID");

pm.environment.set("fileID", jsonData.id);

{
"resCode":"000",
"resMsg":"success",
"customerData":
{
"cardnum":"6275980334267422136",
"name":"小******",
"idcard":"3206831989********",
"mobile":"1896****440",
"address":"江苏省南通市崇川区紫琅路*****Room*****SS",
"zip":"226000",
"email":"testotest1@***",
"preferstore":"856"
}
}

 

{
"resCode":"000",
"resMsg":"success",
"couponData":
[
{
"coupid":3071,
"coupname":"全国券1",
"coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券1</div></div>",
"barcode":"1234567890",
"startdate":"2018-01-03 00:00:00",
"enddate":"2019-03-10 23:59:59",
"state":"审批通过",
"apv_status":null,
"isDefault":0
},
{
"coupid":3072,
"coupname":"全国券2",
"coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券2</div></div>",
"barcode":"1234567890",
"startdate":"2018-01-03 00:00:00",
"enddate":"2021-01-28 23:59:59",
"state":"审批通过",
"apv_status":null,
"isDefault":0
},
{
"coupid":3073,
"coupname":"全国券3",
"coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券3</div></div>",
"barcode":"1234567890",
"startdate":"2018-01-03 00:00:00",
"enddate":"2022-02-24 23:59:59",
"state":"审批通过",
"apv_status":null,
"isDefault":0
}
]
}

Step1:  Jmeter自带了这个json提取器,至少我的Jmeter4.0有,之前的版本应该可以下载插件获取

元件名称:JSON Extractor

假设下面是我的返回json

{"resCode":"000","resMsg":"ok","resCardNum":"6275980334267422623"}

元件配置信息需要如下:

然后用beanshell获取这个变量验证一下:beanshell中用${定义的变量名}

加个Debug Sampler进行验证下,助于理解JSON Extractor的使用

如下是获取的返回json信息中的卡号信息:

Step2: 对于复杂的json操作

渐进明朗了,json该怎么操作就怎么操作呗,重点就是标红框的部分,下一级[1].xx获取即可

Step3: 不管是简单的json还是复杂的json,对于已经提取出来的变量进行断言,这边就用BeanShell Assertion

Step4: 刚刚看到有JSON Assertion, 好像有条新大陆了,^_^,Jmeter真是你永远都在发掘它的潜能~~

需要点击Additionally assert value,然后才能网Excepted Value下输入期望值

我随便输入了字符串bbbb和实际的卡号不符合,所有报错了~

Jmeter 4.0 对返回Json处理的更多相关文章

  1. JMeter 返回Json数据提取方法

    JMeter中,对response返回JSON格式的数据进行处理,格式如下: { "code":2000, "message":"success&qu ...

  2. Spring MVC 3.0 返回JSON数据的方法

    Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...

  3. SpringMVC4.0以后版本返回json格式数据问题

    第一次写博文写的不好,但希望能帮助大家,有什么偏颇的地方希望大家多多斧正.在这个问题上困扰了我两天,这两天翻来覆去睡不着.一直在想这个问题.废话不多说下面进入正题. 1.创建创建web项目,加入Spr ...

  4. jmeter 4.0版本更新说明(个人做个记录)总版本更新合集

    版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供 ...

  5. jmeter 5.0版本更新说明(个人做个记录)

    变化   此页面仅详细说明了当前版本中所做的更改. 先前更改的历史记录中详细介绍了早期更改.   5.0版 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢 ...

  6. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  7. Struts2返回json格式数据踩坑记录

    事件起因 昨天提测修改冻结/解冻银行卡样式的功能,微姐测试过程中发现调用ajax请求耗时过长,今天来排查,发现浏览器请求/finance/ajax/freeze/ajaxGetShopLists时,对 ...

  8. spring4mvc返回json(bean,list,map)

    因为spring3和spring4的mvc在前端返回json所需要的jar包不一样,所以索性写一篇关于spring4mvc在前端返回json的博文. 首先,新建一个web项目,项目格式如图所示: co ...

  9. 类型转换及返回json对象的问题

    @ResponseBody @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST publi ...

随机推荐

  1. 机器学习理论基础学习14.1---线性动态系统-卡曼滤波 Kalman filter

    一.背景 动态模型 = 图 + 时间 动态模型有三种:HMM.线性动态系统(kalman filter).particle filter 线性动态系统与HMM的区别是假设相邻隐变量之间满足线性高斯分布 ...

  2. sublime text3搭建react native

    Sublime Text 3 搭建React.js开发环境 Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel-subl ...

  3. Linux系统——MySQL基础(一)

    # 数据库 ## 数据库简单的分类:(1)关系型数据库:MySQL和Oracle.Postgresql(2)非关系型数据库:Memcached和Redis(3)消息队列中间件(4)搜索引擎数据库:El ...

  4. uva10003

    /* 2014.3.6 这题说的是给你了一根木棒 然后 n 个点(线段上的点) 然后计算 在这 n个点上都切下去的 最小花费 举个例子 100 3 25 50 75 如果 从 25 开始切 然后切 5 ...

  5. jstat命令查看jvm的GC情况

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]  注意!!!:使用的jdk版本是jdk8. ...

  6. Python Web学习笔记之多线程编程

    本次给大家介绍Python的多线程编程,标题如下: Python多线程简介 Python多线程之threading模块 Python多线程之Lock线程锁 Python多线程之Python的GIL锁 ...

  7. Java 第二次实验20145104 张家明

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 (一)单元测试 ...

  8. 20165211 2017-2018-2 《Java程序设计》第7周学习总结

    20165211 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 本周,我学习了书本上第十一章的内容,以下是我整理的主要知识. 第十一章 JDBC和MySQL ...

  9. define和typedef

    #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错. 所以define后加分号,不然会把分号也会一 ...

  10. 【资源】分享一个最新版sublime 3143的注册码,亲测可用

    注:请勿用作商业用途,有能力者请购买正版!!! —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD9 ...