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实现类继承实例
Jul 04 Python
Python入门篇之对象类型
Oct 17 Python
Python实现的批量下载RFC文档
Mar 10 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
Python 列表理解及使用方法
Oct 27 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
python中Lambda表达式详解
Nov 20 Python
python将时分秒转换成秒的实例
Dec 07 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 Python
python全面解析接口返回数据
Feb 12 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安装攻略:常见问题解答(二)
2006/10/09 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Python tkinter三种布局实例详解
2020/01/06 Python
PyQt5实现简单的计算器
2020/05/30 Python
python中的yield from语法快速学习
2020/11/06 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
推广普通话演讲稿
2014/05/23 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
职位证明模板
2015/06/23 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js