当前位置: 首页 > 科技观察

4个很棒的Python测试框架!

时间:2023-03-12 17:32:31 科技观察

【.com速译】为你的Python应用程序编写、运行和维护单元测试的方法不止一种。本文介绍了四种出色的方法。企业软件需要测试,就像建筑物需要消防和安全检查一样。如果您知道某些电气状况或结构问题可能导致灾难,您就不会只查找一次,而是会反复查找。同样,如果您想防止应用软件中出现某些问题或情况,为它们编写测试可确保它们永远不会投入生产。测试对于像Python这样的动态语言尤其重要。对于动态语言,大量错误只发生在运行时。可靠的测试套件可以帮助捕捉这些问题,让继承代码库的人也能捕捉到这些问题。Python默认自带单元测试框架,实用性强,应用广泛。但是还有许多其他方法,每种方法在如何构建和维护单元测试方面都有自己的理念。默认方法unittest和三个重要的替代方法如下所述。unittest和doctestunittest是Python标准库自带的默认测试框架,用于为Python本身创建测试套件。unittest没有像某些第三方测试框架那样广泛的覆盖范围,而且它并不意味着-它提供了足够的功能来为大多数项目编写可靠的单元测试。使用过JUnit测试框架的Java开发者应该对unittest不陌生。要创建测试套件,您需要创建从unittest.TestCase派生的Python类,测试是这些类中的函数。测试的范围可以从简单的等式或不等式断言到更复杂的断言。例如,assertRaises测试确保为特定测试引发特定异常。测试可以分组到一个文件中,或者分布在多个文件中,自动发现然后执行。您还可以为每个测试组提供夹具(安装和拆卸例程),指定在特定条件下要跳过哪些测试,并控制测试的执行行为。使用unittest的好处是众所周知。正因为其他Python程序员非常熟悉测试套件的编写方式,所以单元测试很难出错。doctest还附带了Python标准库作为补充模块。Doctest在格式类似于Python交互式会话的Python文件中查找注释,并尝试运行这些注释中包含的命令以查看结果是否匹配。这允许您验证函数文档字符串中的示例输出和函数的行为。请注意,doctests最适合简单功能的测试,其输入和输出可以在控制台中一目了然,以及不需要大量设置或拆卸即可产生结果的测试。如果你尝试对一个复杂的函数进行doctest,你可能会得到过于笨拙而无用的doctest示例。pytestpytest项目可以完全替代或增强unittest。Pytest采用不同的哲学来编写测试,允许开发人员快速为项目实现小型测试套件,而无需大量脚手架代码。随着项目的不断扩大,pytest可以向上扩展匹配,允许逐渐增加更多的测试功能。pytest测试开始时是遵循模块中某些命名约定的紧凑函数,而不是现有测试类型类的子类。通过从命令行在模块上运行pytest或从代码中调用pytest来调用测试。您可以创建pytestfixtures来安装和拆除测试条件,并根据需要将这些fixutres的范围扩大或缩小(比如从整个测试会话范围到仅功能范围)。您可以添加的选项很多而且功能强大。数百个pytest插件可让您将测试与许多第三方服务和操作集成。最后,unittest和nose测试套件也可以作为测试过程的一部分运行,因此您可以将pytest与现有套件集成,而无需丢弃它们并从头开始。nose和nose2nose及其后继nose2扩展了用unittest编写的测试,使它们更容易运行。nose本身不再维护;nose2是这个项目的延续,与Python3兼容,在功能上有一些变化,但基本思想相同。我们这里主要介绍nose2。nose2在两个主要方面与unittest不同:它具有插件架构并使用.ini样式的配置文件来控制测试的运行方式。默认情况下提供并启用了许多nose2插件。.ini文件包含诸如探查哪些目录以及在测试运行期间使用哪些插件等设置。因此,一组具有罕见行为的nose2测试可以精确地编写脚本并毫不费力地重复使用。当nose2运行时,它会查找以名称test开头的模块,还会查找从unittest.TestCase派生的任何类,因此它可以运行通过pytest或unittest范例设计的测试。nas2测试也可以配置为在模块以独立方式执行时运行(unittest和pytest也可以这样做)。请注意,nose2可能不是您第一次尝试测试Python应用程序的首选,因为它假设您有一些创建测试的经验。您需要先尝试单元测试。behavebehave是众多使用“行为驱动开发”(BDD)范例的Python测试框架之一。您可以在一个简单的英语“功能文件”中描述测试的预期行为,并将测试本身写入另一个文件,然后执行行为,并观察测试运行,并使用英语描述提供的注释。与通常需要先编写代码的测试编写方法相比,这看起来更加不灵活。但是BDD方法旨在让编写测试的开发人员更容易推理测试,并让其他人(包括最终用户和其他开发人员)更容易理解测试的目的和原因。behave非常适合需要小心谨慎的项目。behave允许您通过指定可以添加到特征文件中的个别案例的“标签”或元数据,有选择地从命令行运行测试。还可以定义细粒度的逐步行为,例如设置和拆卸过程。behave测试还可以与Django和Flask网络框架集成。Python还有其他几种BDD框架,例如Lettuce和Radish,但behave是使用最广泛的框架之一。原标题:4个Python测试框架来碾压你的bug,作者:SerdarYegulalp