YAML文件规则¶
首先,检查pytest.ini文件中包含以下,确保插件已启用
[pytest]
yaml_run_case = true
备注
未启用时,插件完全不工作,如未安装一般
用例文件名¶
本插件约定:测试用例的文件名必须是 ``test_`` 开头。
备注
后期有计划支持自定义文件名规则,通过 ini 配置文件来设定
正确的文件名¶
以下是正确的文件名示例:
test_api.yaml
test_web.yaml
test_app.yaml
test_测试用例.yaml
test_0_x_1.yaml
错误的文件名¶
以下是错误的文件名示例,错误的文件会被本插件忽略:
abc.yaml
api_test.yaml
docker-compose.yaml
用例文件内容¶
本插件约定文件包含三个字段:
name:必填 ,字符串格式,用来说明用例名称
mark:选填,列表,用来说明标记
steps:必填 ,列表格式,用来说明用例步骤
必填字段¶
只需完成必填字段,即可实现最基本的yaml用例文件:
# test_base.yaml
name: abc # 用例名称,字符串格式
steps: # 用例步骤,数组(列表)格式
- a: 1 # 每一个步骤,必须要是对象(字典)
- b: 2
- c: 3 # 每一个步骤,必须要是对象(字典)
以上yaml文件定义了一个名为abc的用例,并且包含3个测试步骤。
其中字段 steps
应该使用对象(字典)作为成员。这也符合测试用例的实际需求:
每个用例用过多个步骤,每个步骤拥有复杂内容
执行效果如下:
(.venv) C:\demo\pytest-yaml-demo>pytest
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.2.2, pluggy-1.5.0
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 1 item
test_base.yaml . [100%]
=================================== 1 passed in 0.02s ====================================
可以看出,yaml文件已被pyetst识别为用例文件。
如果添加 -vs
参数,还可以看到yaml文件中的name别识别为用例名称,
steps字段中的内容被识别为一个个独立的步骤,并且拥有各自序号:
(.venv) C:\demo\pytest-yaml-demo>pytest -vs
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.3.3, pluggy-1.5.0 --
cachedir: .pytest_cache
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 1 item
test_basic.yaml::abc ----------
当前用例id:test_basic.yaml::abc
当前用例名称:abc
当前用例步骤:{'a': 1}
当前用例步骤序号:0
最大用例步骤序号:2
当前是否第一个步骤:True
当前是否最后一个步骤:False
----------
当前用例id:test_basic.yaml::abc
当前用例名称:abc
当前用例步骤:{'b': 2}
当前用例步骤序号:1
最大用例步骤序号:2
当前是否第一个步骤:False
当前是否最后一个步骤:False
----------
当前用例id:test_basic.yaml::abc
当前用例名称:abc
当前用例步骤:{'c': 3}
当前用例步骤序号:2
最大用例步骤序号:2
当前是否第一个步骤:False
当前是否最后一个步骤:True
====================
PASSED
=================================== 1 passed in 0.02s ====================================
该输出内容是由hook实现,关于hook相见后文。
选填字段¶
选填字段可按需添加,暂时只有 mark
,与 @pytest.mark
相对应。
在用一个用例中 @pytest.mark
可以使用多次,所以 mark
应为数组(列表)格式。
下面是一个简单的例子
# test_base.yaml
name: abc
mark:
- skip # 等同于 `@pytest.mark.skip` 跳过不执行
steps:
- a: 1
- b: 2
执行结果如下(用例跳过执行)
(.venv) C:\demo\pytest-yaml-demo>pytest -vs
================================== test session starts ===================================
platform win32 -- Python 3.12.0, pytest-8.3.3, pluggy-1.5.0
cachedir: .pytest_cache
rootdir: C:\demo\pytest-yaml-demo
configfile: pytest.ini
plugins: yaml-1.1.0
collected 1 item
test_basic.yaml::abc SKIPPED (unconditional skip)
=================================== 1 skipped in 0.01s ===================================
也可以为mark传递参数,详见后文