news 2026/4/21 19:45:36

JMeter断言之JSON断言

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JMeter断言之JSON断言

JSON断言

若服务器返回的Response Body为JSON格式的数据,使用JSON断言来判断测试结果是较好的选择。

首先需要根据JSONPath从返回的JSON数据中提取需要判断的实际结果,再设置预期结果,两者进行比较得出断言结果。

下面首先介绍JSON与JSON Path相关的基础知识。

一、JSON与JSONPath

▲ 什么是JSON

● JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。

● JSON容易理解,便于阅读和编写;同时计算机也易于解析和生成,所以JSON有广泛的应用。

JSON基于如下两种结构:

1.名称/值对的集合

在各种语言中,这可以作为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、键控列表(keyed list)或关联数组(associative array)来实现。

2.值的有序列表

在大多数语言中,这是以数组(array)、向量(vector)、列表(list)或序列(sequence)的形式实现的。

JSON用于描述文本数据结构,有如下形式:

1.对象(object)

对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。每个名称后面跟着:冒号,名称/值对之间用逗号分隔。

比如:

{"name":"zhangsan","sex":1,"age":25}

2.数组(Array)

数组是值的有序集合。数组以[(左中括号)开始,以](右中括号)结束。值之间用逗号分隔。

比如:

{ "man":[{"name":"zhangsan","sex":1,"age":21}, {"name":"lisi","sex":0,"age":18}, {"name":"wangwu","sex":0,"age":25}] }

3.值(value)

值可以是字符串、数字、true/false、null、对象或数组。

4.字符串(string)

字符串是由零个或多个Unicode字符组成的序列,用双引号括起来,使用反斜杠转义。

字符表示为单个字符串。字符串非常类似于C或Java中的字符串。

5.数字(number)

一系列0-9的数字组合,可以为负数或者小数。还可以用e或者E表示为指数形式;数字非常类似于C或Java数字,但只是不使用八进制和十六进制格式。

6.空白符(whitespace)

可以在任意成对的语法符号之间插入空白符(包括空格、换行符、回车符、横向制表符)。

▲ 什么是JSONPath

我们经常使用XPath来分析、转换以及有选择地从XML文档中提取数据。与XPath类似,JOSNPath可以方便从JSON结构中发现和提取数据。

JSONPath中的“根成员对象”总是被称为$,无论它是对象还是数组。JSONPath表达式有“dot–notation”(.号)和“bracket–notation”([]号)两种不同的表示风格。

例如,

$.store.book[0].title or $['store']['book'][0]['title']

▲ JSONPath语法元素

▲ JSONPath实例

{ "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 } } }

二、JSON断言

JSON断言可以对服务器返回的JSON文档进行验证。

JSON断言有两种使用模式:

1.根据JSONPath能否在JSON文档中找到路径;

2.根据JSONPath提取值并对值进行验证。

● 若文档格式为非JSON则断言失败;

● 若找不到路径断言失败;

● 若提取值与预期值不一致断言失败。

▲ 配置项

Assert JSON Path exists:

用于断言的JSON元素的路径(JSONPath)。

1.Additionally assert value

是否额外验证根据JSONPath提取的值。

● 不勾选,验证JSONPath能否在JSON文档中找到路径;

● 勾选,验证根据JSONPath提取值是否预期。

2.Match as regular expression

预期值是否可以使用正则表达式。

● 不勾选,预期值不能使用正则表达式表示;

● 勾选,预期值可以使用正则表达式表示。

Expected Value:

预期值。

1.Expect null

● 若验证提取的值为null,则勾选此项。

这里有两个地方需要额外注意:

a.验证null值,还是需要勾选“Additionally assert value”,否则验证的是JSONPath能否找到路径;

b.预期值不填表示空字符,与null不等价。

2.Invert assertion(will fail if above conditions met)

● 若勾选,表示对断言结果取反。

注意:

除了null外,还有一种特殊的值,就是空数组,预期值不能不填,需要设置为:[]

三、应用案例

这里仍以前面介绍过的查询被购买商品的总金额接口为例来讲述JSON断言的用法。

该接口返回的响应数据为JSON,故可以使用JSON断言。

▲ 操作步骤

1.对预期结果要验证的项进行参数化

这里验证err_msg,result

将预期结果写入csv文件中

比如:

case_name,goods_id,goods_attr,goods_num,error_msg,rslt
case1,9,226,3,,¥6630元
case2,,226,1,没有找到指定的商品或者没有找到指定的商品属性。,
case3,9,,1,,¥2298元
case4,9,226,,¥2308元

2.添加JSON Assertion并进行配置

JSON断言每次只能断言一个参数,因此这里需要添加多个JSON断言。

假设对错误消息与商品金额这个两个返回参数值做断言。

{ "err_msg": "没有找到指定的商品或者没有找到指定的商品属性。", "result": "", "qty": 1, "err_no": 1 } $.err_msg --> 没有找到指定的商品或者没有找到指定的商品属性。 $.qty --> 1

▲ JSON断言配置

1. 断言错误消息

2. 断言商品金额:

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:49:32

.eslintrc.js这个文件作用

.eslintrc.js 是 ESLint 的核心配置文件之一,用于定义 JavaScript/TypeScript 等代码的代码检查规则、解析器、插件、环境等配置,是前端工程中实现代码规范化、统一编码风格的关键文件。一、ESLint 是什么?ESLint 是一个开源的静态代码分析工…

作者头像 李华
网站建设 2026/4/17 16:51:04

Langchain-Chatchat结合MinIO实现文档持久化存储

Langchain-Chatchat 结合 MinIO 实现文档持久化存储 在企业级 AI 应用日益普及的今天,越来越多组织开始构建基于大模型的本地知识库问答系统。然而一个现实问题始终困扰着开发者:当用户上传了上百份 PDF、Word 手册后,如何确保这些文档不会因…

作者头像 李华
网站建设 2026/4/18 23:21:06

Langchain-Chatchat如何处理模糊性问题的回答?

Langchain-Chatchat 如何应对模糊性问题:从语义理解到可控生成的实践路径 在企业级智能问答系统中,一个看似简单的问题往往暗藏玄机。比如用户问:“那个项目进展怎么样了?”——“那个”指的是哪个?是上周会议提到的新…

作者头像 李华
网站建设 2026/4/20 18:23:51

线下娱乐破局:透明化运营+双线引流

一、传统线下娱乐场所的普遍困局许多实体娱乐场所的经营者都面临相似的烦恼:客流量越来越不稳定,顾客消费频次明显下降。设备投入不断加大,但真正能持续产生收益的项目却寥寥无几。更棘手的是,收入来源过度依赖到店消费——天气不…

作者头像 李华
网站建设 2026/4/19 17:31:45

docker安装mongodb

一、前期准备 1.在服务器上面创建三个目录做为挂载到docker (/mongo/data,/mongo/logs,/mongo/conf ) 由于我们要把宿主的配置文件同步容器中,所以要在/mogo/conf创建mogodb的配置文件 mongod.conf ,内容如下: # 系统日志 systemLog:destination: fil…

作者头像 李华
网站建设 2026/4/17 14:21:16

我的网络安全实战学习笔记:记录从零到熟练的每个关键步骤与工具

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

作者头像 李华