Python 测试框架unittest和pytest的优劣


Posted in Python onSeptember 26, 2020

一、Unittest

Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。

Unittest支持自动化测试,测试用例的初始化、关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起。

示例:

Python 测试框架unittest和pytest的优劣

运行结果

Python 测试框架unittest和pytest的优劣

注:unittest有一个关联模块unittest2,但unittest2仅适用于Python 2.4-2.6。这是由于从Python 2.7开始,unittest增加一些新的特性。为了在老的版本中支持这些特性,所以提供了unittest2这个库。但对于Python 2.7及之后的版本,unittest是唯一的。本次示例中使用的为python2.7。

二、Pytest

Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。

pytest的特性有:

  • 支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
  • 自动识别测试模块和测试函数
  • 模块化夹具用以管理各类测试资源
  • 对 unittest 完全兼容,对 nose基本兼容
  • 支持Python3和PyPy3
  • 丰富的插件生态,已有300多个各式各样的插件,社区繁荣

示例:

Python 测试框架unittest和pytest的优劣

执行结果:

Python 测试框架unittest和pytest的优劣

三、Unittest vs Pytest

unittest pytest
用例编写规则 1)测试文件必须先import unittest 2)测试类必须继承unittest.TestCase 3)测试方法必须以“test_”开头 4)测试类必须要有unittest.main()方法 1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py) 2)测试方法必须以“test_”开头 3)测试类命名以"Test"开头
用例分类执行 默认执行全部用例,也可以通过加载testsuit,执行部分用例 可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法
用例前置和后置 提供了setUp/tearDown,只能针对所有用例 pytest中的fixture显然更加灵活。可以任意自定义方法函数,只要加上@pytest.fixture()这个装饰器,那么被装饰的方法就可以被使用
参数化 需依赖ddt库 使用@pytest.mark.parametrize装饰器
断言 很多断言格式(assertEqual、assertIn、assertTrue、assertFalse) 只有assert一个表达式,用起来比较方便
报告 使用HTMLTestRunnerNew库 有pytest-HTML、allure插件
失败重跑 无此功能 pytest支持用例执行失败重跑,pytest-rerunfailures插件

总结:

总体来说,unittest用例格式复杂,兼容性无,插件少,二次开发方便。pytest更加方便快捷,用例格式简单,可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。pytest插件丰富,比如flask插件,可用于用例出错重跑,还有xdist插件,可用于设备并行执行,效率更高。

以上就是Python 测试框架unittest和pytest的优劣的详细内容,更多关于Python unittest和pytest的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
进一步理解Python中的函数编程
Apr 13 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python获取当前路径实现代码
May 08 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
python动态文本进度条的实例代码
Jan 22 Python
基于Python实现将列表数据生成折线图
Mar 23 Python
浅析python函数式编程
Sep 26 #Python
python用Configobj模块读取配置文件
Sep 26 #Python
Python内存泄漏和内存溢出的解决方案
Sep 26 #Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 #Python
如何使用Python调整图像大小
Sep 26 #Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 #Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 #Python
You might like
第六章 php目录与文件操作
2011/12/30 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python多任务之协程的使用详解
2019/08/26 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python实现3D地图可视化
2020/03/25 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
大二学生学习个人自我评价
2014/01/19 职场文书
党性心得体会
2014/09/03 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
入团介绍人意见范文
2015/06/04 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js