pytest和unittest的区别

pytestunittest 是 Python 中常用的两个测试框架。以下是对 pytestunittest 的详细对比和说明:
 

目录

1. 简洁性和易用性

2. 灵活性和特性

3. 断言机制

4. 插件和扩展

5. 参数化测试


1. 简洁性和易用性

unittest

  • 风格unittest 是基于 xUnit 风格的测试框架,类似于 Java 的 JUnit 和其他一些编程语言中的测试框架。

  • 类和方法unittest 强制要求你使用类和方法来定义测试,这可能在编写简单测试时显得繁琐。

  • 测试结构:典型的 unittest 测试用例如下:

    import unittest
    
    class TestMath(unittest.TestCase):
    
        def test_addition(self):
            self.assertEqual(1 + 1, 2)
    
        def test_subtraction(self):
            self.assertEqual(2 - 1, 1)
    
    if __name__ == '__main__':
        unittest.main()

pytest

  • 简洁性pytest 允许你编写更加简洁和直观的测试用例,无需继承任何类。

  • 函数级别测试:你可以直接用函数来编写测试用例,不需要使用类。

  • 测试结构:典型的 pytest 测试用例如下:

    def test_addition():
        assert 1 + 1 == 2
    
    def test_subtraction():
        assert 2 - 1 == 1
    
    if __name__ == '__main__':
        pytest.main()

2. 灵活性和特性

unittest

  • 标准库unittest 是 Python 标准库的一部分,无需额外安装,可以直接使用。

  • 继承机制:可通过继承 unittest.TestCase 进行测试复用。

  • 测试发现:支持通过命令行进行测试发现和运行(python -m unitttes discover
    )。

pytest

  • 丰富的插件系统pytest 有丰富的插件生态系统,可以通过插件扩展功能。

  • 参数化测试:非常容易进行参数化测试,这在数据驱动测试中尤其有用。

  • 更好的断言信息pytest 提供更详细和友好的断言失败信息。

  • 强大的 fixturepytest 提供了一种强大的 fixture 机制,可以用于设置和清理测试环境。

3. 断言机制

unittest

  • 特定断言方法:使用特定的断言方法,需要记住不同的断言方法名称。

    self.assertEqual(a, b)
    self.assertTrue(x)
    self.assertIsNone(y)

pytest

  • Python 内置断言:直接使用 Python 内置的断言语句即可,失败时会提供详细的断言信息。

    assert a == b
    assert x
    assert y is None

4. 插件和扩展

unittest

  • 通过额外的库和手动设置添加功能,但整体插件和扩展支持相对较弱。

pytest

  • 插件生态系统丰富:拥有广泛的插件支持,可以添加代码覆盖率报告、并行测试、测试数据生成等。示例如下:

    pip install pytest-cov
    pytest --cov=myproject tests/

5. 参数化测试

unittest

  • 需要使用子类化测试用例或者使用 unittest 提供的扩展库来进行参数化测试。

    import unittest
    from parameterized import parameterized
    
    class TestMath(unittest.TestCase):
    
        @parameterized.expand([
            (1, 1, 2),
            (2, 2, 4),
            (2, 1, 3),
        ])
        def test_addition(self, a, b, expected):
            self.assertEqual(a + b, expected)

pytest

  • 通过 pytest.mark.parametrize 轻松实现参数化测试。

    import pytest
    
    @pytest.mark.parametrize("a, b, expected", [
        (1, 1, 2),
        (2, 2, 4),
        (2, 1, 3),
    ])
    def test_addition(a, b, expected):
        assert a + b == expected

总结

  • unittest:适合更严谨的 xUnit 风格测试,内置于标准库,适合更传统的单元测试用例,具有一定的约束性和规则性。

  • pytest:现代化的测试框架,简洁,灵活,强大的插件和参数化机制,适用于快速编写和扩展测试,尤其是在现代 Python 开发环境中。

总的来说 ,根据项目需求和团队的习惯,选择最适合的测试框架即可 一直用unittes的同学 如果进入新公司或者新项目要求用pytest框架写脚本 也不用担心 简单好上手 🙂

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

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

相关文章

MySQL事件功能简介

MySQL 的事件调度器(Event Scheduler)提供了一种便捷的方法来定时执行 SQL 语句,从而实现数据维护、报告生成等自动化操作。本文将详细介绍 MySQL 的事件功能,并说明如何使用 Navicat 管理这些事件。 1. 什么是 MySQL 事件调度器…

高光谱相机的特点

光谱特性 高光谱分辨率:能将光谱范围分割成极窄的波段,光谱分辨率通常达到纳米级甚至亚纳米级,可精确捕捉到不同物质在细微光谱差异上的特征,比如可以区分不同种类的植被因叶绿素含量等差异而在光谱上的细微变化。 多波段探测&a…

