您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

4种出色的Python测试框架

时间:2019-09-25 16:08:49  来源:  作者:

【51CTO.com快译】为你的Python应用程序编写、运行和维护单元测试的方法不只一种。本文介绍了四种出色的方法。

 

4种出色的Python测试框架

 

 

企业软件需要测试,如同建筑物需要消防和安全检查。如果你知道某些电气状况或结构问题可能导致灾难,不会只寻找一次,而是会反复寻找。同样,如果你想防止应用软件中的某些问题或状况,为此编写测试可以确保它们永远不会进入到生产环境。

对于像Python这样的动态语言来说,测试尤为重要。如果是动态语言,大批的错误仅在运行时出现。可靠的测试套件有助于揪出这些问题,为继承代码库的人提供同样揪出问题的方法。

默认情况下,Python随带自己的单元测试框架,该框架既实用又广泛使用。但还有另外诸多方法,每种方法对于如何构建和维护单元测试有各自的理念。下面介绍了默认方法unittest以及三种重要的替代方法。

unittest和doctest

unittest是Python标准库附带的默认测试框架,用于为Python本身创建测试套件。 unittest不像一些第三方测试框架那样覆盖广泛,它本来就不是要这样——它提供了足以为大多数项目编写可靠的单元测试的功能。用过JUnit测试框架的JAVA开发人员应该熟悉unittest。

要创建测试套件,你要创建从unittest.TestCase派生的Python类,测试是那些类中的函数。测试可能是简单的相等或不相等断言,也可能是较为复杂的。比如说,assertRaises测试确保为特定测试引发特定异常。

测试可以分组为单个文件,也可以跨多个文件隔开、自动发现然后加以执行。你还可以为每个测试组提供fixture(安装和拆卸例程),指定在特定条件下跳过的测试,并控制测试的执行行为。

使用unittest的优点是它众所周知。就因为其他Python程序员非常熟悉测试套件的编写方式,就很难搞错unittest。

doctest也是Python标准库附带的,是补充模块。Doctest寻找Python文件中格式类似Python交互式会话的注释,并尝试运行这些注释中包含的命令以查看结果是否匹配。这样一来,可以验证函数的文档字符串中的示例输出以及函数的行为。

请注意,doctest最适合输入输出在控制台中一目了然的简单函数的测试,以及不需要大量安装或拆卸即可生成结果的测试。如果你尝试对复杂函数执行doctest,最终可能得到太过笨拙而没有用处的doctest示例。

pytest

pytest项目可以完全替换或增强unittest。Pytest运用了一种不同的理念来测试编写,从而使开发人员无需大量的脚手架代码,即可快速为项目实施小型测试套件。随着项目不断扩大,pytest可以扩大规模进行匹配,允许更多的测试功能可以逐渐添加上去。

pytest测试一开始是遵循模块中某种命名约定的紧凑函数,而不是现有测试类型类的子类。通过从命令行在模块上运行pytest或在代码内调用pytest来调用测试。你可以创建pytest fixture来安装和拆卸测试条件,并根据需要对这些fixutre规定宽泛或狭窄的范围(比如从整个测试会话范围到仅函数范围)。

你可以添加的选项数量众多且功能强大。成百上千个pytest插件让你可以将测试与许多第三方服务和操作集成起来。最后,unittest和nose测试套件也可以作为测试过程的一部分来运行,那样你可以将pytest与现有套件集成起来,不必丢弃它们、从头开始。

nose和nose2

nose及后续者nose2扩展了用unittest编写的测试,使它们更易于运行。nose本身不再加以维护;nose2延续这个项目,与Python 3兼容,功能上有一些变化,但基本理念一样。我们在这里主要介绍nose2。

nose2在两个主要方面有别于unittest:它拥有插件架构,并使用.ini样式的配置文件来控制测试如何运行。默认情况下,提供并启用了许多nose2插件。.ini文件包括诸多设置,比如测试运行期间探查哪些目录、使用哪些插件。因此,可以对一组具有罕见行为的nose2测试进行精确的脚本编写,可以毫不费力地重复使用。

nose2运行时,它查找以名称test开头的模块,还有从unittest.TestCase派生的任何类,因此它可以运行通过pytest或unittest范式设计的测试。当模块以独立的方式加以执行时,nas2测试也可以配置成运行(unittest和pytest也可以做到这样)。

请注意,nose2可能不是你首次尝试测试Python应用程序的优先选择,因为它假设你在创建测试方面有一定的经验。你需要先试一试unittest。

behave

behave是使用“行为驱动开发”(BDD)范式的许多面向Python的测试框架之一。你可以用简单的英语“功能文件”描述测试的预期行为,并将测试本身写在另一个文件中,然后执行behave,观察测试运行情况,通过英语描述提供了注释。

与通常需要先编写代码的测试编写方法相比,这可能显得更死板僵硬。但是BDD方法旨在使测试更容易为编写测试的开发人员进行推理,并且使其他人(包括最终用户和其他开发人员)更容易理解测试的用途和原因。behave非常适合必须谨小慎微的项目。

behave让你可以通过指定能添加到功能文件中个别案例的“标签”或元数据,从命令行选择性地运行测试。还可以定义精细化的逐步行为,比如安装和拆卸程序。behave测试还可以与Django和Flask Web框架集成起来。

还有其他几种面向Python的BDD框架,比如Lettuce和Radish,但behave是使用最广泛的框架之一。



Tags:Python 测试框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为你的Python应用程序编写、运行和维护单元测试的方法不只一种。本文介绍了四种出色的方法。...【详细内容】
2019-09-25  Tags: Python 测试框架  点击:(128)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条