当前位置: 首页 > news >正文

JMeter断言之JSON断言

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

END今天的分享就到此结束了,对你有所帮助的话留下小心心哈! 

相关文章:

JMeter断言之JSON断言

JSON断言 若服务器返回的Response Body为JSON格式的数据,使用JSON断言来判断测试结果是较好的选择。 首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果,再设置预期结果,两者进行比较得出断言结果。 下面首先介绍JSON与JSON…...

LuatOS-SOC接口文档(air780E)--mqtt - mqtt客户端

常量 常量 类型 解释 mqtt.STATE_DISCONNECT number mqtt 断开 mqtt.STATE_SCONNECT number mqtt socket连接中 mqtt.STATE_MQTT number mqtt socket已连接 mqtt连接中 mqtt.STATE_READY number mqtt mqtt已连接 mqttc:subscribe(topic, qos) 订阅主题 参数 …...

安装Python环境

Python 安装包下载地址:https://www.python.org/downloads/ 打开该链接,可以看到有两个版本的 Python,分别是 Python 3.x 和 Python 2.x,如下图所示: Python下载页面截图 图 1 Python 下载页面截图(包含…...

[nodejs] 爬虫加入并发限制并发实现痞客邦网页截图

今晚想给偶像的相册截个图,避免某一天网站挂了我想看看回忆都不行,用的是js的木偶师来爬虫台湾的部落格,效果图大概是这样,很不错 问题来了.我很贪心, 我想一次性把相册全爬了,也就是并发 ,这个人的相册有19个!!我一下子要开19个谷歌浏览器那个什么进程, 然后程序就崩了, 我就想…...

GEE——Publisher Data Catalogs发布者数据目录

发布者数据目录 发布者数据目录由数据集发布者策划,供更大范围的 Google 地球引擎社区使用,并作为地球引擎资产集公开共享。这些目录并非由 Google 编制。这里是GEE团队简政放权的一个过程,也就是说这些数据集的后续更新和维护并不由GEE团队负…...

计算10的阶乘

一、不好的写法 public static void main(String[] args) {long fun fun(10);System.out.println(fun);}public static long fun(long n) {if (n 1) {return 1;}return n * fun(n - 1);}使用递归完成需求,fun1方法会执行10次,并且第一次执行未完毕&…...

6.卷积神经网络

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 卷积层一、从全连接到卷积二、卷积层三、代码四、QA No.2 卷积层里的填充和步幅一、填充和步幅二、D2L代码注意点三、QA No.3 卷积层里的多输入和多输出通道一、多输入和多输出通道二、D2L代码注意点三、QA No.4 池化层…...

postgresql|数据库|SQL语句冲突的解决

前言: postgresql数据库是比较复杂的一个关系型数据库,而有些时候,即使是简单的插入更新操作也是有很多复杂的机制。 那么,什么是冲突?什么时候会遇到冲突(也就是冲突的常见场景)?…...

overflow溢出属性、定位、前端基础之JavaScript

overflow溢出属性 值 描述 visible 默认值。内容不会被修剪,会呈现在元素框之外。 hidden 内容会被修剪,并且其余内容是不可见的。 scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 auto 如果内容被修剪&#xff0…...

【JS】Chapter6-Dom 获取属性操作

站在巨人的肩膀上 黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程 (六)Dom 获取&属性操作 以下的变量可以将 let 改为 const: let arr [red, green] arr.pu…...

太极培训机构展示服务预约小程序的作用如何

太极是适合男女老幼的,很多地方也有相关的学校或培训机构,由于受众广且不太受地域影响,因此对培训机构来说,除了线下经营外,线上宣传、学员获取和发展也不可少。 接下来让我们看下通过【雨科】平台制作太极教培服务预…...

node使用path模块的基本使用

文章目录 一、path.resolve(常用)二、path.sep三、path.parse其他 一、path.resolve(常用) 由于node 中使用 __dirname 获取的绝对路径是/ ,而我们拼接的路径为‘/’导致路径不统一。 作用:拼接规范的绝对路径 const fs require(fs) const path require(path)// 1…...

我和云栖大会有个约会

前言 云栖大会(Alibaba Cloud Computing Conference)是中国阿里巴巴集团旗下的云计算技术盛会,旨在推动云计算技术的发展和应用。该大会自2009年首次举办以来,已成为云计算行业内规模最大、影响力最广的会议之一。 云栖大会每年…...

Linux各个发行版之间的关系

Linux各个发行版之间的关系 可以查看链接:Linux Timeline 链接中可以下载PNG或者SVG图片...

第一章 第一行Android代码

一、Android简介 1.android系统架构 linux kernel(Linux内核层):提供硬件底层驱动 libraries(系统运行库层):提供了主要的特性支持,如SQLite库、Webkit库;还包含android runtime&…...

怎样利用 AI 大模型,辅助研发管理与效能提升?

AI 大模型已经逐渐渗透到各行各业的应用场景中,在软件研发领域也不例外。在软件研发领域,从需求分析到软件设计,从软件开发到测试,以及最后发布上线,AI 在各个环节都发挥着重要作用。10 月 21 日,思码逸首席…...

聊天室的创建

要创建一个聊天室,您需要: 确定聊天室的主题和目的。 选择一个适当的聊天室平台或应用程序,如Discord、Slack、Zoom等。 注册一个账户并创建一个聊天室。 添加您的朋友或家人或需要的人到聊天室中。 设置聊天室的规则和管理机制&#xff…...

