Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程)

2023-11-11

1.简介

最近由于在搭建自己的个人博客可能更新的有点慢。断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式。虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JMeter还是为我们提供了适合多个场景的断言元件,辅助我们来更好的完成结果验证工作。在使用JMeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过。

2.预览断言

首先我们来看一下JMeter的断言,路径:线程组(用户)->添加->断言;我们可以清楚地看到JMeter5中共有13个断言(不包括jp@gc开头的断言,这个是宏哥安装的插件),如下图所示:

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的断言类型,如下图所示: 

 

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386 

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click 

通过以上的了解,我们对断言有了一个大致的了解和认识。下面就给小伙伴或者童鞋们分享讲解一些通常在工作中会用到的断言。 

3.常用断言详解

这一小节,就由上而下地详细地讲解一下常用的断言。

3.1 响应断言

响应断言,判断返回消息中的内容。响应断言是最常用的一种断言方法,它可以对各种返回类型的结果进行断言,比如Test、html、application/json等

1、我们先来看看这个 响应断言 长得是啥样子,路径:线程组 > 添加 > 断言 > 响应断言,如下图所示: 

 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

APPly to:选项默认即可,Main sample only(仅作用于父节点取样器)

    Main sample and sub-samples:作用于父节点取样器及对应子节点取样器

         Main sample only:仅作用于父节点取样器

         Sub-samples only:仅作用于子节点取样器

         JMeter Variable Name to use:作用于jmeter变量(输入框内可输入jmeter的变量名称)

要测试的响应字段

  • 响应文本

  服务器响应文本,一般情况下,我们都是勾选改选项,用于验证服务器返回值。

  • Document(text)

  通过 Apache Tika 从各种的文档中提取的文本进行验证,包括响应文本,pdf、word 等等各种格式。jmeter 会用Apache Tika 去解析服务器响应内容,耗内存、也耗时间,解析易失败,尽量少用或不用。多用响应文本方式来进行断言验证

  •  URL 样本

  对请求的 url 进行断言,如果请求没有重定向(302),那么该url 即为请求的 url;如果有重定向(且跟随重定向),那么url 则包含了请求 url 和重定向 url。

  • 响应代码

  即 http 响应代码,例如 200,404 等等,需要注意:由于 jmeter 默认情况下认为 4xx,5xx 时该请求失败,所以在断言这类响应代码时,需要同时勾选 Ingore Status,才能正常去做断言。

  • 响应信息

  即响应代码对应的信息,例如 OK, Not Found 等等这类的。如下常见类似响应信息:
  HTTP/1.1 200 Ok
  HTTP/1.1 302 Found
  Response Header : 响应头信息,例如

  Server: Tengine Date: Thu, 12 Mar 2015 09:43:52 GMT
  Content-Type: text/html
  Content-Length: 260
  Connection: close
  Location: http://www.baidu.com/404.html

  Response Headers
  即 http 响应头信息,主要用于断言当响应头带有唯一或特定意义时。
  ngore Status请参见 4 响应代码的使用说明。
模式匹配规则
  包括:指返回结果包含要测试的模式中指定的内容,支持正则表达式
  匹配:(1)相当于 equals。返回值是固定的,可以以返回值做断言,效果同 equals;(2)正则表达式匹配。用正则表达式来匹配返回结果,但必须全部匹配。即正则表达式必须能匹配整个返回值,而不是返回部分值,注意与包括模式的区别(包括是支持模糊匹配的)。
  Equals:指返回结果与指定的测试模式完全一致。
  Substring:与“包括”模式差不多,都是指返回结果包括指定的内容,但 Substring 不支持正则表达式。
   否:相当于取反。即如果上述断言结果为 true,勾选“否”选项后,则最终断言结果为 false。
注:在使用该断言时,熟练掌握正则表达式是必备的能力。

测试模式 可以添加你需要断言的部分,如果是包括,就可以添加多个

3.2JSON断言

JSON断言也是测试工作中经常用到的一种断言方法,它只能针对响应结果是applicaton/json格式的请求进行断言。适用于返回消息是JSON格式

1、我们先来看看这个 JSON断言长得是啥样子,路径:线程组 > 添加 > 断言 > JSON断言,如下图所示: 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

Assert JSON Path exists: json路径

Additionally assert value:等于特定值

Match as regular expression:正则匹配

Expect null:空值

Invert assertion(will fail if above conditions met):上面的条件满足则fail

3.3大小断言

大小断言,显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据。判断响应结果是否包含正确数量的byte。可定义(=, !=, >, <, >=, <=)

1、我们先来看看这个 大小断言 长得是啥样子,路径:线程组 > 添加 > 断言 > 大小断言,如下图所示: 

 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

Response Size Field to Test:响应字节的测试范围(可以选择用于判断的响应范围)

         Full Response:全部响应

         Response Headers:响应头部

         Response Body:响应主体

         响应代码:响应报文相关的代码

         响应信息:响应报文的信息

Size to Assert:断言字节范围

         字节大小单位为:字节;

3.4 JSR223 断言

JSR223即Java 规范请求,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求;

作用对象:针对取样器中的JSR223 sampler而使用的断言 

1、我们先来看看这个 JSR223断言 长得是啥样子,路径:线程组 > 添加 > 断言 > JSR223断言,如下图所示: 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

Script language(e.g.beanshell,javascirpt,jexl):脚本语言(可以从下面的下拉框中选择对应的脚本语言JavaScript、beanshell等)

parameters to be passed to script(=> String Parameters and String []args):(传递给脚本的参数→可以理解为使用JSR223断言脚本时候一起引用的参数 )

Script file(overrides script):重写脚本(可以通过选择脚本文件的状态,是浏览调用已有的脚本还是在在下方的输入框内写入脚本;)

Script:下面的输入框表示可以输入变量类型,运用的脚本(取样结果、断言结果、取样日志文件等参数)

3.5 Xpath 断言

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

1、我们先来看看这个 Xpath断言 长得是啥样子,路径:线程组 > 添加 > 断言 > Xpath断言,如下图所示: 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

XML Parsing Options:XML解析选项

         Use Tidy(tolerant parser):使用Tidy(容错解析器),默认选择quiet(不显示)

         Quiet:不显示

         Report errors:错误报告

         Show warnings:显示错误

         Use Namespaces:使用名称空间

         Validate XML:验证XML(文件包/数据)

         Ignore Whitespace:忽略空格(这允许你指定语法分析器可以忽略哪个空格,而哪个空格是重要的)

         Fetch external DTDs:获取外部DTDs(一些XML元素具有属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操作时,提供元素的额外信息,这时候需要在DTDs中声明)

XPath Assertion:输入框中写入xpath断言,点击Validate验证其正确性

         True if nothing matches:确认都不匹配

3.6 比较断言

这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;

作用对象:需要替换的字符串

1、我们先来看看这个 比较断言 长得是啥样子,路径:线程组 > 添加 > 断言 > 比较断言,如下图所示: 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

Select Comparison Operators:选择比较运算符

Compare Content:可以选择比较的内容类型(true/false或者自定义,编辑)

Compare Time:比较时间(可以设定比较的时间,单位为秒,默认为-1)

Comparison Fitters:比较修改工具

regular expression substitutions:替换正则表达式

Regex String:要替换的字符串(可从断言结果中选择)

substitutions:替换的字符串(替换结果)

3.7 断言持续时间

断言持续时间,用于判断服务器的响应时间

1、我们先来看看这个 断言持续时间 长得是啥样子,路径:线程组 > 添加 > 断言 > 断言持续时间,如下图所示: 

2、关键参数说明如下:

名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 

注释:控制器注释信息,非必填项 

APPly to:适用范围

         Main sample and sub-samples:作用于父节点取样器及对应子节点取样器

         Main sample only:仅作用于父节点取样器

         Sub-samples only:仅作用于子节点取样器

Duration to assert:持续断言

