【P47】JMeter JSON断言(JSON Assertion)

news2024/11/25 2:42:23

文章目录

    • 一、JSON断言(JSON Assertion)参数说明
    • 二、准备工作
    • 三、测试计划设计
      • 3.1、Assert JSON Path exists
      • 3.2、Additionally assert value
      • 3.3、Expect null
      • 3.4、Invert assertion (will fail if above conditions met)


一、JSON断言(JSON Assertion)参数说明

可以对 Jmeter 取样器的响应消息以 JSON 方式进行检查

使用场景:当返回为 JSON 时,利用 JSON 断言,我们可以快速检测响应报文返回的特征值,进而判断取样器在业务上是否正确

使用频率:比较高,尤其是返回为 JSON 时,为首先断言器

右键 >>> 添加 >>> 断言 >>> JSON断言(JSON Assertion)

在这里插入图片描述

  • Assert JSON Path exists:用于断言的JSON元素的路径(JSONPath);检测JSONPath是否存在;使用XPATH语法书写

  • Additionally assert value:是否额外验证根据JSONPath提取的值。不勾选,验证JSONPath能否在JSON文档中找到路径;勾选,验证根据JSONPath提取值是否预期

  • Match as regular expression:预期值是否可以使用正则表达式。不勾选,预期值不能使用正则表达式表示;勾选,预期值可以使用正则表达式表示

  • Expected Value:预期值;支持脚本语言写法

  • Expect null:若验证提取的值为null,则勾选此项;验证null值,还是需要勾选“Additionally assert value”,否则验证的是JSONPath能否找到路径;预期值不填表示空字符,与null不等价

  • Invert assertion (will fail if above conditions met):若勾选,表示对断言结果取反

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

二、准备工作

慕慕生鲜: http://111.231.103.117/#/login

  • 进入网页后,登录,页面提供了账户和密码

  • 搜索框输入“虾”

  • 右键检查或按F12,打开调试工具,点击搜索

在这里插入图片描述

三、测试计划设计

3.1、Assert JSON Path exists

(1)、测试计划右键 <<< 添加 <<< 配置原件 <<< 用户定义的变量

在这里插入图片描述

  • 添加一个变量:IP,值为 111.231.103.117

(2)、测试计划右键 <<< 添加 <<< 测试片段 <<< 测试片段

在这里插入图片描述

  • 名称:HTTP 采样请求

(3)、在网页中,调试中点击网络,找到请求,点击负载,复制参数值

在这里插入图片描述

(4)、HTTP 采样请求右键 <<< 添加 <<< 取样器 <<< HTTP请求

在这里插入图片描述

  • 协议:GET

  • 路径:/product/list

  • 点击从剪切板添加,会自动添加;也可手动添加

(5)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< JSON提取器

在这里插入图片描述

  • 勾选 Main sample only

只对主取样器进行提取

  • Name of created variable:var1

参数名为:var1

  • JSON Path expressions:$…list[*].name

$:开始符固定的;..:0到多个级别,单个为根级别;list:返回的响应数据结构,相当于字典,key为list的值;name:list值中名为name键的值

  • Match No. (0 for Random):-1

匹配所有符合正则表达式的值

(6)、HTTP请求右键 <<< 添加 <<< 后置处理器 <<< 调试后置处理程序

在这里插入图片描述

  • 参数默认即可

(7)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP请求默认值

在这里插入图片描述

  • 协议:http

  • 服务器名称或IP:${IP}

使用变量获取ip

  • 端口:8083

  • 内容编码:utf-8

(8)、在网页中,调试中点击网络,找到请求,点击标头找到请求标头,复制所有请求标头

在这里插入图片描述

(9)、HTTP请求右键 <<< 添加 <<< 配置元件 <<< HTTP信息头管理器

在这里插入图片描述

  • 点击从剪切板添加,会将复制的值自动添加进去

如图,可以将信息头中的 ip 使用变量 ${IP} 代替

(10)、测试计划右键 <<< 添加 <<< 线程(用户)<<< 线程组

