学Selenium自动化需要知道的之Python测试框架

article/2025/9/25 12:27:09

根据StackoverFlow网站的开发者调查,Python是2019年增长最快的编程语言。在整体排名中,它甚至超越了Java,排在第二位,成为最受喜爱的编程语言之一。

Python流行的几个原因之一是对测试自动化框架的广泛支持。大多数流行的Python框架都与Selenium测试自动化框架兼容,并用于自动化浏览器测试和跨浏览器测试。

随着2022年Python测试框架的增加,有必要选择适合你需求的理想的Selenium测试自动化框架。除了2022年默认的Python测试框架unittest(或PyUnit)之外,还有更多的Python框架可供选择。

以下是小编总结的2022年实现Selenium测试自动化需求的顶级Python测试框架:

1.Behave

Behave是广泛用于BDD(业务驱动开发)测试的Selenium Python测试框架之一。Behave使用Gherkin语言开发场景和特性文件。由于Gherkin在测试用例开发中使用了简单的可读语言,所以还可以为团队中的非技术人员创建测试,从而支持业务驱动的开发。

  随着工程师、经理、质量分析师、业务开发经理等之间协作的增加,BDD框架的使用可以保证团队成员之间能够更好地沟通。如果你有关于其他BDD框架(如SpecFlow、Cucumber、- jvm等)的工作知识,那么开始使用行为驱动的Python测试框架(如Behave)就相对容易一些。

  因为behavior是一个BDD框架,它从根本上不同于其他Selenium Python测试框架,(如unittest(或PyUnit)、PyTest等。

  先决条件是什么?

  安装Behave需要Python 2.7.14以上版本。使用任何BDD工具的经验对于开始使用Behave框架都是非常方便的。

  Behave的优点

  (1)如果团队之前有使用任何现有BDD框架(如SpecFlow、Cucumber等)的经验,则很容易升级。

  (2)可用的环境功能,配置设置,夹具等,可实现简单的设置和清理。

  (3)它支持与其他web框架(如Django和Flask)的集成。

  (4)它有优秀的支持文档和教程,可以帮助你开始使用behave框架。

  (5)添加新的测试用例更简单,因为测试由不同的场景步骤、场景结果、特性文件等组成。

  (6)除了技术人员之外,非技术人员也可以在测试用例(或测试场景)开发中扮演重要角色。

  Behave的缺点

  (1)PyCharm(社区版)不支持Behave。

  (2)在Behave中的不同功能文件(*.feature)之间共享场景步骤(*_steps.py)是非常困难的。

  (3)没有对并行测试执行的内置支持,而并行测试是自动化浏览器测试的主要需求之一。并行测试执行的工作区需要安装额外的软件,就像热门网站讨论线程中所述。

  (4)Behave只能用于黑盒测试。

  Behave是最好的Python测试框架吗?

  Behave框架适合于web测试,因为测试场景可以使用简单的英语开发。另一方面,Behave对于集成测试并不理想,因为冗长会导致测试场景不必要的复杂性。

  许多开发人员更喜欢pytest- BDD,它是pytest.runner的BDD库,因为它使用了pytest中可用的优秀特性,因此适合于BDD测试。

  2.PyUnit(或unittest)

  PyUnit(也称为unittest)是默认的Python测试框架,它是Python标准库的一部分。Python测试框架的灵感来自于JUnit框架。它是自Python版本2.1发布以来发布的unittest模块的一部分。

  由于unittest Python测试框架是开箱即用的,许多开始使用Selenium测试自动化的开发人员更喜欢unittest框架。测试用例遵循特定的命名法,其中测试要么以test_开始,要么以_test结束。

  TestCase是一个基类,它包含断言方法、设置和销毁例程。可以将测试用例的数量分组在一起,以形成一个TestSuite类并构建定制的测试运行程序。

  先决条件是什么?

  由于PyUnit框架与Python测试框架是开箱即用的,所以它不需要任何额外的软件包安装。

  PyUnit(或unittest)的优点

  (1)因为PyUnit是xUnit框架的派生,并且与xUnit框架有明显的相似之处,所以Python中的新手开发人员也很容易开始使用unittest框架。

  (2)不需要额外的软件包安装。

  (3)测试场景可以独立执行,也可以将它们分组到一个测试套件中。执行过程很简单,因为测试只能通过在终端上提到它们的名称来执行。

  (4)默认的执行输出是简洁且易于理解的。这个Python测试框架还有许多命令行选项,可以帮助提供更详细的输出。

  (5)测试报告的生成非常快,只需要几毫秒。

  PyUnit(或unittest)的缺点

  (1)测试用例的命名仍然基于在Java中使用的camelCase命名约定。

  (2)大量的样板代码用于测试实现。

  (3)没有提供彩色输出。

  PyUnit是最适合你的Python自动化框架吗?

  由于PyUnit(或unittest)是Python附带的默认Selenium Python测试框架,大多数开发人员使用PyUnit开始他们的Python自动化测试之旅。太多的样板代码和对太多抽象的支持是在大型项目中使用

Python测试框架的主要障碍。

  了解如何使用PyUnit进行Selenium Python测试。

  3.Robot

  Robot是另一个广泛使用的Python测试框架,用于Selenium测试自动化、RPA(机器人流程自动化)和ATDD(验收测试驱动开发)。它是一个开源的、可扩展的Python测试框架。它可以很容易地与任何其他

工具集成,因为它是创建灵活的自动化测试解决方案的理想工具。

  Python测试框架是独立于操作系统和应用程序的,即相同的实现在不同的平台(即Windows、Linux和MacOS)上是兼容的。Robot框架的语法很容易理解,因为它使用了人类可读的关键字。Robot框架的功能可以通过使用Python在Selenium中实现的库进行扩展。它有一个丰富的生态系统,由作为独立项目开发的库和工具组成。

  先决条件是什么?

  如果安装了Python 2.7.14或更高版本,可以使用Robot框架。Python包管理器(pip)命令用于安装Python测试框架。

  Robot框架的优点

  (1)使用Robot框架编写测试用例不需要编程知识。

  (2)由于Python测试框架是独立于平台和应用程序的,因此在从一个平台执行代码到另一个平台时不需要进行移植。

  (3)它可以用于BDD、ATDD和关键字驱动的Selenium测试自动化。

  (4)很容易开始使用Robot框架,因为可以轻松地使用测试数据语法。

  (5)Robot framework拥有丰富的库生态系统,例如用于移动自动化的Appium、用于DB测试的数据库等,用于测试不同的应用程序。

  (6)它有一个很好的内置报告机制,因为每次构建之后都会生成一个HTML日志。

  Robot的缺点

  (1)没有对并行测试执行的内置支持。

  (2)创建定制的HTML报告不是一项简单的任务。

  Robot是最适合你的Python测试框架吗?

  由于其丰富的库集和简单的语法,与PyUnit(或unittest)和PyTest相比,Robot框架更易于使用。如果我们正在为ATDD寻找一个理想的Python自动化框架,那么你应该选择Robot framework。

  4.Nose2

  Nose2是一个Python单元测试框架,它是Nose框架的后续版本。它是unittest的,也被称为unittest的扩展。Nose2通过为测试执行提供插件、支持测试用例的自动发现和收集文档,为PyUnit框架增加

了支持。

  所有这些新增的功能使得使用PyUnit进行测试变得简单和容易。Nose2的插件生态系统增加了对装饰器、装置、参数化测试、模块、类和测试发现的支持。在Nose2中是一种DSL(领域特定语言),用于编写具有昂贵的嵌套特性的测试,也称为功能测试。更多关于Nose2的详细信息请访问该网站的官方网站。

  先决条件是什么?

  Nose2只依赖于与Python库一起提供的unittest模块。可以使用Python包管理器(pip)安装Nose2。

  Nose2的优点

  (1)它很容易安装并开始使用Nose2,因为它扩展了现有的unittest框架。

  (2)有了诸如测试发现、fixture、参数化测试等特性,nose2使unittest与PyTest一样有用。

  (3)用Nose2编写的脚本支持许多命令行选项和通过配置文件进行的大量配置。

  (4)使用Nose2中的mp插件,测试可以与多个进程并行执行。这加快了测试执行的速度,以防你的测试被IO或CPU严重限制。

  (5)Nose2有大量的插件,可以帮助加速Selenium测试自动化过程。

  Nose2的缺点

  (1)Nose2的文档不像PyTest框架那样广泛。

  (2)Python 2.4(及以上版本)支持的nose框架的废弃可能会对希望在项目中使用Nose2的开发人员造成潜在的负面影响。

  Nose2是最适合你的Python测试框架吗?

  如果你的团队成员正在使用unittest框架,并且不打算切换到任何其他框架(例如Lettuce、行为、PyTest等),那么值得尝试一下Nose2,因为它是unittest的扩展。

  因为Nose2也支持并行测试,所以它可以用于自动化的浏览器测试,这种测试场景可以在不同的浏览器和平台组合中执行。

  5.Lettuce

  Lettuce是一个Python测试框架,它促进了BDD测试。它的灵感来自Cucumber(是为Ruby设计的)。Lettuce的名字是受到了绿色植物的启发。最新版本的Lettuce是0.2.23,被称为Kryptonite。

  这个特殊的Python测试框架是开源的,并托管在GitHub上。正如他们的官方网站所提到的,Lettuce是为了让测试变得简单和有趣而开发的。

  先决条件是什么?

  可以使用Python包管理器(pip)安装Lettuce。前提条件是Python 2.7.14(或更高版本)。

  Lettuce的优点

  (1)像其他Python测试框架(如有助于BDD的Behave)一样,Lettuce也使用小黄瓜语言来创建场景和特性文件。如果你之前有使用任何BDD测试工具的经验,那么开始使用Lettuce是很容易的。

  (2)除了开发人员和其他技术人员之外,其他项目干系人,即营销人员、项目经理等,也可以在测试过程中发挥主要作用。

  (3)因为特性文件和场景文件中需要主要的更新,添加新的测试用例会很容易。

  Lettuce的缺点

  (1)它主要用于黑盒测试。

  (2)使用像Lettuce这样的BDD测试工具,完美的执行需要在项目的所有相关涉众之间进行及时的沟通。

  Lettuce是最适合你的Python自动化框架吗?

  Lettuce使Selenium测试自动化的整个过程具有可伸缩性、可读性和简单性。使用像Lettuce这样的BDD工具的最佳部分是,非技术人员也可以参与测试创建过程,因为测试是从业务需求派生出来的。

Python开发人员和测试人员更倾向于pytest-bdd,因为它具有其他BDD工具支持的大部分特性。

  6.PyTest

  使用PyTest编写的测试套件更加紧凑,因为不需要大量样板代码,也不需要将测试包含到大型测试类中。与默认的Python测试框架2022不同,它要求测试以test_开始(或以_test结束),PyTest中没有固定的测试用例命名法。这是因为PyTest具有支持自动发现测试模块和函数的内置特性。

  不需要记住assert*名称,这是由于引入了assert重写的有用特性,该特性有助于提供关于失败断言语句的详细信息。

  先决条件是什么?

  PyTest (Python测试框架)最好的地方在于它包含了一个简单的学习曲线。开始使用PyTest是很容易的,特别是如果你事先了解任何现有的Python测试框架。

  你只需要一个用于开发的Python IDE和用于安装PyTest的Python包管理器。

  PyTest的优点

  PyTest框架有很多优点,主要有以下几点:

  (1)它与其他Python测试框架(如unittest(或PyUnit))兼容。

  (2)除了简单的测试之外,PyTest还可以用于创建复杂的功能测试用例。

  (3)使用其他Python测试框架将现有实现移植到PyTest所需的工作较少。

  (4)PyTest可以用于实践TDD(测试驱动开发)的项目,也可以用于开源项目。

  (5)PyTest有助于创建有效的测试用例(和测试套件),因为它支持参数化。使用参数化,可以使用不同的输入配置执行测试用例,从而减少代码重复。

  (6)使用PyTest的测试很容易理解,因为只有很少的样板代码。

  (7)它支持fixture和类,由于这些测试对象在模块/类/函数/会话的生命周期中都是可用的。

  (8)PyTest是可扩展的,Python测试框架已经有了丰富的插件架构。目前PyTest有315+的外部插件。

  它通过pytest-xdist插件支持并行测试执行。

  PyTest中的断言提供了关于失败场景的详细信息。

  PyTest作为Python测试框架的缺点

  (1)PyTest与其他Selenium Python测试框架不兼容,因为它使用自己的特殊例程进行开发。

  (2)重写完整的代码是使用PyTest将现有的实现移植到其他Python测试框架的唯一方法。

  PyTest是最适合你的Python测试框架吗?

  如果你正在开发复杂的功能测试,那么你可以选择PyTest而不是默认的Selenium Python框架,即unittest。fixture、类以及参数化对于自动化测试开发非常方便。

  7.Testify

  prove是另一个在2022年流行的Python测试框架,它被认为是unittest和nose框架的替代品。由于框架是在unittest之后建模的,为unittest编写的测试将需要最小的调整来使用prove。

  证实可用于执行自动化单元、集成和系统测试。最新版本的是0.11.0。它有一个可扩展的插件系统,提供了有用的报告功能。与Nose2框架一样,prove也提供了增强的测试发现和类级设置拆卸fixture方法,这些方法只对整个测试方法集执行一次。

  先决条件是什么?

  证明框架的主要优点是,它涉及一个温和的学习曲线,因为它是基于现有的单元测试框架。安装相当简单,因为它只需要Python包管理器。

Testify的优点

(1)因为它是基于unittest框架的,所以很容易开始使用prove。

(2)这个框架有一个可扩展的插件生态系统。

(3)它还有额外的测试实用程序,可以帮助集成、分析和代码覆盖。

(4)与Nose2框架一样,prove也带有增强的测试发现,这使得发现测试非常容易。

(5)它为fixture方法提供了一种基于装饰的方法。

Testify的缺点

(1)和Nose2一样,也有同样的问题,文档不是很丰富,如果你刚刚开始使用框架,这可能是一个障碍。

(2)与Testify的并行测试可能是一个障碍,正如一些在线论坛指出的那样。

Testify是最好的Python测试框架吗?

与Nose2一样,如果你的团队正在寻找构建在unittest之上的Python测试框架,那么它值得一试。由于使用witness实现并行测试有点困难,所以它可能不适合自动化浏览器测试之类的场景。

总结

在本文中,我们了解了一些可以与Selenium一起使用的流行Python测试框架。这些框架都有各自的优缺点。如果你打算在测试创建过程中包含非技术人员,你可以尝试有效BDD工具,例如Behave或

Lettuce 。总之,选择正确的Python测试框架完全取决于项目需求和团队中可用的能力。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 


http://chatgpt.dhexx.cn/article/mqNIgBKY.shtml

相关文章

机器学习框架Chainer学习

chainer优势——边定义边运行 当下已有的深度学习框架使用的是“定义后运行”机制。即意味着,首先定义并且固化一个网络,再周而复始地馈入小批量数据进行训练。由于网络是在任何前向、反向计算前静态定义的,所有的逻辑作为数据必须事先嵌入网…

Jenkins - Hello World

开始 Jenkins 的第一行代码 无论学哪种语言,都是从 hello world 开始,因为这个学会了,就说明你已经从入门到精通了。 让我们来看看 Jenkins 的 hello world 吧 0. 登录 Jenkins 1. 新建 item 2. 创建一个 Freestyle project 3. 增加执行命令…

Cucumber--基于vue前端的自动化测试(四)

cucumber是BDD (Behavior-driven development,行为驱动开发)的一个自动化测试的副产品。它使用自然语言来描述测试,使得非程序员可以理解他们。Gherkin是这种自然语言测试的简单语法,而Cucumber是可以执行它们的工具。 cucumber本质上是使用根…

【Jenkins】【Jenkins 使用】Jenkins 与 Git

【文章末尾给大家留下了大量的福利】 1、概述 Jenkins 与 Git 的结合使用,可以理解为是 Jenkins 的一个强大之处。为什么要这么说,简要说明一下这个工作模式就能理解: 一个软件项目,开发过程中通常都会使用到一些源码管理工具&am…

SSH and GPG keys

问题:gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. gitgithub.com:权限被拒绝(publickey)。 我相信很多程序员开始都会对Git比较陌生。但是用过几次,就会觉得Git的功…

自动化测试工具Cucumber的简单介绍

背景介绍 随着测试的发展,测试自动化越来越成为人们的关注点。 现在我们公司也在进行接口自动化的推广,在我看来接口自动化的价值就在于整体项目的回归,完成一些没法通过人力进行的测试,比如压力测试。 为了解决测试开发人员和…

【Jenkins】学习笔记

学习笔记 一、Jenkins1.1、Jenkins的作用 二、下载安装2.1、安装环境2.2、安装GitLab2.3、安装Jenkins 三、Jenkins Git Maven 部署配置3.1、安装maven插件3.2、新建项目3.3、自动发布到测试服务器 四、publish over ssh 配置4.1、超时机制4.2、shell的日志输出4.3、运行前清…

快速了解KEGG

我们有时候很关心基因所在的pathway、上下调控以及一堆基因富集到的pathway,再或者同源基因等信息,KEGG数据库也算是目前(注释)常用的明星数据库 KEGG:京都基因和基因组百科全书:KEGG项目于1995年5月在日本…

【Jenkins基础知识学习笔记】

文章目录 1、Master/Slave架构2、搭建步骤3、工作流程4、配置建议5、通信方式参考文档 1、Master/Slave架构 Jenkins采用Master/Slave架构,Master/Slave相当于Server和agent的概念,Master提供web接口让用户来管理Job和Slave,Job可以运行在Ma…

Gherkin语法详解之Scenario outline(四)

如果我想要对于不同的数据集,重复一个场景的所有步骤?这是一个数据驱动测试的经典案例。这将通过使用一个场景大纲来实现

BDD - BDD Automation Framwork 自动化框架

BDD - BDD Automation Framwork 自动化框架 引言BDD 测试框架Jenkins 集成Framework Components 框架组件IDEs 集成开发环境NotepadEclipseJetBrains IntelliJ IDEAMicrosoft Visual Studio 引言 BDD 自动化框架使得 QA 工程师很容易将 Gherkin Scenarios 转换成自动化测试用例…

zipkin

zipkin zipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。 architecture 如图,在复杂的调用链路中假设存在一条调用链路响应缓慢,如何定位其中延迟高的服务呢? 日志: 通…

Cucumber之二Gherkin语言学习

在本教程中,我们将向您介绍Gherkin - BDD语言(业务驱动开发)。我们将尽力详细回答这些问题原文点击这里 免费英语视频教程可见微信公众号:【软测小生】里面,请关注公号更新相关文章和视频资源。 另外有一个中国团队在做类似的事情&#…

Artifactory 简介

产品特点 http://www.jfrogchina.com/artifactory/features/ 产品对比 https://binary-repositories-comparison.github.io/

pom文件里的groupId和artifactId是什么

在学习maven项目的时候发现所有pom文件里的<dependency>下有都有两个带Id的东东&#xff1a; 它们是什么&#xff1a; groupId&#xff1a;存储的包的路径&#xff0c;一般分为多段&#xff0c;第一段为域&#xff0c;第二段为公司名。。。。。。如图&#xff0c;org是域…

artifactId到底什么意思?

打开https://repo1.maven.org/maven2/org/apache/flink/flink-table-common/1.11.2/ 会看到: 对应的依赖是: <dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-common</artifactId><version>1.11.2</version…

maven项目的groupId和artifactId什么意思?

首先要知道groupId和artifactId的存在是为了定位到你的项目&#xff0c;所以它们充当着坐标的角色。 groupId&#xff1a;group意思为组&#xff0c;所以理解为是组织Id&#xff0c;也是公司Id&#xff0c;通常它的写法与公司域名类似。一般分三段&#xff0c;即“域.公司名称.…

maven中的ArtifactId和groupId是什么

文章目录 1、了解2、举例3、说明 1、了解 之前建项目、用maven时常遇到GroupID和ArtifactID&#xff0c;一直说要弄清楚却迟迟拖延&#xff0c;今天查了一下&#xff0c;在这里做个小结。 最简单的来说&#xff1a;GroupID被俗称为包结构 ArtifactID被俗称为项目名 GroupId和…

maven中的groupId和artifactId是指什么?

groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的&#xff0c;如果你要把你项目放到maven本地仓库去&#xff0c;你想要找到你的项目就必须根据这两个id去查找。   groupId一般分为多个段&#xff0c;这里我只说两段&#xff0c;第一段为域&#xff0c;第二…