性能测试之JMeter中JSON断言详解
JMeter中有个元件叫做断言(Assertion),它的作用和LoadRunner中的检查点类似。用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
若接口的返回的Response Body
为JSON格式数据,使用JSON断言组件来判断测试结果是较好的选择,判定也更灵活一些。
1、JSON断言组件界面详解
添加JSON断言组件操作:选中“取样器”右键 —> 添加 —> 断言 —> JSON断言
。
界面如下图所示:
JSON断言组件的详细说明:
- 名称:JSON断言组件的自定义名称,见名知意最好。
- 注释:即添加一些备注信息,对该JSON断言组件的简短说明,以便后期回顾时查看。
Assert JSON Path exists
:填写 JSONPath 表达式。Additionally assert value
:断言值,也就是否额外验证根据JSONPath表达式提取的值。
如果不勾选,则验证JSONPath表达式在JSON文档中找到路径。
如果勾选,则验证根据JSONPath表达式提取的值,是否与预期值一样。(勾选)Match as regular expression
:预期值是否可以使用正则表达式。
如果不勾选,则预期值不能使用正则表达式表示。
如果勾选,则预期值可以使用正则表达式表示。Expected Value
:填写预期值。Expect null
:预期值为NULL。
若验证提取的值为NULL,则勾选此项。
注意:
1)如验证NULL值,还是需要勾选Additionally assert value
选项,否则验证的是JSONPath表达式能否找到路径。
2)预期值不填表示空字符,与NULL不等价。Invert assertion (will fail if above conditions met)
:若勾选,表示对断言结果取反。
注意:预期值除了NULL外,还有一种特殊的值,就是空数组。这时预期值不能不填,需要设置为
[]
,表示空数组。
2、JSON断言组件的使用
我们以一个登陆接口,来演示JSON断言组件的应用。
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组里面,添加取样器“HTTP请求”组件:
选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。 - 在取样器下,添加断言“JSON断言”组件:
选中“取样器”右键 —> 添加 —> 断言 —> JSON断言
。 - 在取样器下,添加监听器“断言结果”组件:
选中“取样器”右键 —> 添加 —> 监听器 —> 断言结果
。 - 在线程组里面,添加监听器“察看结果树”组件:查看结果,
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)登陆接口请求界面内容
标准的Post请求,填写请求的基本信息和参数即可。
编写内容如下:
Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834
3)JSON断言界面内容
我们需要根据JSON Path,从返回的JSON数据中提取需要判断的实际结果。再设置预期结果,两者进行比较得出断言结果。
- JSON断言界面中我们要编写JSONPath表达式,来从响应体数据中找到需要的数据。
- 然后要勾选
Additionally assert value
选项。 - 最后在
Expected Value
填写预期值。
以上是通用步骤,编写好的JSON断言如下图所示:
说明JSON断言的模式:
JSON断言可以对服务器返回的JSON文档进行验证,JSON断言有两种使用模式:
- 根据JSONPath表达式,能否在JSON文档中找到路径。也就是只关注路径存不存在,不管值找的对不对。
- 根据JSONPath表达式提取值,并对值进行验证。
JSON断言的判断方式:
- 若文档格式为非JSON,则断言失败。(重点)
- 若找不到JSONPath路径,则断言失败。(重点)
- 若JSONPath表达式找到提取值,且没有设置预期值,则断言通过。
- 若JSONPath表达式找到提取值,且与预期值不一致,则断言失败。(重点)
- 若JSONPath表达式找到提取值,且与预期值一致,则断言通过。
- 若JSONPath表达式找到提取值是一个数组,迭代判断是否有提取值与预期值匹配,有则通过,没有则失败。
(4)查看运行结果
我们在察看结果树组件中,观察脚本运行之后的结果。
如果断言正确,和正常发送请求一样,如下图:
如果断言失败,则会出现断言失败的提示,如下图所示:
(5)断言结果组件说明
也添加断言结果监听器,通过断言结果组件来判断断言是否通过。
如下图所示:
说明:
- 已通过的断言仅显示取样器名称。
- 未通过的,除了显示取样器的名称,还显示错误原因。
3、JSON与JSON Path的简单说明
(1)JSON
JSON(JavaScript Object Notation
)是一种轻量级的数据交换格式。
JSON数据容易理解,便于阅读和编写,同时计算机也易于解析和生成,所以JSON有广泛的应用。
JSON常用数据结构:
对象(object)格式:
{"name": "zhangsan", "sex": 1, "age": 25 }
数组(Array)格式:
{"man": [{"name": "zhangsan", "sex": 1, "age": 21}, {"name": "lisi", "sex": 1, "age": 18}], "weman": [{"name": "wangwu", "sex": 0, "age": 25}, {"name": "zhaoliu", "sex": 0, "age": 28}] }
(2)JSONPath
我们经常使用XPath来分析、转换以及有选择地从XML文档中提取数据。
与XPath类似,JOSNPath可以方便的从JSON结构中发现和提取数据。
JSONPath中的“根成员对象”总是被称为$
,无论它是对象还是数组。
JSONPath表达式有dot–notation
(.
号)和bracket–notation
([]
号)两种不同的表示风格。
例如:
$.store.book[0].title
$['store']['book'][0]['title']
(3)JSONPath语法
JSONPath语法如下表:
JSON数据如下:
{ "store": {"book": [ { "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}
具体示例如下表:
Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834
性能测试之JMeter中JSON断言详解相关推荐
- 性能测试之JMeter中ForEach控制器详解
1.什么是逻辑控制器 JMeter官网对逻辑控制器的解释是:"Logic Controllers determine the order in which Samplers are proc ...
- jmeter csv参数化_性能测试之Jmeter中如何设置参数化数据
参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...
- 性能测试之Jmeter中如何设置参数化数据
参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...
- 性能测试之Jmeter 中 CSV 如何参数化测试数据并实现自动断言
当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...
- python中json模块博客园_Python中的Json模块详解
Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...
- python中的json函数_python中装饰器、内置函数、json的详解
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- pm2 start 带参数_pm2 start命令中的json格式详解
就像苏南大叔所说的那样,pm2 start npm -- start这条命令是pm2的万能命令,pm2 start ,就是这一系列命令中的最豪华命令.这个json我们可以理解为一个任务参数描述文件.通 ...
- 性能测试之Jmeter元件
性能测试之Jmeter元件 1.性能测试的本质 性能测试的定义 基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求. 关注点 时间性能 空间 ...
- Jmeter压测工具详解
Jmeter压测工具详解 1. Jmeter概述 1.1 Jmeter简介 1.2 Jmeter适用场景 2. Jmeter安装配置 2.1 下载安装 2.2 环境配置(可不配) 2.3 Jmeter ...
最新文章
- linux run文件夹,Linux下运行run文件
- mysql-5.7.24-winx64忘记密码该咋解决
- Intel和IBM押重注的神经模态计算,会给行业带来什么样的变化
- pandas -表的横向合并 纵向合并
- 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
- OpenAPI实现云主机闪电交付最佳实践
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
- php表单验证并使值变化,php – Zend_Form手动设置和验证字段值
- Qt工作笔记-3D效果唤出QWidgets界面(QGraphicsProxyWidget与QTimeLine)
- 按钮跳转到其他ui界面_《明日方舟》UI/UX设计复盘
- java下拉模糊查询_select2 智能补全模糊查询select2的下拉选择框使用
- FragmentActivity和Activity的区别
- mysql 去重 根据id_点赞功能,用MySQL还是Redis
- kuka机器人外部轴异步_KUKA机器人外部轴标准配置
- iOS多线程之5.GCD的基本使用
- 带你学习《深入理解计算机系统》程序性能优化探讨(5)——高速缓存、存储器山与矩阵乘法优化
- 软件项目管理(学习笔记)
- 工作计划表怎么做?30份Excel工作计划表模板,职场人必备,可套用
- 并购支付牌照中金支付90.01%股权该注意哪些风险
- LoRa远程监控系统
热门文章
- python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
- 2020年海南大学计算机调剂,2020年海南大学招收调剂生
- vsan主机高级优化参数配置
- Java基础学习总结(131)——项目开发中真的有必要使用Lombok插件么?
- Windows学习总结(10)——Windows系统中常用的CMD命令详解
- caffe图像分类教程_跟我上手深度学习: 五分钟尝试第一个深度学习(Caffe)训练和图像分类(详细图文步骤)...
- php携程 线程,携程api开发解决方法
- java 定时任务spring_Spring实现定时任务调度
- 12c跨平台完成PDB的备份迁移
- mysql 索引扩展