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)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组里面,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  4. 在取样器下,添加断言“JSON断言”组件:选中“取样器”右键 —> 添加 —> 断言 —> JSON断言
  5. 在取样器下,添加监听器“断言结果”组件:选中“取样器”右键 —> 添加 —> 监听器 —> 断言结果
  6. 在线程组里面,添加监听器“察看结果树”组件:查看结果,选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(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断言有两种使用模式:

  1. 根据JSONPath表达式,能否在JSON文档中找到路径。也就是只关注路径存不存在,不管值找的对不对。
  2. 根据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断言详解相关推荐

  1. 性能测试之JMeter中ForEach控制器详解

    1.什么是逻辑控制器 JMeter官网对逻辑控制器的解释是:"Logic Controllers determine the order in which Samplers are proc ...

  2. jmeter csv参数化_性能测试之Jmeter中如何设置参数化数据

    参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...

  3. 性能测试之Jmeter中如何设置参数化数据

    参数化配置 jmeter中进行参数化设置,右击测试计划或者线程组,add->config element->CSV Data Set Config参数1.png Allow quoted ...

  4. 性能测试之Jmeter 中 CSV 如何参数化测试数据并实现自动断言

    当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...

  5. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  6. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  7. pm2 start 带参数_pm2 start命令中的json格式详解

    就像苏南大叔所说的那样,pm2 start npm -- start这条命令是pm2的万能命令,pm2 start ,就是这一系列命令中的最豪华命令.这个json我们可以理解为一个任务参数描述文件.通 ...

  8. 性能测试之Jmeter元件

    性能测试之Jmeter元件 1.性能测试的本质 性能测试的定义 基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求. 关注点 时间性能 空间 ...

  9. Jmeter压测工具详解

    Jmeter压测工具详解 1. Jmeter概述 1.1 Jmeter简介 1.2 Jmeter适用场景 2. Jmeter安装配置 2.1 下载安装 2.2 环境配置(可不配) 2.3 Jmeter ...

最新文章

  1. linux run文件夹,Linux下运行run文件
  2. mysql-5.7.24-winx64忘记密码该咋解决
  3. Intel和IBM押重注的神经模态计算,会给行业带来什么样的变化
  4. pandas -表的横向合并 纵向合并
  5. 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
  6. OpenAPI实现云主机闪电交付最佳实践
  7. 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
  8. php表单验证并使值变化,php – Zend_Form手动设置和验证字段值
  9. Qt工作笔记-3D效果唤出QWidgets界面(QGraphicsProxyWidget与QTimeLine)
  10. 按钮跳转到其他ui界面_《明日方舟》UI/UX设计复盘
  11. java下拉模糊查询_select2 智能补全模糊查询select2的下拉选择框使用
  12. FragmentActivity和Activity的区别
  13. mysql 去重 根据id_点赞功能,用MySQL还是Redis
  14. kuka机器人外部轴异步_KUKA机器人外部轴标准配置
  15. iOS多线程之5.GCD的基本使用
  16. 带你学习《深入理解计算机系统》程序性能优化探讨(5)——高速缓存、存储器山与矩阵乘法优化
  17. 软件项目管理(学习笔记)
  18. 工作计划表怎么做?30份Excel工作计划表模板,职场人必备,可套用
  19. 并购支付牌照中金支付90.01%股权该注意哪些风险
  20. LoRa远程监控系统

热门文章

  1. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
  2. 2020年海南大学计算机调剂,2020年海南大学招收调剂生
  3. vsan主机高级优化参数配置
  4. Java基础学习总结(131)——项目开发中真的有必要使用Lombok插件么?
  5. Windows学习总结(10)——Windows系统中常用的CMD命令详解
  6. caffe图像分类教程_跟我上手深度学习: 五分钟尝试第一个深度学习(Caffe)训练和图像分类(详细图文步骤)...
  7. php携程 线程,携程api开发解决方法
  8. java 定时任务spring_Spring实现定时任务调度
  9. 12c跨平台完成PDB的备份迁移
  10. mysql 索引扩展