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单链表实现代码实例
Nov 21 Python
python学习笔记:字典的使用示例详解
Jun 13 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python基于property实现类的特性操作示例
Jun 15 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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连接Oracle数据库
2006/10/09 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Django 自动生成api接口文档教程
2019/11/19 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
2015年度党员个人总结
2015/02/14 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
找规律教学反思
2016/02/23 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL