如何选择Python测试框架:pytest和unittest

unittest

unittest是Python标准库中自带的测试框架,它遵循了xUnit风格,即将测试组织成类和方法。

使用unittest需要遵循一定规则:

  • 必须要有测试类,且必须继承unittest.TestCase
  • 测试方法必须以test开头
  • 文件模块也使用test开头命名

其优点有:

  • 兼容性好:不需要安装任何额外的包,可以在任何Python环境中使用;
  • 结构化清晰:将测试分为三个阶段:setUp,test和tearDown,这样可以方便地设置和清理测试环境,以及管理测试依赖;

在python3.1版本后也增加了支持:跳过测试与预计的失败(Skipping tests and expected failures),例如:unittest.skipunittest.skipIfunittest.expectedFailure

通过执行python -m unittest运行测试用例。

具体使用说明详见 官网文档

pytest

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点(详见 官网文档):

    1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
    1. 能够支持简单的单元测试和复杂的功能测试
    • 支持使用assert语句来检查结果,而不需要使用特定的断言方法
    1. 支持参数化
    1. 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
    • 这点在python3.1版本开始,unittest也支持了测试跳过
    1. 支持重复执行失败的case
    1. 支持运行由nose, unittest编写的测试case
    • 关于兼容unittest可以详见
    1. 具有很多第三方插件,并且可以自定义扩展
    • 可选插件列表,社区非常活跃
    1. 方便持续集成
    • pytest+allure+jenkins进行接口测试、生成测试报告、结合jenkins进行集成

个人在项目使用过程中,觉得好用的一些功能有:

  • 不用定义类,直接定义test方法、直接使用assert进行断言判断;
  • 兼容unittest的测试用例
  • 参数化@pytest.mark.parametrize,在同一个测试函数上,运行不同的输入参数;
  • @pytest.fixture可以定义全局变量,用于作为测试用例的测试输入参数;
  • 有很多扩展插件可以使用
    • pytest-cov 测试覆盖度
    • pytest-xdist 并行运行测试用例
    • pytest-ordering 设定执行顺序
    • pytest-rerunfailures 失败重试
    • pytest-django Django相关

综上所述

pytest和unittest都有各自的优势和劣势。

在常规项目中,个人推荐使用pytest,毕竟pytest是一个简单易用且功能强大的测试框架。

如果你想要一个稳定兼容且结构化清晰的测试框架,你可以选择unittest。

无论你选择哪个框架,测试的目的是保证代码质量和可维护性,测试框架只是手段之一。

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

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

相关文章

【NI 国产替代】cDAQ-9178, 8槽USB CompactDAQ机箱,国产数据采集卡控制器进口替代方案

8槽USB CompactDAQ机箱 cDAQ-9178是专为小型便携式传感器测量系统而设计的总线供电CompactDAQ USB机箱。机箱通过即插即用的USB可轻松连接传感器和电气测量。该机箱还可控制C系列I/O模块与外部主机之间的定时、同步和数据传输。机箱可以搭配不同的C系列I/O模块组合&#xff0c…

【C++】cin输入和cout输出

cin和cout简介 cin可以从键盘中读取数据,cout可以把数据打印到显示器上,cout配合endl可以打印换行符。cin、cout和endl是在iostream头文件内声明的,使用时必须#include包含iostream头文件。cin、cout和endl都在命名空间std里,参考…

区块链交易所开发

在当今数字化时代,区块链技术以其独特的去中心化、安全性和透明性,正在逐步改变我们的生活。其中,区块链交易所作为连接区块链技术与广大投资者的桥梁,其开发与发展备受关注。本文将从技术进步与市场需求两个维度,探讨…

抖音小店达人佣金应该怎么结算呢?给达人设置多少佣金合适?

大家好,我是电商小V 咱们在运营抖音小店的时候一定会遇到被达人催促结算佣金的情况,咱们给达人合作的时候都会遇到过新手达人,就是给咱们直播带货之后催促咱们赶紧结算商品的佣金, 但是咱们都需要知道一点,那就是小店的…

VTK —— 三、简单操作 - 示例2 - 计算从3D点到直线的距离(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功,若无VTK库则请先参考如下链接编译vtk源码: VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码) 教程描述 本…

跟TED演讲学英文:How to govern AI — even if it‘s hard to predict by Helen Toner

How to govern AI — even if it’s hard to predict Link: https://www.ted.com/talks/helen_toner_how_to_govern_ai_even_if_it_s_hard_to_predict? Speaker: Helen Toner Date: April 2024 文章目录 How to govern AI — even if its hard to predictIntroductionVocabu…

Hadamard Product(点乘)、Matmul Product(矩阵相乘)和Concat Operation(拼接操作)在神经网络中的应用

