前言
在测试流程类接口时,我们常常需要反复调用同一个接口,这时可以考虑复用API。在代码中,可以将API写成函数进行调用。而在yaml文件中,我们可以将单个API定义在一个yaml文件中,并让测试用例调用这个导入的API。
安装插件
通过pip安装pytest-yaml-yoyo插件。
pip install pytest-yaml-yoyo
用例分层功能在v1.0.5版本中实现。
用例分层分为两层:API层和测试用例层。
API层:描述接口的请求,可以包含基本的验证。 测试用例层:多个步骤按顺序引用API。

API层示例
API层仅用于描述接口,一般存放在项目根目录下的api文件夹中。
api/login.yaml示例
name: post
request:
method: POST
url: http://httpbin.org/post
json:
username: ${username}
password: "123456"
validate:
- eq: [status_code, 200]需要注意的是,API层不能单独运行,因为它只是用例的一部分。用例执行需要使用test_*.yml命名。
测试用例层
BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop系统亮点1、系统代码100%开源 2、代码分层清晰、格式规范 3、基于Laravel框架开发 4、Event机制实现Hook功能 5、强大的插件机制 6、系统扩展性强 方便二次开发
测试用例层通过api关键字导入所需的API,导入路径为相对路径,需根据项目根目录导入。如果代码无法识别项目根目录,建议在项目根目录下放置一个pytest.ini文件,pytest会以pytest.ini文件所在的目录为项目根目录。以下是项目结构示例:
├─api └─ login.yml ├─testcase └─ test_login.yml └─conftest.py └─pytest.ini
无论test_*.yml文件位于哪个目录,都会从项目根目录导入API的yaml文件。
config:
name: login case
base_url: http://124124.70.221.221:8201
variables:
username: "test123"
password: "123456"
teststeps:
- name: step login1
api: api/login.yml
extract:
url: body.url
validate:
- eq: [status_code, 200]
- eq: [ok, true]
- name: step login2
api: api/login.yml运行用例时,也需在项目根目录执行pytest命令。
pytest testcase
关于变量
API层可以引用变量,这些变量的值从用例目录的variables加载,目前仅支持在config中设置用例全局变量。
config:
name: login case
base_url: http://124124.70.221.221:8201
variables:
username: "test123"
password: "123456"可以将API理解为用例的一个步骤,是用例的一部分,导入后相当于将请求复制到用例步骤中。
关于校验
在API层可以编写一些基础的校验,如状态码校验,但不应在API层编写业务逻辑校验。业务逻辑校验应在用例层进行。
- name: step login1
api: api/login.yml
extract:
url: body.url
validate:
- eq: [status_code, 200]
- eq: [ok, true]如果API层和用例层都有验证,最后会合并到一起进行校验。









