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 随机生成中文验证码的实例代码
Mar 20 Python
用Python编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
python保存网页图片到本地的方法
Jul 24 Python
Python对切片命名的实现方法
Oct 16 Python
Python爬虫实现验证码登录代码实例
May 10 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python pymsql模块的使用
Sep 07 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 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循环输出数据库内容的代码
2008/05/24 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php简单获取目录列表的方法
2015/03/24 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
敏捷开发的主要原则都有哪些
2015/04/26 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
公司年会搞笑主持词
2014/03/24 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
python的html标准库
2022/04/29 Python