Hadamard乘积(Hadamard Product),矩阵乘法(Matmul Product)和拼接操作(Concatenation Operation)在神经网络中的使用情况如下: Hadamard Product点乘、内积: Hadamard乘…

编程入门(六)【Linux系统基础操作一】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀Linux操作系统介绍与环境准备Linux操作系统介…

Kafka源码分析(五) - Server端 - 基于时间轮的延时组件

系列文章目录 Kafka源码分析-目录 一. 背景 Kafka内部涉及大量的"延时"操作,比如收到PRODUCE请求后可为副本等待一个timeout的时间后再响应客户端。 那我们讨论一个问题:Kafka为什么自己实现了一个延时任务组件,而不直接使用ja…

《从Paxos到Zookeeper》——第五、六章:经典应用场景

目录 第五章 使用Zookeeper 5.1 服务端部署与运行 5.2 客户端相关 5.2.1 客户端运行 5.2.2 客户端命令 5.3 Java客户端API 5.4 开源客户端 第六章 经典应用场景 6.1 典型应用场景及实现 6.1.1 数据发布/订阅(全局配置中心) 6.1.2 负载均衡(Lo…

ChatGPT Web Midjourney一键集成最新版

准备工具 服务器一台 推荐使用浪浪云服务器 稳定 安全 有保障 chatgpt api 推荐好用白嫖的api 项目演示 项目部署 浏览器访问casaos 添加软件原添加 https://gitee.com/langlangy_1/CasaOS-AppStore-LangLangy/raw/master/chatmjd.zip 安装此软件 等待安装 安装后再桌面设置…

什么是模版方法模式,有哪些应用?

模板方法模式是一种行为设计模式,他的主要作用就是复用代码。在很多时候,我们的代码中可能会有-些公共的部分并且还有一些定制的部分,那么公共这部分就可以定义在一个父类中,然后将定制的部分实现在子类中。这样子类可以根据需要扩…

TRIZ理论助力充电桩产业跨越技术瓶颈,实现产业升级!

随着新能源汽车市场的迅猛发展和电动汽车保有量的不断增加,充电桩作为电动汽车的“能量补给站”,其重要性日益凸显。然而,充电桩产业在发展过程中也面临着诸多技术瓶颈,如何突破这些瓶颈,推动充电桩产业升级成为行业亟…

《Video Mamba Suite》论文笔记(2)Mamba对于多模态交互的作用

原文翻译 4.2 Mamba for Cross-Modal Interaction Tasks and datasets.除了单模态任务外,我们还评估了 Mamba 在跨模态交互方面的性能。我们首先使用视频时间定位 (Video Temporal Grounding) 任务进行评估。所涉及的数据集包含 QvHighlight [44] 和 Charade-STA …

Vue阶段练习:初始化渲染、获取焦点、记账清单

阶段练习主要承接Vue 生命周期-CSDN博客 ,学习完该部分内容后,进行自我检测,每个练习主要分为效果显示、需求分析、静态代码、完整代码、总结 四个部分,效果显示和准备代码已给出,我们需要完成“完整代码”部分。 练习…

交直流充电桩测试系统解决方案,你了解多少?

交直流充电桩测试系统是电动汽车充电设施的重要组成部分,它对充电桩的性能、安全性和可靠性进行全方位的检测和评估。随着电动汽车的普及,充电桩测试系统的需求也在不断增加。本文将对交直流充电桩测试系统的解决方案进行简要介绍。 1. 系统组成 交直流…

微信小程序如何使用svg矢量图标

微信小程序如何使用自定义SVG矢量图标 在微信小程序中,经常会用到小图标来装饰界面,我们常用的方法就是引用第三方的图标,但会存在收费或者找不到合适的图标,这时候我建议可以自行编写svg图标代码,就可以随心所欲的使…

纯干货,源代码防泄密之环境加密与文档加密的区别

环境加密和文档加密是两种不同的数据保护方法,下面用SDC沙盒及文档加密系统作对比,它们在设计理念、管控对象、安全性、性能以及适用场景等方面有所区别: 来百度APP畅享高清图片 1、设计理念: 环境加密(如SDC沙盒&am…

JavaScript继承的方法和优缺点

原型链继承 让一个构造函数的原型是另一个类型的实例,那么这个构造函数new出来的实例就具有该实例的属性。 优点: 写法方便简洁,容易理解。 缺点: 在父类型构造函数中定义的引用类型值的实例属性,会在子类型原型上…

华中科技大学雷达站部署

一:项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二:安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成,所以创建虚拟环境的时候,选择3.8的虚拟环境 conda create -…
最新文章