概述

最近一直在捣鼓 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*"

其中:

  • namesteps 字段交给 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, 内容如下

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),则判断为测试通过

除了状态码外,其他的断言方式都是【可选】,

如果参数值中没有对某个内容进行断言,则匹配状态【忽略】,不参与判断

关于断言的高级用法请见后文更新,敬请关注

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