unittest框架 核心知识的系统复习及与pytest的对比

1. unittest 介绍

  • 是什么:Python 标准库自带的单元测试框架,遵循 xUnit 架构(类似Java的JUnit)。

  • 核心概念

    • TestCase:测试用例的基类,所有测试类需继承它。

    • TestSuite:测试套件,用于聚合多个测试用例。

    • TestLoader:加载测试用例。

    • TestRunner:执行测试并输出结果。

  • 适用场景:单元测试、集成测试,适合需要与Python标准库深度集成的项目。


2. 环境搭建

  • 无需安装:Python 自带,直接导入即可:

    python

    复制

    import unittest

3. 用例规则

  • 测试类:必须继承 unittest.TestCase

  • 测试方法:以 test_ 开头(如 test_login)。

  • 断言方法:使用 self.assertXxx()(如 self.assertEqual())。


4. 用例编写示例

python

复制

import unittest

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(1 + 1, 2)

    def test_multiply(self):
        self.assertTrue(2 * 3 == 6)

if __name__ == "__main__":
    unittest.main()

5. 断言方法

方法说明
self.assertEqual(a, b)断言 a == b
self.assertNotEqual(a, b)断言 a != b
self.assertTrue(x)断言 x 为 True
self.assertFalse(x)断言 x 为 False
self.assertIn(a, b)断言 a 在 b 中
self.assertRaises(Error)断言代码块抛出指定异常

6. 测试夹具(Setup/Teardown)

  • 类级别

    python

    复制

    @classmethod
    def setUpClass(cls):   # 类初始化(整个类执行前运行一次)
    @classmethod
    def tearDownClass(cls):# 类清理(整个类执行后运行一次)
  • 方法级别

    python

    复制

    def setUp(self):       # 每个测试方法执行前运行
    def tearDown(self):    # 每个测试方法执行后运行

7. 用例跳过

  • 无条件跳过

    python

    复制

    @unittest.skip("跳过原因")
    def test_skip(self):
        pass
  • 条件跳过

    python

    复制

    @unittest.skipIf(sys.platform == "win32", "Windows不支持")
    def test_linux_only(self):
        pass

8. 测试套件(TestSuite)

  • 手动聚合用例

    python

    复制

    suite = unittest.TestSuite()
    suite.addTest(TestMath("test_add"))
    suite.addTest(TestLogin("test_login"))
  • 自动发现用例

    python

    复制

    loader = unittest.TestLoader()
    suite = loader.loadTestsFromModule(test_module)  # 从模块加载
    suite = loader.loadTestsFromTestCase(TestMath)  # 从类加载

9. 参数化

  • 原生不支持:需借助第三方库 parameterized 或 ddt

  • 使用 ddt 示例

    python

    复制

    import ddt
    
    @ddt.ddt
    class TestDataDriven(unittest.TestCase):
        @ddt.data((1, 2, 3), (0, 0, 0))
        @ddt.unpack
        def test_add(self, a, b, expected):
            self.assertEqual(a + b, expected)

10. 与 pytest 的对比

特性unittestpytest
语法简洁性需继承 TestCase,断言方法较繁琐无需继承,直接使用 assert
参数化依赖第三方库(如ddt)原生支持 @pytest.mark.parametrize
夹具setUp/tearDown更灵活的 @pytest.fixture
插件生态较少丰富(如并发、Allure报告)
执行效率较低更高(支持并发)

11. 集成 HTMLTestRunner(生成测试报告)

步骤:

  1. 下载 HTMLTestRunner.py(非标准库,需单独放置)。

  2. 在代码中调用:

    python

    复制

    with open("report.html", "wb") as f:
        runner = HTMLTestRunner.HTMLTestRunner(
            stream=f,
            title="测试报告",
            description="用例执行详情"
        )
        runner.run(suite)

12. 生成测试报告

  • 控制台输出

    bash

    复制

    python -m unittest discover -s tests  # 自动发现并执行测试
  • XML 报告(用于CI集成):

    bash

    复制

    python -m unittest discover -s tests -p "test_*.py" -v > report.xml

总结

  • 适用场景:适合需要与Python标准库无缝集成的项目,或团队习惯xUnit风格。

  • 优势

    • 无需额外安装,兼容性强。

    • 清晰的类与方法结构。

  • 劣势:灵活性较低,扩展依赖第三方库。

  • 推荐搭配:结合 ddt(参数化)、coverage(覆盖率)、HTMLTestRunner(报告)提升效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive八股

Hive八股 说一下GC模型遇到过gc调优吗yarn有哪些了解讲讲hqI转化为MR源码hbase读写流程hive数据倾斜page cache和buffer的区别和相同近来你关注了大数据生态哪些领域的发展,比如新的feature,新的领域等 Hive1Hive1hive简介2hive架构3hive与Hadoop的关系4…

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台,专为实时日志收集、分析和可视化设计。它支持强大的搜索功能,并且与 Elastics…

im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略

随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…

MySQL(单表)知识点

文章目录 1.数据库的概念2.下载并配置MySQL2.1初始化MySQL的数据2.2注册MYSQL服务2.3启动MYSQL服务2.4修改账户默认密码2.5登录MYSQL2.6卸载MYSQL 3.MYSQL数据模型3.1连接数据库 4.SQL简介4.1SQL的通用语法4.2SQL语句的分类4.3DDL语句4.3.1数据库4.3.2表(创建,查询,修改,删除)4…

同为科技智能PDU在数据中心场景的应用与解决方案

数据中心当前处于一个快速发展和技术变革的特殊时期,全新的人工智能应用正在重塑整个世界,为社会带来便捷的同时,也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长,对数据中心提出了大算力、高性能的新需求&#xf…

基于Asp.net的零食购物商城网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Redis|Springboot集成Redis

文章目录 总体概述本地Java连接Redis常见问题集成Jedis集成lettuce集成RedisTemplate——推荐使用连接单机连接集群 总体概述 jedis-lettuce-RedisTemplate三者的联系 jedis第一代lettuce承上启下redistemplate着重使用 本地Java连接Redis常见问题 bind配置请注释掉保护模式…

【编译器】VSCODE编译C语言

【编译器】VSCODE编译C语言 文章目录 [TOC](文章目录) 前言一、下载配置二、代码1.main.c2.lanuch3.task 三、编译运行——方法一:编译器运行1.编译:终端-运行生成任务(ctrlshiftB)2.运行:运行-启动调试(F5…

信息安全访问控制、抗攻击技术、安全体系和评估(高软42)

系列文章目录 信息安全访问控制、抗攻击技术、安全体系和评估 文章目录 系列文章目录前言一、信息安全技术1.访问控制2.抗攻击技术 二、欺骗技术1.ARP欺骗2.DNS欺骗3.IP欺骗 三、抗攻击技术1.端口扫描2.强化TCP/IP堆栈 四、保证体系和评估1.保证体系2.安全风险管理 五、真题在…

1 、六气概念-六气内涵

复泰中医体系里,木火土金水,属于传统中医理论的5分法。 有六气:厥阴风木、少阴君火、少阳相火、太阴湿土、阳明燥金、太阳寒水,属于6分法。 五行的体系用在补虚的体系里。 六气的体系用于泻实的体系里。 一、六气概念 天有六气&a…

svn删除所有隐藏.svn文件,文件夹脱离svn控制

新建一个文件,取名remove-svn-folders.reg,输入如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] "Delete SVN Folders" [HKEY_LOCAL_MACHINE\SOFTWARE\Class…

【Python 数据结构 10.二叉树】

目录 一、二叉树的基本概念 1.二叉树的定义 2.二叉树的特点 3.特殊的二叉树 Ⅰ、斜树 Ⅱ、满二叉树 Ⅲ、完全二叉树 Ⅳ、完全二叉树和满二叉树的区别 4.二叉树的性质 5.二叉树的顺序存储 Ⅰ、完全二叉树 Ⅱ、非完全二叉树 Ⅲ、稀疏二叉树 6.二叉树的链式存储 7.二叉树的遍历概念…

Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...

问题描述 3月6日,在使用Windsuf 时,遇到以下网络连接错误: [unavailable] unavailable: dial tcp 35.223.238.178:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of…

Hadoop八股

Hadoop八股 HadoopMapReduce考点MR on Yarn 分布式工作原理shuffle:MapTask 和 ReduceTask的处理流程MR中的MapTask 和 ReduceTask 的数量决定MR和Spark两者Shuffle的区别简单讲一下map- reduce 原理**MapReduce 的核心概念****MapReduce 的工作流程****MapReduce 的…

Android15请求动态申请存储权限完整示例

效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm

10.RabbitMQ集群

十、集群与高可用 RabbitMQ 的集群分两种模式,一种是默认集群模式,一种是镜像集群模式&#xff1b; 在RabbitMQ集群中所有的节点(一个节点就是一个RabbitMQ的broker服务器) 被归为两类:一类是磁盘节点,一类是内存节点&#xff1b; 磁盘节点会把集群的所有信息(比如交换机、绑…

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术&#xff0c;所以首先需要配置一个后端服务&#xff0c;可以使用node.js和express。 首先生成一个空项目&#xff0c;新建main目录…

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…

PyTorch系列教程:编写高效模型训练流程

当使用PyTorch开发机器学习模型时&#xff0c;建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件&#xff0c;并演示如何构建一个精细的训练循环流程&#xff0c;有效地处理数据处理&#xff0c;向前和向后…

PX4中的DroneCAN的实现库Libuavcan及基础功能示例

简介 Libuavcan是一个用C编写的可移植的跨平台库&#xff0c;对C标准库的依赖小。它可以由几乎任何符合标准的C编译器编译&#xff0c;并且可以在几乎任何体系结构/OS上使用。 在 DroneCAN 中&#xff0c;Libuavcan 有一个 DSDL 编译器&#xff0c;将 DSDL 文件转换为 hpp 头…