Python Pytest自动化测试 改用例执行顺序

Time will tell.



pytest默认执行用例是根据项目下的文件夹名称按ascii码去收集的, module里面的用例是从上往下执行。

pytest_collection_modifyitems钩子函数就是用来改变用例执行顺序的。

pytest_collection_modifyitems功能是当测试用例收集完成后,可以改变测试用例集合的顺序。

def pytest_collection_modifyitems(session, config,items):
'''
called after collection is completed.
you can modify the ``items`` list
:param _pytest.main.Session session: the pytest session object
:param _pytest.config.Config config: pytest config object
:param List[_pytest.nodes.Item] items: list of item objects
'''

items是用例对象的一个列表,改变items里面用例的顺序就可以改变用例的执行顺序了。

1、Pytest默认执行顺序

设计一个 pytest 项目,有两个包,分别在test_a.pytest_b.py写测试用例。


conftest.py的内容:

import pytestdef pytest_collection_modifyitems(session,items):
print("收集到的测试用例:%s"%items)

test_a.py的内容:

def test_a_1():
print("测试用例a_1")def test_a_2():
print("测试用例a_2")

conftest.py的内容:

def test_b_2():
print("测试用例b_2")def test_b_1():
print("测试用例b_1")

运行后可以看到收集的测试用例:

D:\demo2>pytest
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-4.5.0, py-1.5.4, pluggy-0.13.1
rootdir: D:\soft\code\pytest_jenkins_demo\demo2
plugins: allure-pytest-2.8.6
collecting ... 收集到的测试用例:[<Function test_a_1>, <Function test_a_2>, <Function test_b_2>, <Function test_b_1>]
collected 4 itemsa\test_aaa.py ..                                              			[ 50%]
b\test_bbb.py ..                                                         [100%]
========================== 4 passed in 0.06 seconds ===========================

从结果可以看出运行时,是先按模块名称ascii码去收集的,单个.py文件里面的用例按从上到下写的顺序收集。

2、items用例排序

如果想改变用例执行顺序,以用例名称ascii码排序。先获取用例名称,以用例名称排序就可以了。

def pytest_collection_modifyitems(session, items):
print(type(items))
print("收集到的测试用例:%s" % items)
# sort排序,根据用例名称item.name 排序
items.sort(key=lambda x: x.name)
print("排序后的用例:%s" % items)
for item in items:
print("用例名:%s" % item.name)

执行结果:

D:\soft\code\pytest_jenkins_demo\demo2>pytest -s
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-4.5.0, py-1.5.4, pluggy-0.13.1
rootdir: D:\soft\code\pytest_jenkins_demo\demo2
plugins:
collecting ... <class 'list'>
收集到的测试用例:[<Function test_a_1>, <Function test_a_2>, <Function test_b_2>, <Function test_b_1>]
排序后的用例:[<Function test_a_1>, <Function test_a_2>, <Function test_b_1>, <Function test_b_2>]
用例名:test_a_1
用例名:test_a_2
用例名:test_b_1
用例名:test_b_2
collected 4 itemsa\test_aaa.py 测试用例a_1
.测试用例a_2
.
b\test_bbb.py 测试用例b_1
.测试用例b_2
.========================== 4 passed in 0.06 seconds ===========================

重新排序后可以按用例名称顺序执行。

顺带一提,有个pytest-ordering插件可以自定义用例顺序。

好啦,本章内容就分享到这了,如果你对更多内容、及Python自动化软件测试、面试题感兴趣的话可以加入我们175317069一起学习。群里会有各项学习资源发放,更有行业深潜多年的技术人分析讲解。

最后祝愿你能成为一名优秀的软件测试工程师!

欢迎【点赞】、【评论】、【关注】~

Time will tell.(时间会证明一切)


版权声明:本文为kami_ochin_akane原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。