大数据信息抽取

随着互联网的广泛应用和技术的不断进步,海量数据被产生、存储和共享。这些数据中包含着宝贵的的信息和知识,二大数据信息抽取是正是为了把这些数据中关键、有用的信息提取出来。 大数据信息抽取就是指通过自动化的方式,从大数据中提取有异议…...

驱动开发11-1 编写IIC驱动-读取温湿度数据

头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #define GET_HUM _IOR(m, 1, int) #define GET_TEM _IOR(m, 0, int) #endif 应用程序 si7006.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #inc…...

上海中优城市万豪酒店推出全新国际IP童趣主题房,独特住宿体验中国首秀

2023年10月30日&#xff0c;中国上海 – 近日&#xff0c;上海中优城市万豪酒店正式推出由全球品牌娱乐公司孩之宝官方授权打造的小马宝莉和变形金刚主题客房&#xff0c;以创意客房、新奇体验和丰富礼遇&#xff0c;为童游家庭或年轻的动漫迷们开启沉浸式入住之旅&#xff0c;…...

论文引用格式太复杂?9种主流标准一键搞定,2026年硕博生必备神器推荐

&#x1f4a1; 核心要点 你是否也遇到过这样的崩溃时刻&#xff1a;熬夜写完论文&#xff0c;却被导师的一句"引用格式不规范&#xff0c;重新调整"打回原形&#xff1f;手动调整APA、MLA、GB/T 7714等不同格式&#xff0c;一个标点符号都不能错&#xff0c;一篇论文…...

七、桥接模式

目的 &#xff1a; 将抽象部分与其实现部分分离&#xff0c;使它们都可以独立地变化。核心 &#xff1a; 使用组合代替继承&#xff0c;抽象类包含一个实现接口的引用&#xff0c;将具体实现委托给该引用。场景 &#xff1a; 跨平台 UI 开发、数据库驱动、设备控制等。 首先是…...

告别“权限不足”:手把手教你用CobaltStrike的Bypass UAC功能搞定Windows提权

实战指南&#xff1a;利用CobaltStrike突破Windows权限限制 当你手握一个普通用户权限的Beacon会话&#xff0c;却卡在"请求的操作需要提升"的提示前&#xff0c;这种挫败感每个渗透测试员都深有体会。Windows的用户账户控制(UAC)就像一堵无形的墙&#xff0c;将普通…...

【PyJIT 3.14权威调优白皮书】:基于37个生产级微服务压测数据的6类典型劣化模式诊断图谱

第一章&#xff1a;PyJIT 3.14 JIT编译器调优核心原理与演进脉络PyJIT 3.14 是 Python 生态中首个支持多层热路径识别与跨函数内联优化的生产级 JIT 编译器&#xff0c;其核心突破在于将传统基于计数器的热点检测升级为基于执行轨迹&#xff08;Execution Trace&#xff09;的动…...

深入解析javac编译错误:程序包XXX不存在的排查与修复指南

1. 程序包XXX不存在的本质原因 当你第一次在命令行用javac编译Java项目时&#xff0c;90%的新手都会遇到这个灵魂拷问&#xff1a;"程序包XXX不存在"到底是什么意思&#xff1f;这行红字背后其实藏着三个关键信息&#xff1a;类加载器找不到对应的.class文件&#xf…...

代码审计 | Log4j2 —— CVE-2021-44228 JNDI 注入与递归解析的完整链路分析

代码审计 | Log4j2 —— CVE-2021-44228 JNDI 注入与递归解析的完整链路分析 目录 环境搭建 漏洞复现 编写测试代码 构造恶意 class 文件 启动 LDAP 转发器 请求流程 使用 JNDI 工具一键利用 代码审计 payload 入口追踪 MessagePatternConverter:关键转折点 substitu…...

00 | 从零打造Claude Code:AI编程Agent完整解析(一)——引言篇

从零打造Claude Code:AI编程Agent完整解析(一)——引言篇 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 本系列文章深度解析如何从零开始构建一个类似Claude Code的AI编程助手,涵盖Agent循环、工具系统、提示词工程、权限…...

高效掌握Equalizer APO:Windows音频增强与定制完全指南

高效掌握Equalizer APO&#xff1a;Windows音频增强与定制完全指南 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 在数字音频体验日益重要的今天&#xff0c;拥有专业级的声音调控能力不再是音频工程师…...

5分钟搞定PySide2串口助手:从QT Designer到Python打包全流程

5分钟打造PySide2串口助手&#xff1a;从UI设计到跨平台部署的极速开发指南 1. 开发环境配置与工具链搭建 对于嵌入式开发者和物联网爱好者而言&#xff0c;快速构建一个功能完善的串口调试工具是硬件调试的刚需。PySide2作为Qt官方维护的Python绑定库&#xff0c;结合Python的…...

紧急预警:.NET 9 RC2已移除旧版LowCodeProvider——所有基于.NET 8低代码框架的项目须在2024年11月30日前完成迁移,否则将触发运行时降级熔断

第一章&#xff1a;.NET 9 低代码开发范式演进与熔断机制全景概览.NET 9 将低代码能力深度融入平台原生架构&#xff0c;不再依赖第三方可视化设计器&#xff0c;而是通过源生成器&#xff08;Source Generators&#xff09;、属性驱动的组件注册、以及声明式 UI 模型&#xff…...