『动善时』JMeter基础 — 29、JMeter响应断言详解

1、JMeter断言介绍

JMeter中有个元件叫做断言(Assertion),它的作用和LoadRunner中的检查点类似。用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致。

使用断言的原理:在Request请求的返回层面增加一层判断机制。因为Request请求成功了,并不代表结果一定正确。所以通过断言,我们不再会被200状态码所迷惑,而是可以通过断言,看到我们请求是否真正的成功!

解释:状态码200仅表示,请求成功发送,服务器成功接收和处理,并返回处理后的结果的状态。并不能确定返回给客户端数据,是我们需要的数据。

2、响应断言组件界面详解

添加响应断言组件操作:选中“取样器”右键 —> 添加 —> 断言 —> 响应断言

界面如下图所示:

image

响应断言组件的详细说明:

  • 名称响应断言组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该响应断言组件的简短说明,以便后期回顾时查看。

(1)Apply to:响应断言的应用范围

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
  • Main sample only:仅作用于父节点的取样器。(选默认的 main sample only 就行了)
  • Sub-samples only:仅作用于子节点的取样器。
  • JMeter Variable Name to use:作用于JMeter变量(输入框内可写入正则提取的响应值),从指定变量中提取需要的值。

(2)测试字段

  • 响应文本:请求的响应文本信息,不包含响应头信息,最常用的断言字段。
  • 响应代码:HTTP请求返回的响应码。
  • 响应信息:响应信息中匹配数据(Response message)。
  • Response Headers:从响应头信息中提取数据。
  • Request Headers:从请求头信息中提取数据。
  • URL样本:从请求URL中提取数据,如果有重定向包含重定向URL。
  • Document (text):文档(文本),通过Apache Tika从各种类型的文档中,提取文本进行验证,包括响应文本,pdf、word等等各种格式文本。
  • 忽略状态(Ignore Status): 一个请求进行多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言。
  • Request Data:从请求体包含的信息中提取数据。

(3)模式匹配规则

  • 包括:响应的结果中,包含指定的文本或者字段值,则为True,支持正则表达式。
  • 匹配:完全匹配,期望值与实际结果必须完全一致,则为True,一般结合正则表达式使用。
  • 相等(Equals):响应结果与指定的内容完全一致,则为True,不支持正则表达式。
  • 子字符串(Substring):返回结果包含指定的字符串,不需完全匹配,但大小写敏感,则为True,不支持正则表达式。
  • 否:不包含或匹配给定文本,则为True。

(4)测试模式

  • 在测试模式输入框中,输入我们给定的匹配内容,之后响应断言组件会获取请求中响应的数据与之匹配。
    1)点击添加按钮进行编辑数据。
    2)从剪贴板添加,就是粘贴已复制的内容到输入框中。
    3)删除按钮,删除输入框中的全部内容。
  • Custom failure message:在输入框中,可以自定义断言失败所显示的消息内容。

提示:响应断言可添加多个,但是多个断言之间是与的关系,不能满足或的需求。

3、响应断言组件的使用

我们以一个登陆接口,来演示响应断言组件的应用。

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组里面,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  4. 在取样器下,添加断言“响应断言”组件:选中“取样器”右键 —> 添加 —> 断言 —> 响应断言
  5. 在取样器下,添加监听器“断言结果”组件:选中“取样器”右键 —> 添加 —> 监听器 —> 断言结果
  6. 在线程组里面,添加监听器“察看结果树”组件:查看结果,选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

最终测试计划中的元件如下:

image

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)登陆接口请求界面内容

标准的Post请求,填写请求的基本信息和参数即可。

编写内容如下:

image

(3)响应断言界面内容

可根据要测试响应字段,和模式匹配规则来设置断言。

比如下方截图是匹配,返回结果中的状态码是否是200,如果是则表示断言成功,否则失败。

image

(4)查看运行结果

我们在察看结果树组件中,观察脚本运行之后的结果。

如果断言正确,和正常发送请求一样,如下图:

image

如果断言失败,则会出现断言失败的提示,如下图所示:

image

(5)断言结果组件说明

也添加断言结果监听器,通过断言结果组件来判断断言是否通过。

如下图所示:

image

说明:

  • 已通过的断言仅显示取样器名称。
  • 未通过的,除了显示取样器的名称,还显示错误原因。

4、总结

响应断言组件常用于断言三个方面:

  1. 断言HTTP请求的响应状态码。如上面的练习。
  2. 断言响应信息中的业务状态码。如下示例:
    响应结果:{"status":1,"code":"10001","data":null,"msg":"登录成功"}
    匹配业务状态码界面:
    image
  3. 断言接口请求后服务端响应的数据。(和上面基本一样)

5、补充两个类似的断言组件

(1)大小断言组件

根据返回内容的大小(数据多少)进行断言,作用于返回的响应报文。

添加大小断言Size Assertion)组件操作:选中“取样器”右键 —> 添加 —> 断言 —> 大小断言

界面如下图所示:

image

说明:

1)Apply to:响应断言的应用范围

响应断言组件。

2)Response Size Field to Test:要断言哪部分内容的字节大小。

  1. Full response:响应全部内容的字节大小。
  2. Response Headers:响应头内容的字节大小。
  3. Response Body:响应体内容的字节大小。
  4. 响应代码:响应码字节大小。
  5. 响应信息:Response message部分信息字节大小。

3)Size to Assert:设置断言字节大小的范围

自己输入字节数,然后选择范围:=、!=、>、<、>=、<=

(2)持续时间断言组件

用于判断服务器的响应时间是否符合要求。

该断言计算的时间为,从发送请求到收到响应的这段时间,是否在我们设置的时间之内。

如果该时间小于设置时间,则成功;如果大于设置时间,则失败。

添加持续时间断言组件操作:选中“取样器”右键 —> 添加 —> 断言 —> 持续时间断言

界面如下图所示:

image

说明:

1)Apply to:响应断言的应用范围

响应断言组件。

2)断言持续时间:设置请求返回响应的最长时间,单位毫秒。

说明:这两个断言的用法和响应断言的用法一样,这里就不做演示了。