背景
通常设计自动化case,需要注意独立性原则,减少case间的依赖性,那么如果必须要指定运行顺序该怎么办呢?
以pytest为例,我们知道,pytest默认执行用例是根据项目下的文件名称按ascii码去收集运行的;文件中的用例是从上往下按顺序执行的。
验证处理顺序
简单写个demo, 结构如下,存在文件和文件夹,验证文件夹和文件优先级。
写多个方法验证同文件内搜集顺序。
注意Folder_B文件内case名顺序不按字母来,与Folder_A相反
结果
结论
不同类型文件收集优先级: .py文件 > 文件夹
同类型下,取名称按ascii码去收集
同文件下,自上而下顺序收集
使用pytest-ordering变更顺序
使用pytest-ordering可以指定文件下case执行顺序
1 | pip install pytest-ordering |
使用
使用@pytest.mark.run(order=1)装饰器来指定
尝试下
1 | from log import log |
结果
跨文件使用
修改test_b.py
修改test_c.py
结果
1 | pytest testcollection/test_c.py testcollection/test_b.py |
换下文件顺序
1 | pytest testcollection/test_b.py testcollection/test_c.py |
结论
pytest-ordering指定顺序支持跨文件
出现相同order,同文件下按上下先后执行
跨文件出现相同order,按收集文件顺序先后执行
使用pytest_collection_modifyitems
pytest_collection_modifyitems
是pytest内置函数,需要写在conftest.py
下,效果如图
items就是收集到的所有case了,可以修改其排序,也可以剔除case。
删除case
删除用例名为“test_c3”的case
1 | def pytest_collection_modifyitems(items): |
更改排序
根据用例名称item.name的ASCII码排序
1 | def pytest_collection_modifyitems(items): |