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 自动化、接口自动化的依赖场景

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

相关推荐
三品吉他手会点灯2 小时前
C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
c语言·开发语言·笔记·学习
闵孚龙3 小时前
动态图机制:为什么 PyTorch 调试起来更舒服
人工智能·pytorch·python
chushiyunen4 小时前
langchain4j笔记、tools
笔记·python·flask
程序员三藏5 小时前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
在放️5 小时前
Python 爬虫 · 第三方代理接入与合规使用
开发语言·爬虫·python
KANGBboy5 小时前
java知识五(继承)
java·开发语言
c++之路5 小时前
Bazel C++ 构建系列文档(三):构建第一个 C++ 项目
开发语言·c++
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试
财经资讯数据_灵砚智能6 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月14日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
聚名网6 小时前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php