responses-validator接口断言之响应头

responses-validator 专用于对 reqeuests 的响应对象进行断言,

同时为了适用于 yaml 的场景,支持了多种灵活、可扩展的写法

本文详细叙述了响应头和正文所支持的 4 种断言写法:

  1. 断言部分字段

  2. 断言包含匹配

  3. 断言相等匹配

  4. 断言正则匹配

  5. 断言函数匹配

详细示例见下文

1. 响应头断言的基本用法

首先,对响应头和响应正文的断言均是可选的。

其次,响应头中字段较多,可只对部分字段进行断言

假设某响应头原文如下

HTTP/1.1 200 OKCache-Control: private, no-cache, no-store, proxy-revalidate, no-transformConnection: keep-aliveContent-Encoding: gzipContent-Type: text/htmlDate: Mon, 12 Apr 2022 13:10:34 GMTLast-Modified: Mon, 23 Jan 2017 13:24:17 GMTPragma: no-cacheServer: bfe/1.0.8.18Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/Transfer-Encoding: chunked

在编写断言时,可仅对其中 2 个字段进行断言

Connection: keep-aliveContent-Type: text/html

具体示例:

# tests/test_headers_fields.yamltest_name: 断言响应头部分字段steps:  - request:      method: get      url: https://www.baidu.com
  - response: # 对部分稳定字段进行断言,测试通过      status_code: 200      headers:         Connection: keep-alive        Content-Type: text/html
  - response:  # 对全部字段进行断言,测试失败      status_code: 200      headers:         Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform        Connection: keep-alive        Content-Encoding: gzip        Content-Type: text/html        Date: Mon, 12 Apr 2022 13:10:34 GMT        Last-Modified: Mon, 23 Jan 2017 13:24:17 GMT        Pragma: no-cache        Server: bfe/1.0.8.18        Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/        Transfer-Encoding: chunked

执行结果如下:

图片

图 1. 仅对部分字段进行断言

2. 断言包含匹配

有时,响应头中包含动态内容(例如日期)

在断言时,希望忽略部分内容,而对另一部分进行判断

在 responses-validator 可以使用【glob】模式,并利用通配符代指动态内容

符号含义
*任意数量的任意字符
?1 个任意字符串
[xyz]1 个括号中的字符
[!abc]1 个括号外的字符

具体示例如下:

​​​​​​​

# tests/test_headers_glob.yamltest_name: 断言响应头包含匹配steps:  - request:      method: get      url: https://www.baidu.com
  - response:      status_code: 200      headers:        Connection: # 完整格式          value: '*alive*'  # 匹配表达式          mode: 'glob' # 匹配模式          msg: '没有包含字符串alive' # 断言描述,失败时显示,非必填
  - response:      status_code: 200      headers:        Connection: '*alive*' # 默认使用glob模式,可在断言中加入*

执行结果如下:

图片

图 2. 对字段进行包含匹配

3. 断言相等匹配

在【glob】模式(默认)下,*? 等字符串有特殊含义,

如果我们要断言的内容恰好是 * 等特殊符号呢?

在 responses-validator 可以使用【same】模式,

此模式下将进行最朴素的【相等断言】,排除了符号、语法等干扰

具体示例:

​​​​​​​

# tests/test_headers_same.yamltest_name: 断言响应头相等匹配steps:  - request:      method: get      url: https://www.baidu.com  - response:      status_code: 200      headers:        Connection: # 断言成功          value: 'keep-alive'  # 和响应内容完全一样          mode: 'same' # 指定匹配模式          msg: '响应头不包含keep-alive' # 失败提示,非必填  - response:      status_code: 200      headers:        Connection:  # 断言失败          value: '*alive*'  #  响应内容不一样,使用了通配符          mode: 'same'  # 指定匹配模式          msg: '响应头不包含*alive*' # 失败提示,非必填

执行结果如下:

图片

图 3. 对字段进行相同匹配通过

图片

图 4. 对字段进行相同匹配失败

4. 正文断言的基本用法

如果觉得 glob 模式太过简单,无法较好的描述复杂断言


在 responses-validator 可以使用【re】模式,通过正则表达式来进行更复杂的匹配

使用【re】模式时,

mode 的写入 re

value 的写入具体的表达式

msg 为选填,可以写入失败提示

具体示例:

​​​​​​​​​​​​​​

# tests/test_headers_re.yamltest_name: 断言响应头正则匹配steps:  - request:      method: get      url: https://www.baidu.com  - response:      status_code: 200      headers:        Connection: # 断言成功          value: '(.*)-alive'  # 使用正则匹配任意字符          mode: 're' # 指定模式
  - response:      status_code: 200      headers:        Connection:  # 断言失败          value: '(?)alive'  # 使用正则表示单个字符串          mode: 're' # 指定模式

执行结果如下:

图片

图 5. 对字段进行正则匹配通过

图片

图 6. 对字段进行正则匹配失败

5. 正文断言的基本用法

正向的断言和响应头断言非常相似。

在写法上,断言 response 中的 text,犹如断言 headers 中的 Connection

具体示例:

# tests/test_text_basic.yaml
test_name: 使用glob模式断言响应正文steps:  - request:      method: get      url: https://www.baidu.com
  - response:      status_code: 200      text: "*baidu*" # 和响应头断言一样,默认使用glob模式
  - response:      status_code: 200      text:        value: "abcd"        mode: 'same' # 指定匹配模式        msg: '响应内容不是abcd' # 失败提示,

执行结果如下:

图片

图 7. 对正文使用包含匹配通过

图片

图 8. 对正文使用相等匹配失败

对于文本(text)格式的响应正文,可以使用如请求头一样的包含、相等、正则等匹配方式,

对于 JSON 格式的响应正文,下一篇介绍了可以有更加便捷、灵活、强大的断言方式

原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值