pytest---通过hooks改变用例执行顺序(pytest_collection_modifyitems)

发布时间 2023-11-15 15:20:19作者: 测试-安静

前言

当我们设计自动化测试用例时,一般每条用例不能设置相依赖性,这样会对我们用例执行造成一些影响,当然如果存在依赖的话,我们可以通过pytest的插件设置执行顺序来完成,今天小编介绍一种通过pytest的钩子函数来完成更改测试用例的执行顺序

用例执行顺序

大家都知道,一般的执行顺序根据的是ascii的顺序进行执行的,想要固定的顺序,简单的方法通过ascii的顺序来完成。

 

这里我们先通过简单的例子看下正常执行顺序

# test01.py
# coding:utf-8

def test_01():
    print('这是test_01')

def test_02():
    print('这是test_02')

def test_03():
    print('这是test_03')

通过cmd进行执行可以看到,测试用例顺序通过用例1,2,3的顺序进行执行

pytest_collection_modifyitems

pytest_collection_modifyitems这个钩子函数表示可以更改我们的测试用例执行顺序

def pytest_collection_modifyitems(
    session: "Session", config: "Config", items: List["Item"]
) -> None:
    """Called after collection has been performed. May filter or re-order
    the items in-place.

    :param pytest.Session session: The pytest session object.
    :param _pytest.config.Config config: The pytest config object.
    :param List[pytest.Item] items: List of item objects.
    """

先通过钩子函数进行正常获取我们的测试用例执行情况,在conftest.py文件中进行编写代码

def pytest_collection_modifyitems(session, items):
    print("收集到的测试用例:%s"%items)
    for i in items:
        print('收集到测试用例名称:%s' %i.name)
        print('收集到测试用例节点:%s' %i.nodeid)
        print('收集到测试用例文件名:%s' %i.parent)
        print('收集到到测试用例路径:%s' %i.fspath)

通过cmd进行打印运行

通过上面的执行结果可以清楚的看到,想要更改我们的执行顺序,就直接进行修改我们的items这个值,收集到的测试用例均是存在这里的

更改执行顺序

我们通过倒叙的形式修改列表的值,从而改变测试执行顺序

def pytest_collection_modifyitems(session, items):
    print("收集到的测试用例:%s"%items)
    # 修改执行顺序
    items.reverse()
    for i in items:
        print('收集到测试用例名称:%s' %i.name)

通过cmd再次运行结果,很清楚的可以看到,测试用例的执行顺序已经发生了改变。

总结

小编通过简单的方法介绍了如何使用钩子函数来修改我们的测试用例,具体工作中如何使用,这个需要小伙伴们根据自己的当前项目进行使用,感谢您的阅读,希望能给您带来帮助