14:pytest-order 插件 顺序控制案例

在 pytest 默认执行规则中,测试用例是按照文件加载顺序、字母顺序 自动执行的,无法人为指定先后。但在实际 GUI 自动化、接口自动化项目中,用例往往存在依赖关系(比如必须先执行登录,才能执行下单;必须先执行新增,才能执行编辑 / 删除),强行依赖默认顺序极易导致用例执行失败。

针对这个问题,pytest-order 第三方插件是官方推荐、最稳定的解决方案,它可以轻松指定用例的执行顺序,支持函数、类、模块多级控制,简单易用、兼容性极强。

本文基于你提供的核心内容,从安装、基础用法、高级用法到实战场景,完整讲解 pytest 用例执行顺序控制。


一、为什么需要指定用例执行顺序?

pytest 默认执行顺序规则:

  1. 先按测试文件的字母顺序排序
  2. 文件内按测试函数 / 方法的字母顺序排序
  3. 不保证依赖用例的执行顺序

真实痛点

  • GUI 自动化:登录 → 进入首页 → 打开菜单 → 编辑信息,必须按顺序执行
  • 接口自动化:新增 → 查询 → 修改 → 删除,顺序不能乱
  • 冒烟测试:优先执行核心主流程用例

pytest-order 就是专门解决这类问题的神器。


二、插件安装

指定版本安装,避免兼容性问题:

复制代码
pip install pytest-order==1.3.0

安装完成后,直接使用 @pytest.mark.order() 装饰器即可生效,无需其他配置。


三、基础用法:指定测试函数执行顺序

这是最常用、最简单的方式,直接在测试函数上方添加装饰器,数字越小,执行越早。

示例代码(你的核心示例)

python 复制代码
import pytest

# 标记第一个执行
@pytest.mark.order(1)
def test_one():
    assert True

# 标记第二个执行
@pytest.mark.order(2)
def test_two():
    assert True

执行结果

复制代码
collected 2 items

cases/test_order.py::test_one PASSED
cases/test_order.py::test_two PASSED

规则说明

  • order(数字):数字为正整数,越小执行越早
  • 未加标记的用例:默认在所有加标记的用例之后执行
  • 数字可以不连续(如 1、3、5),依然按从小到大执行

四、进阶用法:在测试类上使用顺序控制

pytest-order 不仅可以用于测试函数 ,还可以直接用于测试类,实现整个类的统一排序,类内部用例仍按默认顺序执行。

示例:类级别排序

python 复制代码
import pytest

# 整个类第一个执行
@pytest.mark.order(1)
class TestLogin:
    def test_login_by_password(self):
        assert True

    def test_login_by_sms(self):
        assert True

# 整个类第二个执行
@pytest.mark.order(2)
class TestOrder:
    def test_create_order(self):
        assert True

执行顺序

  1. TestLogin 类下所有用例
  2. TestOrder 类下所有用例

适用场景:按业务模块划分执行顺序(登录模块 → 订单模块 → 用户模块)。


五、高级用法:负数序号(后置用例)

除了正整数,pytest-order 支持负数序号 ,代表最后执行,数字越小(越负),执行越晚。

常用场景:清理数据、退出登录、关闭驱动等后置操作。

python 复制代码
import pytest

# 第一个执行
@pytest.mark.order(1)
def test_login():
    assert True

# 最后一个执行
@pytest.mark.order(-1)
def test_logout():
    assert True

# 倒数第二个执行
@pytest.mark.order(-2)
def test_clear_data():
    assert True

六、实战场景:GUI 自动化顺序控制

结合GUI 自动化,可直接套用的实战示例:

python 复制代码
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

@pytest.fixture(scope="session")
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    yield driver
    driver.quit()

# 1. 最先执行:打开页面
@pytest.mark.order(1)
def test_open_page(driver):
    driver.get("http://demo.com/login")
    assert "登录" in driver.title

# 2. 第二个执行:输入账号密码
@pytest.mark.order(2)
def test_input_info(driver):
    driver.find_element(By.ID, "username").send_keys("admin")
    driver.find_element(By.ID, "password").send_keys("123456")

# 3. 第三个执行:点击登录
@pytest.mark.order(3)
def test_click_login(driver):
    driver.find_element(By.ID, "loginBtn").click()

# 4. 最后执行:退出登录
@pytest.mark.order(-1)
def test_logout(driver):
    driver.find_element(By.ID, "logoutBtn").click()

执行顺序严格按照: 打开页面 → 输入信息 → 点击登录 → 退出登录

完美解决 GUI 自动化用例依赖问题!


七、pytest-order 核心规则总结

  1. 数字越小,执行越早:order(1) > order(2)
  2. 正数优先执行,未标记用例在中间执行
  3. 负数最后执行:order(-1) 最后一个,order(-2) 倒数第二个
  4. 支持函数、类、模块三级顺序控制
  5. 与 pytest 原生功能、fixture、parametrize 完全兼容

八、总结

pytest-order 是 pytest 生态中控制用例执行顺序最标准、最稳定的插件,是自动化测试项目必备工具。

核心知识点:

  1. 安装命令:pip install pytest-order==1.3.0
  2. 基础标记:@pytest.mark.order(数字)
  3. 正整数:优先执行,数字越小越早
  4. 负整数:最后执行,数字越小越晚
  5. 支持函数、测试类多级控制
  6. 完美适配 GUI 自动化、接口自动化的依赖场景

学会用例顺序控制,你的自动化用例执行稳定性会大幅提升,彻底避免 "因顺序错误导致的用例失败"!

相关推荐
鹏哥带你干乡墅30 分钟前
优选乡墅赋能培训平台如何帮助提升乡村建设?
大数据·人工智能·python
江畔柳前堤33 分钟前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Figo_Cheung44 分钟前
Figo基于RNC理论的宇宙演化第七纪元猜想
开发语言·php
veminhe1 小时前
python调用接口获取网络信息
python
泡海椒2 小时前
JQuick-Curl 二次开发:自定义解析器、扩展点开发指南,如何把框架能力真正变成团队资产
java·开发语言·okhttp·maven
Allen_LVyingbo2 小时前
医疗AI基础2026-构建可靠智能体的编程路径(上)
大数据·数据库·人工智能·python·自动化
WWJA王文举2 小时前
FreeRTOS事件组和任务通知详解:为什么任务通知比队列更轻量?
开发语言·php
Rnan-prince2 小时前
堆与TopK · 从零到通透 —— 9 节全系列复盘
python·算法
wuyk5553 小时前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法
吴声子夜歌3 小时前
ApacheCommons——commons-text(模板替换与文本算法)
java·开发语言·算法·apache