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查看zip包中文件及大小的方法
Jul 09 Python
详解flask入门模板引擎
Jul 18 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
tensorflow 模型权重导出实例
Jan 24 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
解决Python安装cryptography报错问题
Sep 03 Python
python基于turtle绘制几何图形
Jun 15 Python
Django Paginator分页器的使用示例
Jun 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进行MySQL删除记录操作代码
2008/06/07 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
PHP学习之整理字符串
2011/04/17 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
js代码实现微博导航栏
2015/07/30 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
Python基于贪心算法解决背包问题示例
2017/11/27 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
python3 使用traceback定位异常实例
2020/03/09 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
车间组长岗位职责
2013/12/20 职场文书
酒店端午节促销方案
2014/02/18 职场文书
逃课上网检讨书
2014/02/20 职场文书
《颐和园》教学反思
2014/02/26 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
工作证明格式及范本
2014/09/12 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
颐和园的导游词
2015/01/30 职场文书
2015年个人思想总结
2015/03/09 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle