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断言 - 上篇(详解教程) 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • 围绕 readline 构建的 python 批处理的触发器选项卡完成

    背景 我有一个 python 程序 它导入并使用 readline 模块来构建自制的命令行界面 我有第二个 python 程序 围绕 Bottle 一个 Web 微框架构建 充当该 CLI 的前端 第二个 python 程序向第一个程序打开
  • Python - 将宽字符字符串从二进制文件转换为 Python unicode 字符串

    这是漫长的一天 我有点困惑 我正在读取一个包含大量宽字符字符串的二进制文件 我想将它们转储为 Python unicode 字符串 为了解压非字符串数据 我使用 struct 模块 但我不知道如何对字符串执行相同的操作 例如 阅读 系列 一
  • 如何在序列化器创建方法中获取 URL Id?

    我有以下网址 url r member P
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

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

    设备管理的智能化 数字化 可视化是企业信息化建设的三大趋势 也是智能智慧工厂建设的重要内容 因此引进成熟先进的设备管理系统 是每一个企业当下的重要工作 璞华大数据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还是为我们提供了适合多个场景的断言元