在自动化测试中,测试用例的执行顺序有时对测试结果具有重要影响。本文将介绍如何在pytest框架中使用pytest-ordering
插件以及Collection hooks来控制测试用例的执行顺序。
方式1: 使用pytest-ordering插件控制执行顺序
1.1 安装pytest-ordering插件
首先,需要安装pytest-ordering
插件。可以通过pip命令安装:
pip install pytest-ordering
使用序号指定执行顺序
示例代码:
import pytest@pytest.mark.run(order=2)
def test_login():print("Executing test case:login")@pytest.mark.run(order=-1)
def test_create_order():print("Executing test case:create_order")@pytest.mark.run(order=1)
def test_register():print("Executing test case:register")
在这个示例中,首先执行test_register,其次执行test_login,最后执行create_order。
使用函数名指定执行顺序
示例代码:
import pytest@pytest.mark.run(after='test_register')
def test_login():print("Executing test case:login")@pytest.mark.run(after='test_login')
def test_create_order():print("Executing test case:create_order")@pytest.mark.run(order=1)
def test_register():print("Executing test case:register")
在这个示例中,首先执行test_register,其次执行test_login,最后执行create_order。
使用序数词指定执行顺序
安装插件后,可以通过用序数词(如first, second, third等)作为装饰器参数来指定测试用例的执行顺序。
示例代码:
import pytest@pytest.mark.run('last')
def test_create_order():print("Executing test case:create_order")@pytest.mark.run('second')
def test_login():print("Executing test case:login")@pytest.mark.run('first')
def test_register():print("Executing test case:register")
在这个示例中,首先执行test_register,其次执行test_login,最后执行create_order。
方式2:使用Collection hooks控制执行顺序
2.1 理解Collection hooks
Collection hooks是pytest的一个特性,允许在测试用例收集阶段进行自定义操作。可以通过实现pytest_collection_modifyitems
钩子来控制测试用例的执行顺序。
2.2 实现Collection hooks
创建一个conftest.py
文件,并在其中实现pytest_collection_modifyitems
钩子,可以按参照以下代码,控制它们的执行顺序:
import pytestdef pytest_collection_modifyitems(config, items):# 根据需要对items进行排序specified_order = ["test_case_2", "test_case_1"] # 指定测试用例执行顺序items.sort(key=lambda x: specified_order.index(x.name.split("[")[0]) if x.name.split("[")[0] in specified_order else float('inf'))
测试用例示例
假设有两个测试用例test_case_1
和test_case_2
:
# test_case.py
def test_case_1():print("Executing test case 1")def test_case_2():print("Executing test case 2")
执行结果
3. 参考资料
- pytest官方文档:https://docs.pytest.org/en/latest/
- pytest-ordering插件文档:https://pypi.org/project/pytest-ordering/