概述
最近一直在捣鼓 gh action 和 k8s,学习了大量的 yaml 使用示例。
不知不觉对 yaml 有了更深的感受,于是尝试做了一个新工具,旨在用更适合 yaml 的方式对 requests 响应进行断言
理想的用于接口测试的 yaml 大概是这样子
其中:
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.loglog_file_level = infolog_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)slog_file_date_format = %H:%M:%S
第二个:pytest 钩子conftest.py
conftest 内容(双击可放大)
自此准备工作已经就绪,接下来进行接口请求和断言
断言成功的例子
创建测试用例test_basic.yaml, 内容如下
然后执行用例
pytest
执行结果和日志内容如下
pytest 执行结果(双击可放大)
日志文件内容(双击可放大)
这表示接口响应完全预期(状态码:200;响应正文:包含 "baidu"),
断言通过!
断言失败的例子
创建测试用例test_failed.yaml, 内容如下
注意这一次,我们修改了response字段的内容,
即使用了新的断言条件:
状态码:404
响应正文:包含sanmu
然后执行用例
pytest
执行结果和日志内容如下
pytest 执行结果(双击可放大)
日志文件内容(双击可放大)
这表示接口响应不预期(状态码和 响应正文 均不符合),
断言失败!
将日志等级调整为DEBUG后,可以看到详细的信息
响应断言的 DEBUG 日志(双击可方法)
由日志内容可见:
responses-validator会根据参数,分别对响应的状态码(status_code)、响应头(headers)、响应正文(text)、JSON 内容(json)进行匹配,
如果任一项,状态是失败(False),则判断测试失败
如果全部项,状态是成功( True),则判断为测试通过
除了状态码外,其他的断言方式都是【可选】,
如果参数值中没有对某个内容进行断言,则匹配状态【忽略】,不参与判断
关于断言的高级用法请见后文更新,敬请关注
领取专属 10元无门槛券
私享最新 技术干货