四个帮您找出bug的Python测试框架

四个帮您找出bug的Python测试框架

为您的Python应用程序,编写、运行和维护单元测试的方法不只一种,这是其中优秀的四个测试框架。

企业通常需要通过消防和安全检查的方式对楼房等建筑物进行安全检测,如果您知道某些电气状况或结构问题可能会导致灾难,则需要一次又一次地寻找并解决它们。

同样,如果您想防止软件应用程序中的某些问题或状况,为它们编写测试样例则可以确保它们永远不会进入生产环境。

对于像Python这样的动态语言,测试至关重要。对于动态语言,整个错误类别仅在运行时出现。健壮的测试套件可以帮助解决这些问题,并为继承代码库的人提供一种方法。

通常情况下,Python带有自己的单元测试框架,它也被广泛使用。但是还有许多其他优秀的测试框架,每种框架都有其关于如何构建和维护单元测试的哲学。以下是unittest以及其它三个优秀测试框架的简介。

unittest and doctest

unittest是Python标准库附带的默认测试框架,用于创建Python本身的测试套件。unittest并不像某些第三方测试框架那样影响深远。它提供了足以为大多数项目编写健壮的单元测试的功能。使用过JUnit测试框架的Java开发人员应该熟悉unittest。

要创建测试套件,请创建从unittest.TestCase派生的Python类,这些类中的功能就是测试。测试可以是简单的相等性或不相等性断言,也可以是更复杂的。例如,assertRaises测试可确保为给定测试引发给定异常。

测试可以分组为单个文件,也可以分成多个文件,然后自动发现并且执行。您还可以为每个测试组提供固定搭配(设置和分解流程),指定要在特定条件下跳过的测试,并控制测试的执行行为。

使用unittest的最大优点是它的用户量很多,仅仅是因为其他Python程序员非常熟悉测试套件的编写方式,就很难用unittest出错。

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

请注意,doctest最适合用于简单功能的测试,在控制台中易于输入和输出,也适合不需要大量设置即可产生结果的测试。

pytest

pytest项目可以完全替换或增强unittest。pytest在编写测试时采用了不同的理念,从而使开发人员无需过多的设置即可快速为项目实施小型测试套件。随着项目的发展,pytest可以扩大规模以进行匹配,从而随着时间的推移可以分层提供更多测试功能。

pytest测试开始时是遵循模块中某些命名约定的紧凑函数,而不是现有测试类型类的子类。通过从命令行在模块上运行pytest或在代码内调用pytest来调用测试。您可以创建pytest固定装置来设置和拆除测试条件,并根据需要对这些固定装置进行宽泛或狭窄的范围调整(例如,从整个测试会话到整个功能范围)。

您可以随时添加的选项很多且功能强大。数百种pytest插件可让您将测试与许多第三方服务和操作集成在一起。最后,unittest和nose测试套件也可以在测试过程中运行,因此您可以将pytest与现有套件集成,而不必放弃它们并从头开始。

nose and nose2

nose及其后续nose2在使用unittest编写的测试中进行了扩展,使其更易于运行。nose本身不再维护;nose2项目继续保持与Python 3兼容性和功能上的一些变化,但与nose具有相同的基本原理。在这里,我们将专注于讲解nose2。

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

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

请注意,nose2可能不是您首次尝试测试Python应用程序的最佳选择,因为它具有创建测试的经验。您需要先通过unittest进行测试。

behave

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

与通常涉及首先编写代码的测试编写方法相比,这可能更加花哨。但是BDD方法的目的是使测试更容易为编写测试的开发人员进行推理,并且使其他人(包括最终用户和其他开发人员)更容易理解测试的目的和原因。behave对于需要细致的项目非常合适。

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

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

原文链接:

https://www.infoworld.com/article/3439178/4-python-test-frameworks-to-crush-your-bugs.html