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字符遍历的艺术
Sep 06 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python松散正则表达式用法分析
Apr 29 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
pycharm运行scrapy过程图解
Nov 22 Python
Python 过滤错误log并导出的实例
Dec 26 Python
python变量的作用域是什么
May 26 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 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
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python决策树分类算法学习
2017/12/22 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
python+os根据文件名自动生成文本
2019/03/21 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
中科前程Java笔试题
2016/11/20 面试题
辞职信范文大全
2015/03/02 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
2016年元旦主持词
2015/07/06 职场文书