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请求,填写请求的基本信息和参数即可。

编写内容如下:

(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基础 — 30、JMeter中JSON断言详解的更多相关文章

  1. 『与善仁』Appium基础 — 12、Appium的安装详解

    目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...

  2. 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解

    目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...

  3. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  4. 『动善时』JMeter基础 — 8、JMeter主要元件介绍

    目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...

  5. 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍

    目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...

  6. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

  7. 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作

    目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...

  8. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  9. 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler

    目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...

随机推荐

  1. 网络编程NIO之Reactor线程模型

    目录 单Reactor线程模型 基于工作线程的Reactor线程模型 多Reactor线程模型 多Reactor线程模型示例 结束语 上篇文章中写了一些NIO相关的知识以及简单的NIO实现示例,但是示 ...

  2. 《深入理解计算机系统》学习笔记整理(CSAPP 学习笔记)

    简介 本笔记目前已包含 CSAPP 中除第四章(处理器部分)外的其他各章节,但部分章节的笔记尚未整理完全.未整理完成的部分包括:ch3.ch11.ch12 的后面几小节:ch5 的大部分. 我在整理笔 ...

  3. Apache HTTP Server与Tomcat整合学习记录

    Apache HTTP Server与Tomcat整合 个人环境:Windows10,JDK8,Tomcat8.5,Apache2.4,JK模块1.2.4 前言 ​ 其实网上有很多教程,但问题是得每次 ...

  4. Mysql通配符的使用

    通配符的分类:%百分号通配符: 匹配任意字符,包括0个到多个_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.    escape:用来转义特定字符 [字符列]  :字符列中任何一个 ...

  5. 1053 Path of Equal Weight

    Given a non-empty tree with root R, and with weight W​i​​ assigned to each tree node T​i​​. The weig ...

  6. 1091 Acute Stroke

    One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...

  7. hdu3715 二分+2sat+建图

    题意:       给你一个递归公式,每多一层就多一个限制,问你最多能递归多少层. 思路:      先分析每一层的限制 x[a[i]] + x[b[i]] != c[i],这里面x[] = 0,1, ...

  8. 缓冲区溢出分析第06课:W32Dasm缓冲区溢出分析

    漏洞报告分析 学习过破解的朋友一定听说过W32Dasm这款逆向分析工具.它是一个静态反汇编工具,在IDA Pro流行之前,是破解界人士必然要学会使用的工具之一,它也被比作破解界的"屠龙刀&q ...

  9. POJ2594 最小路径覆盖

    题意:       题意就是给你个有向无环图,问你最少放多少个机器人能把图全部遍历,机器人不能走回头路线. 思路:      如果直接建图,跑一遍二分匹配输出n - 最大匹配数会跪,原因是这个题目和以 ...

  10. hdu5015 矩阵快速幂233(好题)

    题意:       给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1 ...