在这里插入图片描述

  • 参数默认即可

(11)、线程组右键 <<< 添加 <<< 逻辑控制器 <<< 模块控制器

在这里插入图片描述

  • 选择 HTTP 采样请求

(12)、线程组右键 <<< 添加 <<< 断言 <<< JSON断言

在这里插入图片描述

在这里插入图片描述

  • Assert JSON Path exists:$.data.total

判断响应数据——Response Body 中是否存在此路径

(13)、线程组右键 <<< 添加 <<< 监听器 <<< 查看结果树

(14)、点击启动,点击查看结果树,查看请求及取样器信息

在这里插入图片描述

如图,HTTP请求成功,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,所以断言成功,请求也是成功的

Assert JSON Path exists:响应数据——Response Body 中是否存在此路径;使用XPATH语法书写

3.2、Additionally assert value

测试计划设计在 3.1 基础上进行修改验证

(1)、修改 JSON断言,勾选 Additionally assert value,Expected Value 输入 2

在这里插入图片描述

  • Assert JSON Path exists:$.data.total

  • 勾选 Additionally assert value

验证根据JSONPath提取的值,与 Expected Value 输入框配合使用

  • Expected Value:2

验证JSONPath提取的值是否与书写的值一致,与 Additionally assert value 配合使用;与 响应数据——Response Body 中的 total 值比较

