1.简介
最近由于宏哥在搭建自己的个人博客可能更新的有点慢。断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式。虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JMeter还是为我们提供了适合多个场景的断言元件,辅助我们来更好的完成结果验证工作。在使用JMeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过。
2.预览断言
首先我们来看一下JMeter的断言,路径:线程组(用户)->添加->断言;我们可以清楚地看到JMeter5中共有13个断言(不包括jp@gc开头的断言,这个是宏哥安装的插件),如下图所示:
如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的断言类型,如下图所示:
通过以上的了解,我们对断言有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的断言。
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:响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功!
4.小结
好了,今天到这里JMeter5的断言上篇就介绍和分享完了,感谢您耐心的阅读和一路支持宏哥!!!