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二维码生成库qrcode安装和使用示例
Dec 16 Python
Python列表生成器的循环技巧分享
Mar 06 Python
python冒泡排序简单实现方法
Jul 09 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python web框架 django wsgi原理解析
Aug 20 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Pytorch 实现权重初始化
Dec 31 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
python归并排序算法过程实例讲解
Nov 04 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+ACCESS 文章管理程序代码
2010/06/21 PHP
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
浅析php header 跳转
2013/06/17 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
destoon数据库表说明汇总
2014/07/15 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
es6数值的扩展方法
2019/03/11 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
三八活动策划方案
2014/08/17 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android