备考蓝桥杯:数据结构概念浅谈

目录 1数据结构的概念 什么是数据结构: 为什么要有数据结构 2.数据结构的三个组成要素 1.逻辑结构 2.存储结构 3.数据运算 3。算法好坏的度量(时间复杂度和空间复杂度) 时间复杂度计算 最优和平均和最差时间复杂度 计算时间复杂度例子 空间复…

闲谭SpringBoot--ShardingSphere分库分表探究

文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文,我们对日志表,进行了按月的分表,这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢,除了提高硬件性能,还有一…

基于伪分布式模式部署Hadoop集群

1.上传Hadoop安装包 在/export/software目录下使用rz命令上传Hadoop安装包 2.创建目录 在/export/servers目录下创建wfb-hadoop目录,用于存放Hadoop的安装目录,命令如下: mkdir -p /export/servers/wfb-hadoop 3.安装Hadoop 1)将Hadoop安…

Android车载音频系统目录

目录 第一章 1.1 Android Automotive(一) 1.2 Android Automotive(二) 1.3 Android Automotive(三) 第二章 2.1 Android车载音频系统概览 2.2 车载音频焦点 2.3 车载音频配置 2.4 Audio control HAL…

怎么管理电脑usb接口,分享四种USB端口管理方法

怎么管理电脑usb接口,分享四种USB端口管理方法 USB接口作为电脑重要的外部接口,方便了数据传输和设备连接。 然而,不加管理的USB接口也可能带来安全隐患,例如数据泄露、病毒传播等。 因此,有效管理电脑USB接口至关重…

React+redux项目搭建流程

1.创建项目 create-react-app my-project --template typescript // 创建项目并使用typescript2.去除掉没用的文件夹,只保留部分有用的文件 3.项目配置: 配置项目的icon 配置项目的标题 配置项目的别名等(craco.config.ts&…

conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb

1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1)创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2)设置密码 3)设置参数 直接将以下参数修改为自己的配置后复制到配置文件…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

【江协STM32】9-1/2/3 USART串口协议、USART外设、串口发送串口发送+接收

1. 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发全双工&#xff1a;指通信双方能够同时进行双向通信。发送线路和接收线路互不影响&#xff0c…

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

第一篇-STM32智能小车硬件介绍 后续章节也放这里 持续更新中&#xff0c;视频发布在小B站 里面。这边也会更新。 B站视频合集: STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 小B站链接:https://www.bilib…

【网络】电路交换(Circuit Switching)、报文交换(Message Switching)和分组交换(Packet Switching)

电路交换&#xff08;Circuit Switching&#xff09;&#xff1a;一条专用的通信线路&#xff08;或电路&#xff09;&#xff08; 电话专用线路&#xff0c;好处&#xff1a;专用稳定&#xff0c;有没有数据都被占用&#xff0c;坏处&#xff1a;容易浪费&#xff09; 报文交换…

Pixel 6a手机提示无法连接移动网络,打电话失败!

1、开启VoLTE 2、如果没有&#xff0c;下载shizuku和PixelIMS应用。 shizuke Releases RikkaApps/Shizuku GitHub PixellMS Release v1.2.8 kyujin-cho/pixel-volte-patch GitHub 3、安装shizuke启动&#xff0c;开通root可以直接点击下面的启动&#xff0c;如果没有就…

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…

DC/AC并网逆变器模型与仿真MATLAB

DC/AC并网逆变器是一种将直流电&#xff08;DC&#xff09;转化为交流电&#xff08;AC&#xff09;&#xff0c;并将其与电网并联的设备。它的核心功能是实现直流电源&#xff08;如光伏电池板或储能电池&#xff09;与电网的有效连接&#xff0c;同时保证输出电能质量满足电网…

作业:IO:day2

题目一 第一步&#xff1a;创建一个 struct Student 类型的数组 arr[3],初始化该数组中3个学生的属性 第二步&#xff1a;编写一个叫做save的函数&#xff0c;功能为 将数组arr中的3个学生的所有信息&#xff0c;保存到文件中去&#xff0c;使用fread实现fwrite 第三步&#xf…

环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降

《港湾商业观察》施子夫 2024年12月18日&#xff0c;浙江环动机器人关节科技股份有限公司&#xff08;以下简称&#xff0c;环动科技&#xff09;的上市审核状态变更为“已问询”&#xff0c;公司在11月25日科创板IPO获上交所受理&#xff0c;独家保荐机构为广发证券。 此次环…

【数据可视化-11】全国大学数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

SAP 02-AMDP Functions for CDS Table Functions

1. 创建一个Core Data Service Table Functions 新建 Core Data Service Table Function 定义CDS Table Functions EndUserText.label: a simple AMDP for CDS Table Functions ClientDependent: true //打开 Open SQL 的自动客户端处理 defin…