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 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
python实现简易内存监控
Jun 21 Python
python求最大连续子数组的和
Jul 07 Python
Python实现网站表单提交和模板
Jan 15 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
Django用户身份验证完成示例代码
Apr 03 Python
基于python实现检索标记敏感词并输出
May 07 Python
pytorch实现线性回归以及多元回归
Apr 11 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
jQuery实用基础超详细介绍
2013/04/11 Javascript
子页向父页传值示例
2013/11/27 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
webpack将js打包后的map文件详解
2018/02/22 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
C++的几个面试题附答案
2016/08/03 面试题
表扬信格式
2014/01/12 职场文书
公司管理建议书范文
2014/03/12 职场文书
篝火晚会主持词
2014/03/25 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
个人安全生产责任书
2014/07/28 职场文书
庆七一活动总结
2014/08/27 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
介绍信怎么写
2015/01/30 职场文书
家长会主持词开场白
2015/05/29 职场文书
个人欠条范本
2015/07/03 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js