概述
responses-validator 专用于对 reqeuests 的响应对象进行断言,
同时,为了更适用 yaml 的场景,支持了多种灵活、可扩展的写法,可用于搭建yaml接口自动化测试框架。
根据 reqeuests 响应对象的特点,responses-validator 的断言可以分为 4 个部分
-
状态码:status_code
-
响应头:headers
-
响应正文:text
-
JSON 响应正文:json
这也成为了 responses_validator.validator
方法主要参数:
resp = requests.get("https://www.baidu.com")
responses_validator.validator(
resp=resp,
status_code=200,
headers={},
text="",
json={}
)
注意:resp 和 status_code 是必填参数,其他参数是选填参数
本文详细叙述了所支持的 4 种状态码断言写法:
-
断言单个状态码,如:200
-
断言多个状态码,如:200,201,204
-
断言单个状态码范围,如:2xx
-
断言多个状态码范围,如:2xx, 3xx
更多示例见下文
1. 断言单个状态码
如果状态码只有一个预期值,可以直接传递该值(字符串或数字均可)
如果响应的状态码与 status_code
参数相等,则判定为测试通过,
否则判定为测试失败
创建如下 yaml 用例,其中包含 2 个断言步骤,每个步骤对单个状态码进行断言
# test_status_code_single_value.yaml
test_name: 断言状态码匹配单个值
steps:
- request:
method: get
url: https://www.baidu.com
- response:
status_code: 200 # 断言通过
- response:
status_code: 201 # 断言失败
注:该请求必定返回状态码 200,下同
执行结果如下:
断言单个状态码日志内容
由日志内容可见,一共进行了 2 次断言,其中:
第一次断言状态码等于 200,断言成功
第二次断言状态码等于 201,断言失败
2. 断言多个状态码
如果状态码有多个预期值,可通过 |
符号进行分隔
如果响应的状态码,与其中任意一个值相等,则判定为测试通过
如果均不相等,则判定为测试失败
创建如下 yaml 用例,其中包含 2 个断言步骤,每个步骤对多个状态码进行断言
# tests/test_status_code_multiple_value.yaml
test_name: 断言状态码匹配多个值
steps:
- request:
method: get
url: https://www.baidu.com
- response:
status_code: 200 | 201 # 断言通过
- response:
status_code: 401 | 403 # 断言失败
执行结果如下:
断言多个状态码日志内容
由日志内容可见,一共进行了 2 次断言,其中:
第一次断言状态码等于 200 或 201,断言成功
第二次断言状态码等于 401 或 403,断言失败
如果将个断言改为如下内容,则断言成功
response:
status_code: 401 | 403 | 200 # 断言成功
执行结果如下:
断言多个状态码,最后一个断言成功
3. 断言单个范围
如果状态码有多个预期值,例如 200、201、202、203、204...
可通过 *
进行匹配,例如:
-
20*
代表所有 20 开头的状态码 -
2*
代表所有 2 开头的状态码
如果响应的状态码,与其中任意一个值相等,则判定为测试通过
如果均不相等,则判定为测试失败
创建如下 yaml 用例,其中包含 2 个断言步骤,每个步骤对单个范围进行断言
# tests/test_status_code_single_range.yaml
test_name: 断言状态码单个范围
steps:
- request:
method: get
url: https://www.baidu.com
- response:
status_code: 20* # 断言通过
- response:
status_code: 40* # 断言失败
执行结果如下:
断言单个范围日志内容
由日志内容可见,一共进行了 2 次断言,其中:
第一次断言状态码等于 20 开头,断言成功
第二次断言状态码等于 40 开头,断言失败
4. 断言多个范围
如果状态码有多个预期值范围,例如 20*、30*、40*
,可通过 |
符号进行分隔
如果响应的状态码,与其中任意一个范围匹配,则判定为测试通过
如果均不匹配,则判定为测试失败
创建如下 yaml 用例,其中包含 2 个断言步骤,每个步骤对多个范围进行断言
# tests/test_status_code_multiple_range.yaml
test_name: 断言状态码匹配多个范围
steps:
- request:
method: get
url: https://www.baidu.com
- response:
status_code: 10* | 20* # 断言通过
- response:
status_code: 30* | 40* |50* # 断言失败
执行结果如下:
断言多个范围日志内容
由日志内容可见,一共进行了 2 次断言,其中:
第一次断言状态码等于 10 开头或 20 开头,断言成功
第二次断言状态码等于 30 开头或 40 开头或 40 开头,断言失败
测试开发研习社
《pytest源码剖析》正在连载中,希望对你有所帮助;《jmeter文档通读》正在进行中,希望能够一起进步;《jmeter二次开发》正在筹备中,希望聆听你的想法;
89篇原创内容
公众号
原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!