抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

背景

通常设计自动化case,需要注意独立性原则,减少case间的依赖性,那么如果必须要指定运行顺序该怎么办呢?

以pytest为例,我们知道,pytest默认执行用例是根据项目下的文件名称按ascii码去收集运行的;文件中的用例是从上往下按顺序执行的。

验证处理顺序

简单写个demo, 结构如下,存在文件和文件夹,验证文件夹和文件优先级。

image.png

写多个方法验证同文件内搜集顺序。

image.png

注意Folder_B文件内case名顺序不按字母来,与Folder_A相反

image.png

结果

image.png

结论

  • 不同类型文件收集优先级: .py文件 > 文件夹

  • 同类型下,取名称按ascii码去收集

  • 同文件下,自上而下顺序收集

使用pytest-ordering变更顺序

使用pytest-ordering可以指定文件下case执行顺序

1
pip install pytest-ordering

使用

使用@pytest.mark.run(order=1)装饰器来指定

尝试下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from log import log
import pytest


class TestDeliverOrderList:

@pytest.mark.run(order=3)
def test_c1(self):
log.error("this is test_c1")

@pytest.mark.run(order=1)
def test_c2(self):
log.error("this is test_c2")

@pytest.mark.run(order=2)
def test_c3(self):
log.error("this is test_c3")

结果

image.png

跨文件使用

修改test_b.py

image.png

修改test_c.py

image.png

结果

1
pytest testcollection/test_c.py testcollection/test_b.py

image.png

换下文件顺序

1
pytest testcollection/test_b.py testcollection/test_c.py

image.png

结论

  • pytest-ordering指定顺序支持跨文件

  • 出现相同order,同文件下按上下先后执行

  • 跨文件出现相同order,按收集文件顺序先后执行

使用pytest_collection_modifyitems

pytest_collection_modifyitems是pytest内置函数,需要写在conftest.py下,效果如图

image.png

items就是收集到的所有case了,可以修改其排序,也可以剔除case。

删除case

删除用例名为“test_c3”的case

1
2
3
def pytest_collection_modifyitems(items):
item_index = items.index('test_c3')
del items[item_index]

更改排序

根据用例名称item.name的ASCII码排序

1
2
def pytest_collection_modifyitems(items):
items.sort(key=lambda x: x.name)

评论