unittest 案例执行顺序详解

unittest 案例执行顺序详解

unittest 框架中,测试用例的执行顺序有默认规则,也可通过自定义方式调整。以下是具体说明:

一、默认执行顺序规则

unittest 对测试用例的执行顺序遵循 “按测试方法名的 ASCII 码排序” 原则,具体逻辑如下:

  1. 测试类内部:所有以 test 开头的方法(如 test_logintest_register)会按方法名的字母 / 数字顺序执行。
  2. 多个测试类:若一个模块中有多个测试类(如 TestLoginTestPay),类名会先按 ASCII 码排序,再执行类内部的测试方法。

示例

import unittest

class TestOrder(unittest.TestCase):

    def test_3(self):

        print("执行 test_3")

    def test_1(self):

        print("执行 test_1")

    def test_2(self):

        print("执行 test_2")

if __name__ == "__main__":

    unittest.main()

执行结果(按方法名排序):

执行 test_1

执行 test_2

执行 test_3

二、影响执行顺序的因素

  1. 方法名命名规范

若方法名未遵循有序命名(如 test_atest_b 或 test_01test_02),可能导致执行顺序混乱。例如:

def test_login(self): ...    # 可能在 test_register 之后执行(因 'l' 在 'r' 之后)

def test_register(self): ...

  1. 测试类加载顺序

模块中多个测试类的执行顺序由类名的 ASCII 码决定。例如:

class TestB(unittest.TestCase):  # 类名 'TestB' 会在 'TestA' 之后执行

    def test_b1(self): ...

class TestA(unittest.TestCase):  # 先执行

    def test_a1(self): ...

  1. 继承或混入类

若测试类继承了其他类,父类中的测试方法会优先于子类方法执行(同样按方法名排序)。

三、自定义执行顺序的方法

若需按业务逻辑指定执行顺序(如先登录后下单),可通过以下方式实现:

方法 1:按命名规则手动排序

通过命名规范控制顺序,推荐用 数字前缀 明确顺序:

class TestOrder(unittest.TestCase):

    def test_01_login(self):    # 第 1 执行

        print("登录")

    def test_02_add_cart(self): # 第 2 执行

        print("加入购物车")

    def test_03_pay(self):      # 第 3 执行

        print("支付")

方法 2:使用 unittest.TestSuite 手动添加用例

通过 TestSuite 按指定顺序逐个添加测试用例,完全掌控执行流程:

import unittest

class TestShop(unittest.TestCase):

    def test_login(self):

        print("登录")

    def test_add_cart(self):

        print("加入购物车")

    def test_pay(self):

        print("支付")

if __name__ == "__main__":

    # 创建测试套件

    suite = unittest.TestSuite()

    # 按顺序添加测试方法(注意:方法名需用字符串传入)

    suite.addTest(TestShop("test_login"))

    suite.addTest(TestShop("test_add_cart"))

    suite.addTest(TestShop("test_pay"))

    # 执行套件

    unittest.TextTestRunner().run(suite)

执行结果(严格按添加顺序):

登录

加入购物车

支付

