用更适合yaml的方式对requests响应进行断言
最近一直在捣鼓 gh action 和 k8s,学习了大量的 yaml 使用示例。不知不觉对 yaml 有了更深的感受,于是尝试做了一个新工具,旨在用更适合 yaml 的方式对 requests 响应进行断言理想中用于接口测试的 yaml 大概是这样子。
概述
最近一直在捣鼓 gh action 和 k8s,学习了大量的 yaml 使用示例。
不知不觉对 yaml 有了更深的感受,于是尝试做了一个新工具,旨在用更适合 yaml 的方式对 requests 响应进行断言
理想中用于接口测试的 yaml 大概是这样子
test_name: 访问百度首页 # 用例名称
steps: # 用例步骤
- request: # 步骤1:发送请求
method: get
url: https://www.baidu.com
- response: # 步骤2:断言响应
status_code: 200
text: "*baidu*"
其中:
-
name
、steps
字段交给 pytest 处理 -
request
字段交给 requests 处理 -
response
字典交给 本工具处 理
简而言之,本工具实现了像 requests 那样,可以通过 yaml 来编写简单、直观的参数,
用户只需传递这些参数即完成对接口的断言,而不是编写大量的 Python 代码对参数进行判断和处理
除了 requests 外,本工具亦支持和 requests 相同接口的其他接口请求库(例如 HTTPX)
安装
本工具名为 responses-validator
,暂只支持 python 3.12
安装命令如下
pip install responses-validator
为了演示本文,还需安装依赖(在实际项目,大概你已经安装过了)
pip install requests pytest-yaml-sanmu
基本用法
首先创建两个文件
第一个:配置文件 pyetst.ini
[pytest]
run_yaml_case = 1
log_file = pytest.log
log_file_level = info
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format = %H:%M:%S
第二个:pytest 钩子 conftest.py
conftest 内容(双击可放大)
自此准备工作已经就绪,接下来进行接口请求和断言
断言成功的例子
创建测试用例 test_basic.yaml
, 内容如下
test_name: 访问百度首页 # 用例名称
steps: # 用例步骤
- request: # 步骤1:发送请求
method: get
url: https://www.baidu.com
- response: # 步骤2:断言响应
status_code: 200
text: "*baidu*"
然后执行用例
pytest
执行结果和日志内容如下
pytest 执行结果(双击可放大)
日志文件内容(双击可放大)
这表示接口响应完全预期(状态码:200;响应正文:包含 "baidu"),
断言通过!
断言失败的例子
创建测试用例 test_failed.yaml
, 内容如下
test_name: 访问百度首页 # 用例名称
steps: # 用例步骤
- request: # 步骤1:发送请求
method: get
url: https://www.baidu.com
- response: # 步骤2:断言响应
status_code: 404
text: "*sanmu*"
注意这一次,我们修改了 response
字段的内容,
即使用了新的断言条件:
-
状态码:404
-
响应正文:包含
sanmu
然后执行用例
pytest
执行结果和日志内容如下
pytest 执行结果(双击可放大)
日志文件内容(双击可放大)
这表示接口响应不符合预期(状态码和 响应正文 均不符合),
断言失败!
将日志等级调整为 DEBUG
后,可以看到详细的信息
响应断言的 DEBUG 日志(双击可放大)
由日志内容可见:
responses-validator
会根据参数,分别对响应的状态码(status_code)、响应头(headers)、响应正文(text)、JSON 内容(json)进行匹配,
如果任一项,状态是失败(False),则判断测试失败
如果全部项,状态是成功( True),则判断为测试通过
除了状态码外,其他的断言方式都是【可选】,
如果参数值中没有对某个内容进行断言,则匹配状态【忽略】,不参与判断
关于断言的高级用法请见后文更新,敬请关注
原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!
更多推荐
所有评论(0)