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基础教程之python消息摘要算法使用示例
Feb 10 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python常用库推荐
Dec 04 Python
一道python走迷宫算法题
Jan 22 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
详解python之heapq模块及排序操作
Apr 04 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
python 解决微分方程的操作(数值解法)
May 26 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php实现读取手机客户端浏览器的类
2015/01/09 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
详解Python中的array数组模块相关使用
2016/07/05 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
详解如何修改python中字典的键和值
2020/09/29 Python
python利用faker库批量生成测试数据
2020/10/15 Python
如何用python 操作zookeeper
2020/12/28 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
高二美术教学反思
2014/01/14 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
写给老婆的保证书
2015/02/27 职场文书
困难补助申请报告
2015/05/19 职场文书
出生证明格式
2015/06/15 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
PyMongo 查询数据的实现
2021/06/28 Python