方法 3:使用第三方库(如 unittest-ordering

通过装饰器指定顺序,需先安装库:

pip install unittest-ordering

使用示例:

from unittest import TestCase

from unittest_ordering import ordered

class TestOrder(TestCase):

    @ordered(-1)  # 数字越小越先执行

    def test_login(self):

        print("登录")

    @ordered(0)

    def test_add_cart(self):

        print("加入购物车")

    @ordered(1)

    def test_pay(self):

        print("支付")

四、注意事项

  1. 避免依赖执行顺序

单元测试的最佳实践是 “用例独立无依赖”,即每个测试用例应能单独运行,不依赖其他用例的执行结果(例如:每个用例开始前通过 setUp() 初始化环境,结束后用 tearDown() 清理)。

  1. setUp() 和 tearDown() 的执行时机
    • setUp():每个测试方法执行前都会调用(如每个用例前初始化浏览器)。
    • tearDown():每个测试方法执行后都会调用(如每个用例后关闭浏览器)。

它们的执行顺序不受测试方法顺序影响,只与所属方法绑定。

  1. 批量执行多个模块

若通过 discover 批量加载多个模块的用例,模块文件名将先按 ASCII 码排序,再执行模块内的用例。

五、总结

  • 默认顺序:按测试方法名 / 类名的 ASCII 码排序。
  • 自定义顺序:通过命名规范、TestSuite 手动添加或第三方库实现。
  • 最佳实践:保持用例独立性,如需依赖顺序,优先用 TestSuite 明确控制。

通过以上方式,可根据项目需求灵活控制 unittest 测试用例的执行顺序。如果需要结合具体业务场景优化执行流程,可以补充细节进一步分析~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web大前端】001_前端开发入门:创建你的第一个网页

前端开发入门:创建你的第一个网页 在当今数字化时代,网页已经成为人们获取信息和交流的重要平台。对于想要学习编程的人来说,前端开发往往是一个不错的起点。本文将带你通过简单的两步,创建属于你的第一个网页程序。 点击这里去…

HTTP性能优化终极指南:从协议原理到企业级实践

前言:为什么性能优化是Web开发的生命线?根据Google研究数据,当页面加载时间从1秒增加到3秒时,跳出率提升32%;当达到5秒时,转化率下降90%。本文将通过七层优化体系,带您掌握HTTP性能优化的核心技…

Python 数据分析(二):Matplotlib 绘图

目录 1. 简介2. 绘图 2.1 折线图 2.1.1 单线2.1.2 多线2.1.3 子图 2.2 散点图2.3 直方图2.4 条形图 2.4.1 纵置2.4.2 横置2.4.3 多条 2.5 饼图 1. 简介 Matplotlib 是 Python 提供的一个绘图库,通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰…

Scrapy分布式爬虫数据统计全栈方案:构建企业级监控分析系统

引言:数据统计在分布式爬虫中的战略价值在分布式爬虫系统中,​​数据统计与分析​​是系统优化的核心驱动力。根据2023年爬虫工程调查报告:实施专业统计方案的爬虫系统性能提升​​40%以上​​数据驱动的优化策略可减少​​70%​​的资源浪费…

计划任务(at和cron命令介绍及操作)

简介计划任务主要做一些周期性的任务,目前最主要的是定期备份数据分类at:一次性调度执行cron:循环调度执行at简介at 是一个用于安排一次性任务的命令行工具,适合在指定时间点执行单次任务语法at 时间 选项若要提交,通过…

[2025CVPR:图象合成、生成方向]WF-VAE:通过小波驱动的能量流增强视频 VAE 的潜在视频扩散模型

论文概述​ 这篇论文提出了一种名为WF-VAE(Wavelet Flow VAE)​的新型视频变分自编码器(Video VAE),旨在解决潜在视频扩散模型(LVDM)中的关键瓶颈问题,包括高计算成本和潜在空间不连续性。WF-VAE利用小波变换(Wavelet Transform)来分解视频信号,并通过能量流路径优…

Map接口-实现类HashMap

目录 一、什么是Map? 二、实现类HashMap 1.关键特点 无序、key唯一、value允许重复、key和value允许为null。 2.数据结构 2.1 JDK 1.7 2.2 JDK 1.8 2.3 关键参数 2.4 关键计算 3.扩容方式 3.1 初始化 3.2 扩容 4.常见方法 4.1 根据key存入value 4.2 …

深入解析Hadoop如何实现数据可靠性:三副本策略、校验和验证与Pipeline复制

Hadoop数据可靠性的重要性在大数据时代,数据可靠性已成为企业数字化转型的生命线。根据IDC预测,到2025年全球数据总量将增长至175ZB,其中企业数据占比超过60%。面对如此庞大的数据规模,任何数据丢失或损坏都可能造成数百万美元的经…

15.6 DeepSpeed+Transformers实战:LLaMA-7B训练效率提升210%,显存直降73%

DeepSpeedTransformers实战:LLaMA-7B训练效率提升210%的底层逻辑与实操指南 当LLaMA-7B的训练显存需求达到78GB时,单卡A100(80GB)几乎濒临溢出,更不用说普通GPU集群。而DeepSpeed与Hugging Face Transformers的深度集成,通过"ZeRO三阶段优化+混合精度+梯度检查点&q…

Nginx + PM2 实现Express API + React 前端 本地测试服务器搭建

一、工具准备 openSSL:需要针对https请求头 生成对应的 自签名证书。 Nginx:服务器搭建工具 nodeJS: Express API运行环境 PM2: node进程管理器。用于替代npm命令管理 启动命令。 二、openSSL 本地自签名证书生成。 创建服务器空文件夹&#xff08…

OTG原理讲解

文章目录一、什么是 OTG(USB On-The-Go)?✅ OTG 的定义:二、传统 USB 与 OTG 的区别三、OTG 的核心机制:**通过 ID 引脚判断角色**1. 对于 Micro-USB OTG:2. 电路如何感知 ID 引脚?四、OTG 电路…

数据结构系列之红黑树

前言 红黑树是比较重要的一颗树了,map和set的底层就是红黑树,一定要牢牢记住。 一、什么是红黑树 首先:红黑树仍然是一颗搜索二叉树,但他引入了颜色这一概念,每个结点多一个存储位来存储颜色,它通过维护下…

在OpenMP中,#pragma omp的使用

在OpenMP中,#pragma omp for 和 #pragma omp parallel for(或 #pragma omp parallel num_threads(N))有本质区别,主要体现在 并行区域的创建 和 工作分配方式 上。以下是详细对比:1. #pragma omp for 作用 仅分配循环迭…

停止“玩具式”试探:深入拆解ChatGPT Agent的技术栈与实战避坑指南

摘要: 当许多人还在用ChatGPT写周报、生成样板代码时,其底层的Agent化能力已经预示着一场深刻的开发范式变革。这不再是简单的“AI辅助”,而是“人机协同”的雏形。本文旨在穿透表面的功能宣传,从技术栈层面拆解Agent模式的实现基…

element-plus安装以及使用

element-plus时为vue.js 3开发的组件库。 在引入前需要做如下准备 安装node.js https://blog.csdn.net/zlpzlpzyd/article/details/147704723 安装vue的脚手架vue-cli https://blog.csdn.net/zlpzlpzyd/article/details/149647351 安装element-plus github地址 https://git…

学习随想录-- web3学习入门计划

#60 转方向 web3 golang 以太坊应用 这是课表部分(Golang以太坊方向) Sheet b站up学习计划 第一阶段:基础能力构建(1-2 个月) 学习目标 掌握 Golang 核心语法与以太坊底层基础概念,建立开发知识框架。…

【RAG优化】PDF复杂表格解析问题分析

在构建检索增强生成(RAG)应用时,PDF文档无疑是最重要、也最普遍的知识来源之一。然而,PDF中潜藏着RAG系统的难点问题——复杂表格。这些表格富含高密度的结构化信息,对回答精准问题至关重要,但其复杂的视觉布局(多层表头、合并单元格、跨页表格等)常常让标准的文本提取…

ReAct Agent(LangGraph实现)

文章目录参考资料一 AI Agent二 ReAct三 LangGraph实现ReAct代理3.1 SerperAPI实时联网搜索3.2 ReAct实现参考资料 entic RAG 架构的基本原理与应用入门 一 AI Agent AI Agent 整个过程是一个动态循环。Agent不断从环境中学习,通过其行动影响环境,然后…

如何从0到1的建立组织级项目管理体系【现状诊断】

今天我想给大家分享是“如何在企业中从0到1的去建立PMO的组织级项目管理体系。”的系列文章,这是我近几年来一直在努力的尝试去探索和实践的过程,从0到1的过程。当我最开始去接手这样一个场景的时候所需要做的第一件事情是诊断和差距分析。这是多年以来做…

网络通信协议详解:TCP协议 vs HTTP协议

在计算机网络中,TCP(传输控制协议)和HTTP(超文本传输协议)是两个核心协议,但它们的职责和层级完全不同。TCP是底层传输协议,负责数据的可靠传输;HTTP是应用层协议,定义了…