由于Python简单易学的特性,使其成为编写自动化测试的最佳编程语言之一。
无论你是在进行端到端测试、负载还是压力测试,你都需要一些成熟的测试框架来帮助你更好的完成任务。
Python中的测试框架有很多,以下我将介绍有几个著名的软件测试框架。
1. pytest
Pytest 是一个用 Python言语开发的,且专用于的 Python 的简单测试框架。为什么要使用它进行测试?它具有简单的学习曲线,是单元和集成测试的首选框架,同时它还支持从 unittest 继承类。
该框架提供了更简单有效的方式,来用 Python 编写测试。验证代码输出就像调用 assert 关键字一样简单。如果你想同时运行多个测试,Pytest 的无头并行测试功能可以帮助你节省大量时间。
Pytest 还支持在命令行中执行测试套件,就像从测试文件夹终端运行pytest 命令一样简单。
该命令也适用于文件声明,所以你还可以使用文件名调用 Pytest:
pytest patter_tests.py
使用 Pytest 运行测试文件会产生人性化的输出结果,该输出会跟踪测试步骤并告诉你故障所在:
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:
6. Unittest
Unittest 提供了一种最结构化的方式来编写单元测试。
它默认支持面向对象的编程,它将测试用例包装在专用类中,并在事件循环中执行它们。考虑到这一点,如果你更喜欢在页面对象模型中构建测试,那么 unittest 是一个很好的选择。
Unittest 默认不提供 UI 测试,但是你可以将它与另一个测试框架(如 Selenium)配对以获得多种浏览器功能。当与云网格支持的框架配对时,你还可以使用 unittest 运行并行测试。因此,你可以利用它在集成和端到端测试中的强大功能。
例如,当与 Selenium 结合使用时,你可以使用继承的 assert 关键字检查预期输出与组件的结果。但是,与 Pytest 不同,你可能会在 unittest 中编写更多代码,因为它的断言调用更加硬编码。
7. Nose2
Nose2 在功能上与 Pytest 密切相关。
但是,它从 unittest 框架继承了其核心属性。与 Pytest 一样,你可以将其用作在 Selenium 或 unittest 等其他框架中编写的测试用例的测试运行器。
它支持单元测试和集成测试。因此,无论你是想测试 UI 还是检查代码功能,Nose2 都提供了所有需要的实用程序。
它还接受参数化测试,这涉及在装饰器中插入测试参数,如测试浏览器和平台。然后,你可以访问代码正文中的每个参数。这使得 Nose2 成为在云网格上并行运行跨浏览器测试的最佳框架之一。
总结
在任何一门编程语言中,测试,都是一种很好的编程实践。
良好的测试工作,可以帮助你在公开发布之前检测和删除错误。虽然一些测试框架主要基于 Python,但其他测试框架支持多种编程语言。
如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站