首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest-yaml-sanmu(一):把yaml作为测试文件的pytest插件

概述

大家都知道 pytest 的插件一般以pytest-作为前缀,

在 pypi 搜索pytest-yaml,可以搜到下面三个插件:

pytest-yaml

pytest-yaml-yoyo

pytest-yaml-sanmu

第一个插件较为简单,读取指定 yaml 文件的内容,并保存到 fixture 中,并且自 2018 年后不再更新

第二个插件较为复杂,甚至有些超越【插件】的范畴,集成了一系列如读取 yaml 文件、生成用例、接口请求、数据库连接等功能,成为一个开箱即用的接口测试框架

第三个插件较为简单,只有【将 yaml 文件识别为测试用例】,这个单一的职责,它定位不是一个作为直接面向用户的工具,而是一个搭建框架的脚手架。

借助这个脚手架,

你可以封装出像pytest-yaml-yoyo那样的 yaml 接口测试框架,

更可以封装出像opentest那样的 yaml 全栈测试框架(Web + App+API)

安装

与 pytest 其他插件的安装方式相同,使用 pip 命令即可

pip install pytest-yaml-sanmu

需要注意有两点:

该插件仅支持 python 3.10 及以上版本

本插件和pytest-yaml存在冲突,只能二选一进行安装

使用

01

启用插件

因为 yaml 应用场景非常广泛,为避免误处理非测试用例的 yaml 文件,

本插件需要手动启用才会进行工作,在 pytest 配置文件中进行实现

[pytest]

# 启用插件,执行yaml用例run_yaml_case = 1

未启用时,插件表现与未安装一致

02

yaml 用例文件名

本插件约定:测试用例的文件名必须是test_开头

以下名字的 yaml 会被插件进行识别,并进一步处理:

test_api.yaml

test_web.yaml

test_app.yaml

test_测试用例.yaml

test_0_x_1.yaml

pytest 能够识别的 yaml 文件

以下名字的 yaml 不会被插件进行识别,仿佛不存在一般

abc.yaml

api_test.yaml

docker-compose.yaml

pytest 不能识别的 yaml 文件

03

yaml 用例文件内容

本插件约定,用例内容必须:

包含test_name字段,字符串格式,用例定义用例名,

包含steps字段,数组(列表)格式,用例用例定义步骤

每一个用例步骤都是对象(字典)格式

# test_api.yamltest_name: abc # 用例名称,字符串格式steps: # 用例步骤,数组(列表)格式 - a: 1 # 每一个步骤,必须要是对象(字典) - b: 2 # 每一个步骤,必须要是对象(字典) - c: 3 # 每一个步骤,必须要是对象(字典)

以上 yaml 定义了一个名为 abc 的用例,并且包含 3 个测试步骤

执行效果如图

pytest 执行 yaml 文件中的用例

04

yaml 用例执行规则

正如前文所言,本插件的职责非常单一,即:将 yaml 文件中的用例交给被 pytest 识别、执行。

除此之外,它没有其他的功能,既不会请求接口,也不会控制浏览器,更不会连接数据库。

yaml 中的用例步骤该怎么执行,反倒是必须由你自行定义。

也是正因为如此,才为使用过本插件的应用留下了极大的扩展空间。

具体来说 yaml 用例执行规则定义通过 hook 实现:

在 conftest.py 中创建函数pytest_yaml_run_step

在函数中处理参数item

示例如下

hook 打印 yaml 用例步骤

执行结果如下

hook 的处理效果

从执行结果可以发现这样的规律:

pytest 可以自动找到 yaml 用例文件

hook 执行了 3 次,和用例步骤的数量一致

每次打印的内容,和用例步骤的内容一致

可以推测出pytest-yaml-samu的流程和原理:

本插件会按照 yaml 文件中所定义的用例步骤,

按照固定的顺序、数量、内容,

对pytest_yaml_run_step进行调用

基于此,只需可以在函数中加入断言,使 yaml 成为真正意义上的测试用例

具体的例子可以关注本文后续更新。

反馈

本插件是从 sanmu 框架中提取出来的,旨在让更多人封装出属于自己的 yaml 测试框架。

尽管已经在 sanmu 框架等的多处场景进行使用,但因本人水平有限,难免存在不足或 BUG,

计划

暂定的更新计划有:

[ ] 用例文件的名称规则可自定义

[ ] 将用例名称的字段从test_name改为name

[ ] 在 yaml 中支持使用for、if等语法

[ ] 为 yaml 用例文件给出错误提示和修改建议

[ ] 在 yaml 中直接使用 fixture 的返回值

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ODC_lQTyyqsC8sE0oiMyxJyg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券