文章目录
- 前言
- 应用场景
- 插件安装
- 参数分析
- 装饰方法
- 装饰类
- 装饰模块
前言
pytest-ordering
是一个pytest
插件,它允许用户自定义测试用例的执行顺序。默认情况下,
pytest
会按照模块、类、函数定义的顺序以及它们的名称的字母顺序来执行测试用例。但通过使用
pytest-ordering
,我们可以覆盖这种默认行为,精确地控制哪些测试用例应该首先执行,哪些应该稍后执行。
应用场景
- 测试前置条件:确保在执行测试之前满足某些条件,例如创建数据库记录、登录用户等。
- 资源管理:在多个测试之间共享资源时,确保资源按正确的顺序被分配和释放。
- 依赖测试:确保先运行那些其他测试所依赖的测试。
插件安装
安装命令:
pip install pytest-ordering
参数分析
pytest-ordering插件主要通过装饰器来指定测试用例的执行顺序
- @pytest.mark.run(order=N):
order
参数用于指定测试用例的执行顺序。数字越小,优先级越高,测试用例越早执行- @pytest.mark.first:这个装饰器将测试用例标记为第一个执行(高版本已经弃用)
- @pytest.mark.last:这个装饰器将测试用例标记为倒数第一个执行(高版本已经弃用)
- 优先级:order=0 > order=正数 > 无order > order=负数。
装饰方法
示例代码
import pytest
def test_a():
assert 1 == 1
def test_b():
assert 2 == 2
# 按照order执行
@pytest.mark.run(order=2)
def test_c():
assert 3 == 3
# 在first标记之后第一条执行
@pytest.mark.run(order=1)
def test_d():
assert 4 == 4
# 无论如何都是第一条执行
@pytest.mark.first
def test_e():
assert 5 == 5
# 无论如何都是最后一条执行
@pytest.mark.last
def test_f():
assert 6 == 6
执行结果
装饰类
示例代码
import pytest
def test_a():
assert 1 == 1
def test_b():
assert 2 == 2
# 不在推荐使用first或last排列测试用例的执行顺序
@pytest.mark.run(order=2)
class TestClassDemo1:
def test_c(self):
assert 3 == 3
def test_d(self):
assert 4 == 4
# @pytest.mark.run(order=1)
class TestClassDemo2:
def test_e(self):
assert 5 == 5
@pytest.mark.run(order=1)
def test_f(self):
assert 6 == 6
执行结果
装饰模块
test_case_01.py
文件代码
import pytest
@pytest.mark.run(order=1)
# 按照定义的顺序执行
def test_a():
assert 1 == 1
# 按照定义的顺序执行
def test_b():
assert 2 == 2
test_case_02.py
文件代码
import pytest
# 模块类标记
pytestmark = pytest.mark.run(order=1)
def test_a():
assert 1 == 1
def test_b():
assert 2 == 2
class TestClassDemo1:
def test_c(self):
assert 3 == 3
def test_d(self):
assert 4 == 4
class TestClassDemo2:
def test_e(self):
assert 5 == 5
def test_f(self):
assert 6 == 6
执行结果