JMeter断言之JSON断言

news2024/10/1 19:21:06

JSON断言

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

首先需要根据JSON Path从返回的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)

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

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

▲ 什么是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. 断言商品金额:

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue模板语法集(上)

1.插值 插值&#xff1a;用双大括号{{}}将数据绑定到模板中&#xff0c;实现简单的数据渲染。例如&#xff1a;<p>{{message}}</p>&#xff0c;其中message是一个变量。 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表达式 1.1.1 文本 {{msg} 1.1.2 html 使…

HY57V561620FTP_SDRAM文档总结

文章目录 前言一、sdram简介1、名称解释2、发展历史3、与原先学习的RAM区别4、SDRAM分类 二、HY57V561620FTP1、描述1、内存划分2、特征3、引脚说明4、内部结构介绍5、交流特性6、可能涉及到的命令组合 2、SDRAM 具体操作流程1、整体状态图2、SDRAM指令及时序图3、芯片初始化(这…

​全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

​全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

一招制胜,如何写好一份优秀的营销策划方案?

我相信很多策划人一直都在积累很多策划模版和案例&#xff0c;觉得写策划案不就是照着相似的案例抄一抄。 虽然说这样做不是什么错误&#xff0c;但太依赖这样的方式的话&#xff0c;对于自己所写的东西&#xff0c;总会有一种掌控力不足的感觉。 究其原因&#xff0c;是你钻…

成集云 | 用友U8集成聚水潭ERP(用友U8主管库存)| 解决方案

源系统成集云目标系统 方案介绍 用友U8是一套企业级的解决方案&#xff0c;可满足不同的制造、商务模式下&#xff0c;不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用&#xff0c;并延伸客户管理至客户关系管理&#xff08;CRM&#xff09;&am…

容器的数据卷

容器的数据卷 操作数据卷 # 基本格式 docker volume [common] # 创建一个volume docker volume create # 显示一个或多个volume docker volume inspect # 列出所以的volume docker volume ls # 删除未使用的volume docker volume prune # 删除一个或多个volume docker volume…

计算机视觉与深度学习-卷积神经网络-纹理表示卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题 参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景 卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算 激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作 全连接层(FC)样本…

ESD最常用的3种模型?|深圳比创达EMC

为了定量表征 ESD的特性&#xff0c;一般将 ESD 转化成模型表达方式&#xff0c;ESD 的模型有很多种&#xff0c;下面介绍最常用的三种。 1.HBM&#xff1a;Human Body Model&#xff0c;人体模型 该模型表征人体带电接触器件放电&#xff0c;Rb 为等效人体电阻&#xff0c;Cb…

Pikachu XSS(跨站脚本攻击)

文章目录 Cross-Site ScriptingXSS&#xff08;跨站脚本&#xff09;概述反射型[xss](https://so.csdn.net/so/search?qxss&spm1001.2101.3001.7020)(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss-盲打xss-过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cros…

02. Springboot集成Flyway

目录 1、前言 2、什么是Flyway&#xff1f; 3、为什么要使用 Flyway&#xff1f; 4、简单示例 4.1、创建Spring Boot工程 4.2、添加Flyway依赖 4.3、Springboot添加Flyway配置 4.4、创建执行SQL脚本 4.5、启动测试 4.6、Flyway版本管理 5、SQL脚本文件命名规则 6、…

比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

在我们的零知识赏金 (ZKB) 系列的第二部分中&#xff0c;我们将其应用于解决哈希冲突难题。在这样的谜题中&#xff0c;两个不同的输入散列到相同的输出。此类赏金可用于&#xff1a; 充当煤矿中的金丝雀&#xff0c;给我们一个有价值的提醒。存在冲突是散列函数较弱的标志&…

LCP 06. 拿硬币【向上取整】

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心 知识回顾向上、向下取整 写在最后 Tag 【贪心】【数组】 题目来源 LCP 06. 拿硬币 题目解读 数组 coins 中存放的是一堆堆的力扣币&#xff0c;对于每一堆力扣币&#xff0c;你可以选择拿走一枚或者两枚&#x…

SOCKS5 认证的方法

在进行网络浏览或爬虫等相关工作时&#xff0c;我们经常会遇到需要使用 SOCKS5 代理认证的情况。然而&#xff0c;某些浏览器可能不提供原生支持 SOCKS5 代理认证的选项&#xff0c;给我们带来了一些困扰。本文将为大家介绍几种解决浏览器不支持 SOCKS5 代理认证问题的方法。 …

java图形化工具编写初试

java图形化工具编写初试 前言&#xff1a; 照虎画猫——用WgpSec 说书人师傅的‘用友NC系列检测利用工具’结合本人为数不多的java基础再结合gpt&#xff0c;学习了一下java图形化工具的编写&#xff0c;实现了最基础的漏洞检测功能........用大华的两个漏洞为例&#xff0c;分…

kafka消费/发送消息,消息过大报错解决whose size is larger than the fetch size 1048576

目录 一、kafka消费报错原因二、解决方案1、原因一的解决方案2、原因二的解决方案 一、kafka消费报错原因 问题原因一&#xff1a;个是kafka本身的配置没有调整到上限 问题原因二&#xff1a;就是我们自己写python消费kafka代码的时候没有参数配置没有限制 RecordTooLargeE…

实践分享:vue模块化基本用法

首先还是来看看什么是模块化。 常见的概括&#xff1a;模块化就是把单独的一个功能封装到一个模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但是可以通过特定的接口公开内部成员&#xff0c;也可以依赖别的模块&#xff08;方便代码的重用&…

Zotero配合dblp文献库免费一键下载文献及管理教程

Zotero配合dblp文献库免费一键下载文献及管理教程 1 dblp计算机科学文献库2 文献导入到Zotero教程参考&#xff1a; 在这里&#xff0c;相信大家都已经知道Zotero这个强大的文献管理软件了&#xff0c;它可以多端同步&#xff0c;自动下载文献&#xff0c;自定义标签&#xff0…

数据结构——排序算法——归并排序

将两个有序数组合并为一个有序数组 在第二个列表向第一个列表逐个插入的过程中&#xff0c;由于第二个列表已经有序&#xff0c;所以后续插入的元素一定不会在前面插入的元素之前。在逐个插入的过程中&#xff0c;每次插入时&#xff0c;只需要从上次插入的位置开始&#xff0…

Pytorch从零开始实战04

Pytorch从零开始实战——猴痘病识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——猴痘病识别环境准备数据集模型选择模型训练数据可视化其他模型图片预测 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

mysql用事务实现更新数据

前言&#xff1a;在手动批量更新正式环境数据库时&#xff0c;建议使用事物进行更新&#xff0c;避免更错数据&#xff0c;造成不必要的麻烦。 现表中有三条数据&#xff0c;使用事物批量将name字段为mgx&#xff0c;phone字段为17837107346&#xff0c;所有数据中的address字段…