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 09 Python
详细讲解Python中的文件I/O操作
May 24 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
python实现决策树分类(2)
Aug 30 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
Django框架自定义session处理操作示例
May 27 Python
pycharm运行scrapy过程图解
Nov 22 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
在pycharm中创建django项目的示例代码
May 28 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
Yii框架日志操作图文与实例详解
2019/09/09 PHP
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
在python中用url_for构造URL的方法
2019/07/25 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
 Alo Yoga官网:购买瑜伽服装
2018/06/17 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
后备干部培训方案
2014/05/22 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
新生入学欢迎词
2015/01/26 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
教师节主持词开场白
2015/05/29 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
详解JS数组方法
2021/11/20 Javascript
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS