Bootstrap

Pytest精通指南(23)钩子函数-执行顺序(pytest-ordering)



请添加图片描述

前言

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

执行结果

在这里插入图片描述

;