(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息

在这里插入图片描述

如图,HTTP请求成功,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,所以断言成功,请求也是成功的

(3)、修改 JSON断言,勾选 Additionally assert value,Expected Value 为空

在这里插入图片描述

  • Assert JSON Path exists:$.data.total

  • 勾选 Additionally assert value

勾选 Additionally assert value,但未写 Expected Value 时,验证JSONPath路径提取的值是否为 '',空

(4)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息

在这里插入图片描述

如图,HTTP请求失败,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,而JSON断言中,Expected Value 为空,断言 total 值是否为空

Additionally assert value:勾选后,验证根据JSONPath提取的值,是否与 Expected Value 中书写的值一致

3.3、Expect null

测试计划设计在 3.2 基础上进行修改验证

(1)、修改 JSON断言,勾选 Expect null

在这里插入图片描述

  • Assert JSON Path exists:$.data.total

  • 勾选 Additionally assert value

  • 勾选 Expect null

验证JSONPath提取的值是否是 null,与 Additionally assert value 配合使用;与 响应数据——Response Body 中的 total 值比较

(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息

在这里插入图片描述

如图,HTTP请求失败,HTTP请求的响应数据下的Response Body中存在 $.data.total 此路径,且路径中 total 的值为2 ,而JSON断言中,勾选了 Expect null,断言 total 值是否为 null

Expect null:勾选后,验证根据JSONPath提取的值,是否为 null;使用时,需勾选 Assert JSON Path exists

3.4、Invert assertion (will fail if above conditions met)

测试计划设计在 3.3 基础上进行修改验证

(1)、修改 JSON断言,勾选 Invert assertion (will fail if above conditions met)

在这里插入图片描述

  • Assert JSON Path exists:$.data.total

  • 勾选 Additionally assert value

  • 勾选 Expect null

  • 勾选 Invert assertion (will fail if above conditions met)

取反

(2)、点击清除全部,点击启动,点击查看结果树,查看请求及取样器信息

在这里插入图片描述

如图,HTTP请求成功,3.3 中的测试计划是断言失败的,勾选 Invert assertion (will fail if above conditions met) 取反,所以断言成功

Invert assertion (will fail if above conditions met):对断言结果取反

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

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

相关文章

双链表、循环链表、静态链表

目录 一、双链表1、为什么要引入双链表2、双链表的插入操作3、双链表的插入操作 二、循环链表1、循环单链表2、循环双链表 三、静态链表 一、双链表 1、为什么要引入双链表 单链表结点中只有一个指向其后继的指针&#xff0c;使得单链表只能从头结点依次顺序地向后遍历。要访…

数据治理核心保障数据质量监控开源项目Apache Griffin分享

文章目录 概述定义为何要做数据质量监控基本概念特性架构 安装Docker部署Docker 镜像批处理使用Docker 镜像流处理使用UI界面操作 概述 定义 Apache Griffin 官网地址 https://griffin.apache.org/ 源码release最新版本0.6.0 Apache Griffin 官网文档地址 https://griffin.apa…

MySQL学习(联结,组合查询,全文本搜索)

联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结表&#xff1b; 关系表 为什么要使用关系表&#xff1f; 使用关系表可以储存数据不重复&#xff0c;从而不浪费时间和空间&#xff1b;如果有数据信息变动&#xff0c;只需更新一个表中的单个记录&#xff0c;相关…

研发工程师玩转Kubernetes——Node失效后的Pod的调度实验

在《研发工程师玩转Kubernetes——多Worker Node部署》中&#xff0c;我们创建了Master Node: UbunutA&#xff0c;以及四个Worker Node:UbunutB、UbunutC、UbunutD和UbunutE。本节我们将使用Deployment创建只含有一个nginx的Pod&#xff0c;然后关掉它所在的主机以模拟Node失效…

使用Adobe Acrobat DC对.jpg和.png格式图片转换为.eps图片格式举例

使用Adobe Acrobat DC对.jpg和.png等格式图片转换为.eps图片格式举例 在进行有的文档排版编辑时候&#xff08;比如使用winEdt进行排版CTEX文件时候&#xff09;&#xff0c;需要添加.eps格式的图片&#xff0c;然而电脑中的画图&#xff0c;word和ppt等中无法实现.eps格式图片…

centos7 glib2.0 arm版本的编译

最近在看bluez代码&#xff0c;想编译个例子来玩一下&#xff0c;然后bluez里的例子会用到 libglib-2.0 库里的接口&#xff0c;于是开始了漫长的编译 arm 版本的 libglib-2.0&#xff0c;Linux 系统有时就是很麻烦&#xff0c;要编译一个库&#xff0c;结果发现依赖一大堆库&a…

Linux命令学习之帮助命令man

cat /proc/version和uname -a可以查看CentOS内核使用版本。 我使用的Linux操作系统发行版本号是7.6.1810&#xff0c;可以通过cat /etc/redhat-release进行查看。 man man是manual的缩写&#xff0c;是操作说明的意思。 使用man touch想要看一下touch的使用帮助&#xff0c;…

OpenMMLab开营笔记

摘要 很高兴能加入OpenMMLab AI实战营&#xff0c;成为第二期4班的一名学员。OpenMMLab经过几年的发展和沉淀&#xff0c;其开源项目已经覆盖到计算机视觉的各个领域。OpenMMLab 为香港中文大学-商汤科技联合实验室 MMLab 开源的算法平台&#xff0c;不到两年时间&#xff0c;…

文件操作之文件包含全解(41)

<!#include file”1.asp”--> 作者&#xff1a;沙漠里的鲸 https://www.bilibili.com/read/cv14178731/ 出处&#xff1a;bilibili 文件包含的作用就是将这个文件包含进去之后&#xff0c;会调用指定文件的代码。先将文件包含才能执行里面的一些相关代码&#xff0c;比如…

SAP-MM-标准报表路径

一、SAP MM模块系统自带的标准报表很多&#xff0c;常见报表都放在每个主题的“清单显示”和“报表”文件夹下&#xff0c;如下图所示&#xff1a; 二、另外&#xff0c;还有一些报表&#xff0c;放在另外一个地方&#xff0c;需要时&#xff0c;可以随时进行查看&#xff0c;前…

陷入困境?Taos创建超表带来的错误!

taos创建超表时报错 运行如下命令 let res await cursor.query("CREATE STABLE meters1 (ts TIMESTAMP, value FLOAT, slot INT,rack INT,nameId VARCHAR(32),adName VARCHAR(32),dbNumber INT,dataType VARCHAR(28), unit VARCHAR(28)) TAGS (location binary(64), gr…

2GT齿轮的齿形参数

文章目录 2GT齿轮的齿形参数概述笔记齿的种类方形齿半圆弧齿全圆弧齿精确圆弧齿修正圆弧齿梯形齿齿形参数用SW画一个2GT齿END 2GT齿轮的齿形参数 概述 零件上用到了2GT的同步轮和惰轮, 想在装配图上将2个齿轮皮带都画上, 看看有没有干涉. 整体修改是否合理. 在淘宝店家的主页…

Linux系统下imx6ull QT编程——开发环境及 U盘拷贝文件(十)

Linux QT编程 文章目录 Linux QT编程前言一、开发环境二、文件拷贝 前言 前面学习了一些基础&#xff0c;然后qt我也有学过&#xff0c;直接动手在开发板上进行编程吧&#xff0c;但是开发板需要安装环境&#xff0c;需要拷贝一些文件&#xff0c;我使用得是U盘。 一、开发环…

【C++进阶5-红黑树】噩梦般的存在?手提AVLTree暴揍红黑树!

今天&#xff0c;带来无数人的噩梦——红黑树的讲解。文中不足错漏之处望请斧正&#xff01; 如果还没看过AVLTree讲解的一定要去看看&#xff0c;看完才能更好理解红黑树&#xff01; 是什么 红黑树是自平衡的二叉搜索树。 红黑树的规则: 每个结点非黑即红 根结点为黑叶子…

程序设计综合实习(C语言):考勤管理系统

一、目的 1&#xff0e;调动创新能力的培养 二、实习环境 Visual Studio 2022 三、实习内容与步骤 问题描述&#xff1a; 每个员工信息包括工号、姓名、年龄、性别、部门等&#xff1b; 功能要求&#xff1a; &#xff08;1&#xff09;能够增加、删除、修改员工信息。 &…

[CTFTraining] ASIS CTF 2019 Quals Unicorn shop

​ 我们随便买一件商品&#xff0c;1~3都显示&#xff1a; ​ 只有第4个显示&#xff1a; ​ 只允许输入一个字符&#xff0c;题目叫Unicorn&#xff0c;猜测为Unicode。在Unicode - Compart搜索比千大的Unicode码&#xff1a; ​ 最后填进去买下商品得到flag。 另外&#…

CDGA 认证:第四章 数据架构(重点章节)习题集解析

1. 企业架构不包括哪项&#xff1f;&#xff08; &#xff09; A 业务架构 B 数据架构 C 系统架构 D 技术架构 【答案解析】DAMA-DMBOK2 P72 2. 关于架构设计生命周期描述错误的是&#xff1f;( ) A 可以是针对当前的 B 可以是面向未来的 C 可以是已实施完成的 D 可以是已经…

Flutter 对话框【代码实践】

Flutter 对话框【代码实践】 文章目录 Flutter 对话框【代码实践】一、普通对话框1、示例一&#xff1a;圆角、背景截图代码 一、普通对话框 1、示例一&#xff1a;圆角、背景 截图 代码 Center(child: ElevatedButton(onPressed: () {showDialog(context: context,builder:…

Spring Boot如何实现分布式系统中的服务发现和注册?

Spring Boot如何实现分布式系统中的服务发现和注册&#xff1f; 随着互联网的快速发展&#xff0c;越来越多的企业开始将自己的业务迁移到分布式系统中。在这种情况下&#xff0c;服务发现和注册变得尤为重要。对于分布式系统中的每个服务来说&#xff0c;它需要知道其他服务的…

数据可视化——使用echars图表展示

目录 1、前言 2、解决方案 2.1、echars&#xff08;前端等组件库&#xff09; 2.2、PPT等其他软件工具 2.3、使用flourish等在线数据可视化制作平台 2.4、自己用代码实现 1、前言 有一个小作业&#xff0c;需要自己收集一组数据&#xff0c;然后进行数据可视化&#xff0…