Python 中用于集成和单元测试的 7 个最佳框架

由于Python简单易学的特性,使其成为编写自动化测试的最佳编程语言之一。

无论你是在进行端到端测试、负载还是压力测试,你都需要一些成熟的测试框架来帮助你更好的完成任务。

Python中的测试框架有很多,以下我将介绍有几个著名的软件测试框架。

1. pytest

Pytest 是一个用 Python言语开发的,且专用于的 Python 的简单测试框架。为什么要使用它进行测试?它具有简单的学习曲线,是单元和集成测试的首选框架,同时它还支持从 unittest 继承类。

该框架提供了更简单有效的方式,来用 Python 编写测试。验证代码输出就像调用 assert 关键字一样简单。如果你想同时运行多个测试,Pytest 的无头并行测试功能可以帮助你节省大量时间。

Pytest 还支持在命令行中执行测试套件,就像从测试文件夹终端运行pytest 命令一样简单。

该命令也适用于文件声明,所以你还可以使用文件名调用 Pytest:

pytest patter_tests.py

使用 Pytest 运行测试文件会产生人性化的输出结果,该输出会跟踪测试步骤并告诉你故障所在:

Python测试框架:pytest
pytest 优质课程
Python 中用于集成和单元测试的 7 个最佳框架

【Udemy高分课程 + 中英文双字幕】

使用 PytestDjango 应用程序)实现真实世界 Python 测试自动化

2. Playwright

playwright 框架是 Microsoft 向软件测试社区提供的产品。

虽然许多框架都运行无头测试,但 Playright 支持无头和有头模式。它是测试用户界面的最佳框架之一,支持 Firefox 和基于 Chromium 的浏览器,如 Edge 和 Chrome。

在功能方面,Playwright 与 Selenium差不多,都是基于云的并行测试和编排工具。但它的 API 测试功能比 Selenium 更强大。不过,Playwright 的并行测试可能很棘手,因为它的事件循环默认只运行单个测试功能。

如果你想要实现无代码化,你可以使用 Playwright 的 codegen 来动态编写测试代码。当你与 DOM 交互时,它会生成一个特定于语言的测试文件。它的选择器生成器还可以让你轻松选择 Web 元素,只需将鼠标悬停在它们上方即可,而无需检查 DOM。

Playwright 具有默认的自动等待功能。因此,它会在运行测试用例之前暂停加载 DOM。除了 Python 之外,playwright 框架还支持 JavaScript、TypeScript、Java 和 .NET 等编程语言。

3. Selenium

Selenium 是最常用的自动化测试框架之一,具有良好的社区支持。

与 Playwright 不同,它不提供 API 测试功能,所以它不是测试后端逻辑的框架。但它提供了 Chromium 和非基于 Chromium 的浏览器驱动程序来评估和验证 UI。

该框架具有更多的编程语言支持,并且在一般 Web 自动化中更加通用。它还接受用于并行编排测试用例的云网格功能。因此,它是跨浏览器和跨平台测试的绝佳选择。

Selenium 具有一系列专用选择器,可让你作为普通用户与 UI 进行交互。如果你需要一些 UI 动作断言,你可以从 unittest 类继承它。Selenium 还具有适用于 Chrome 和 Firefox 的 IDE 扩展。这提供了记录和播放测试。但与 Playwright 的 codegen 不同,它不会生成测试代码。

4. Robot

Robot 是一个关键字驱动的开源 Python 测试框架。

总体而言,它使测试自动化尽可能简单。在其他的测试框架中,你必须为的测试用例编写代码,但在 Robot 中,只需要简单的英语即可。因此,它可以方便地编写更人性化的测试用例。

它的强项是验收测试,即确定软件是否符合规定的标准。除了测试之外,它还具有用于自动化 UI 任务的通用机器人自动化工具。

Robot 框架很容易使用,但提供的测试功能也很少,但你可以使用其他测试库对其进行扩展。例如,你可以将它与 Selenium 配对以将浏览器功能添加到 UI 测试中。

5. Doctest

Doctest 是一个内置的 Python 测试库,可让你在测试时记录你的代码。它是执行单元测试的最佳选择之一,同时它也支持 UI 组件测试。这个库的优点是很直观,可以从你的代码中读取文档字符串并验证你的预期输出。

Doctest 通过根据设置的输出检查函数来工作。如果你的预期结果错误,它只会引发错误并返回正确计算的输出。Doctest 中的测试输出是干净简洁的。例如,如果对多个输入数据进行测试,它会提供详细的失败报告,包括代码失败的地方。

一段 Doctest 记录的测试如下所示,例如:

def findFirst(text):
    """
    Given a string, return the first alphabet
    :param: string
    >>> findFirst("Idowu")
    U
    """
    return text[0].upper()
if __name__=="__main__":
    import doctest
    doctest.testmod()

上面记录的测试失败,因为我们期望一个U,但计算结果是I

Python测试框架:Doctest

6. Unittest

Unittest 提供了一种最结构化的方式来编写单元测试。

它默认支持面向对象的编程,它将测试用例包装在专用类中,并在事件循环中执行它们。考虑到这一点,如果你更喜欢在页面对象模型中构建测试,那么 unittest 是一个很好的选择。

Unittest 默认不提供 UI 测试,但是你可以将它与另一个测试框架(如 Selenium)配对以获得多种浏览器功能。当与云网格支持的框架配对时,你还可以使用 unittest 运行并行测试。因此,你可以利用它在集成和端到端测试中的强大功能。

例如,当与 Selenium 结合使用时,你可以使用继承的 assert 关键字检查预期输出与组件的结果。但是,与 Pytest 不同,你可能会在 unittest 中编写更多代码,因为它的断言调用更加硬编码。

7. Nose2

Nose2 在功能上与 Pytest 密切相关。

但是,它从 unittest 框架继承了其核心属性。与 Pytest 一样,你可以将其用作在 Selenium 或 unittest 等其他框架中编写的测试用例的测试运行器。

它支持单元测试和集成测试。因此,无论你是想测试 UI 还是检查代码功能,Nose2 都提供了所有需要的实用程序。

它还接受参数化测试,这涉及在装饰器中插入测试参数,如测试浏览器和平台。然后,你可以访问代码正文中的每个参数。这使得 Nose2 成为在云网格上并行运行跨浏览器测试的最佳框架之一。

总结

在任何一门编程语言中,测试,都是一种很好的编程实践。

良好的测试工作,可以帮助你在公开发布之前检测和删除错误。虽然一些测试框架主要基于 Python,但其他测试框架支持多种编程语言。

如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站

(0)
疯狂的小黑的头像疯狂的小黑
上一篇 2022年9月21日 上午12:31
下一篇 2022年10月10日 下午10:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

微信