Duration in milliseconds:响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功!

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程) 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 智能化的设备管理系统,为企业信息化建设添砖加瓦

    设备管理的智能化 数字化 可视化是企业信息化建设的三大趋势 也是智能智慧工厂建设的重要内容 因此引进成熟先进的设备管理系统 是每一个企业当下的重要工作 璞华大数据HawkEye设备智能维保平台分为两个维度协助企业进行设备管理 即设备资产管理
  • 11-10 格式化文本的输入输出

    1 scanf 和 printf scanf 和 printf 函数日常使用较多 此处不多介绍了 详细内容可参考 https zh cppreference com w c io fscanf 2 sscanf 和 sprintf ssca
  • JVM虚拟机技术原理与实现

    一 Java语言与Java虚拟机 1 Java语言简介 Java是Sun公司推出的Java语言和Java平台的总称 在操作系统中安装Java平台后Java应用程序即可直接运行 Java程序被编译成字节码解释执行 使Java程序与平台无关 J
  • es根据条件删除数据

    es根据条件删除数据 POST请求 http localhost 9200 indexName delete by query 请求参数 query match columnName 搜索列的条件
  • 哪些元器件在未来会有更广泛的应用?

    随着科技的发展和进步 电子技术已经成为现代社会的重要组成部分 元器件作为电子产品的基本构成单元 其发展和应用对于电子技术的进步和创新有着至关重要的作用 随着人工智能 物联网和智能制造等新兴技术的快速发展 一些元器件已经或者将在未来得到更广泛
  • 解决 mysql 自动增长的 id 不是从 1 开始 或 不连续

    原因 1 insert 失败后 id 已自动增加 会造成 id 不连续 2 delete 后 再重新插入数据后 id 会从删除前最后的 id 开始增加 造成 id 不是从1开始增加 注意 删除全部数据时 不要用 delete from ta
  • Random.Range()的范围问题

    Random Range 方法的是进行差生随机数的一个方法 int i Random Range min max 这里进行产生的随机数 当min max相等 产生的随机数返回的是min 因为min max 产生的最大的也就是max 当min
  • HTML-页面经3秒之后自动跳转,动态刷新秒数

    样图 div div
  • MATLAB复习

    目录 矩阵 定义矩阵 查找矩阵元素 特殊矩阵 矩阵运算 乘方与点乘 字符串数组 创建字符串 查找字符 字符串转换 创建字符串数组 元胞数组 元胞数组的创建 元胞数组的显示 celldisp 和 cellplot 元胞数组的扩充和收缩 元胞数
  • VMware中安装mysql

    文章目录 1 将windows下的安装包上传到Linux服务器 安装包移动并解压 3 卸载系统自带的mysql 4 安装mysql服务端 5 安装mysql客户端 6 登录mysql 6 1 查看root密码 6 2 启动mysql服务 6
  • 刷脸支付自主创业超低门槛等您来

    新兴的人工智能技术不断被应用到支付场景中 指纹支付 声纹支付到刷脸支付 新技术的蔓延总是能出乎我们的意料 迅速地渗透进生活的方方面面 行业监管趋严 智能应用不断迭代 双重作用下 支付行业正迎来一次革命性的转折 刷脸支付开始普及 中国有700
  • Excel:LOOKUP函数的经典用法

    1 逆向查询 下面这个表中 A C列是员工基础信息表 分别是部门 姓名和职务 现在要根据E5单元格中的员工姓名 在这个信息表中查询属于哪个部门 也就是咱们常说的逆向查询 就可以使用LOOKUP函数了 F5单元格输入以下公式 LOOKUP 1
  • 转:基于 Drone + Gogs 构建私有 CI/CD 平台

    前言 很久之前 部署方案选择了基于 Docker 的容器化落地方案 极简描述与总结于 gogs drone docker 但是随着微服务抽象定义的服务越来越多 团队规模越来越壮大时 单机部署的自动化持续部署平台在并行处理任务可能会出现大量排
  • 构造函数访问权限和基类构造函数,派生类的构造函数调用顺序

    include
  • MyBatis多条件查询、动态SQL、多表操作、注解开发详细教程

    一 多条件查询 二 动态SQL 1 if where 2 choose when ortherwise 3 foreach 三 多表操作 1 一对一 2 一对多 3 多对多 四 注解开发 MyBatis封装了JDBC通过Mapper代理的方
  • Flutter如何使widget始终保持在屏幕底部

    Flutter如何使widget始终保持在屏幕底部 问题描述 在登录或者注册页面 需要在底部展示一些隐私政策或者是隐私协议 就是用了一种Stack布局方式 但是使用这种方式在没有键盘弹出的时候看起来一起正常 但是只要有软键盘弹出就会把底部使
  • matlab中的导函数驻点,Matlab用导数作定性分析

    Matlab用导数作定性分析 5 1知识要点 函数作图 用导数定性描述函数 clf x linspace 8 8 30 f x 3 2 4 x 1 plot x f fplot x 3 2 4 x 1 8 8 clf x sym x f x
  • 软件工程开发模式:从传统到现代的演进

    引言 软件工程开发模式是指导软件开发过程的重要框架 旨在提高软件开发的效率和质量 随着技术的不断进步 软件工程开发模式也在不断发展演变 以适应不同的项目需求和开发环境 本文将介绍传统软件工程开发模式和现代敏捷 精益和DevOps软件工程开发
  • Docker进阶学习:docker-compose的体验

    安装好docker compose后 我们要体验一下了解基础的操作和命令 搞一个官方demo python应用 计数器 redis 我先来一个官方文档地址 基本很多都是按照文档来的 建议尽量去官方文档来产看最新的 我这个可能也只是主要内容搬
  • Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程)

    1 简介 最近由于在搭建自己的个人博客可能更新的有点慢 断言组件用来对服务器的响应数据做验证 常用的断言是响应断言 其支持正则表达式 虽然我们的通过响应断言能够完成绝大多数的结果验证工作 但是JMeter还是为我们提供了适合多个场景的断言元