5大自动化测试的Python框架 | 实用干货

news2024/11/17 19:48:04

自从2018年被评选为编程语言以来,Python在各大排行榜上一直都是名列前茅。

目前,它在Tiobe指数中排名第三个,仅次于Java和C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。

因此,开发与测试人员在为手头的项目选择测试框架时,需要考虑许多方面的因素,其中包括:框架的脚本质量,测试用例的简单性,以及运行模块可能存在的技术弱点。为了避免出现“选择困难症”,我在此为大家准备了五种Python类型的自动化测试框架,以供比较和讨论。

图片

Robot Framework

作为最重要的Python测试框架之一,Robot Framework主要被用在测试驱动(test-driven)类型的开发与验收中。虽然是由Python开发而来,但是它也可以在基于.Net的IronPython和基于Java的Jython上运行。同时,作为一个Python框架,Robot还能够兼容诸如Windows、MacOS、以及Linux等平台。

使用先决条件

在使用Robot Framework(RF)之前,您需要先安装Python 2.7.14及以上的版本。我推荐您使用Python 3.6.4,以确保适当的注释能够被添加到代码段中,并能够跟踪程序的更改。同时,您还需要安装Python包管理器–pip。

当然,您也必须下载相应的开发框架,例如:在开发者圈子里比较流行的PyCharm社区版。另外,由于其代码段本身并不依赖于任何IDE,因此您完全可以沿用手头既有的IDE工具。

优点
  • 通过使用关键字驱动测试(keyword-driven-test)的方法,它能够帮助测试人员轻松地创建具有可读性的测试用例,进而简化了整个自动化的过程。
  • 用户能够轻松地测试数据中的语法。
  • 因为是由各种通用工具和测试库所组成,所以它不但拥有庞大的生态系统,而且可以在单独的项目中使用其各个元素。
  • 由于拥有许多类型的API,因此该框架具有高度的可扩展性。
  • 虽然并非内置功能,但是Robot可以通过Selenium Grid,来帮助用户运行各种并行测试。
缺点

虽然有着上述各种便利,但是Robot Framework在创建自定义的HTML报告方面比较繁琐。您顶多能用它来生成xUnit格式的简短报告。

另外,Robot Framework在并行测试方面也并不见长。

Robot的特点与竞品比较

由于Robot具有丰富的内置库,并能使用更为简单的面向测试的DSL(Domain Specific Language),因此如果您是自动化测试领域的新手,并且缺乏开发经验的话,那么将它作为Python测试框架要比下面将要提到的Pytest或Pyunit,更容易上手一些。当然,如果您需要开发复杂的自动化框架,那么还请使用Pytest、或其他类型的Python框架。

图片

Pytest

适用于多种软件测试的Pytest,是另一个Python类型的自动化测试框架。凭借着其开源和易学的特点,该工具经常被QA(质量分析)团队、开发团队、个人团队、以及各种开源项目所使用。鉴于Pytest具有“断言重写(assert rewriting)”之类的实用功能,许多大型互联网应用,如Dropbox和Mozilla,都已经从下面将要提到的unittest(Pyunit)切换到了Pytest之上。

使用先决条件

除了基本的Python知识,用户并不需要更多的技术储备。另外,用户只需要有一台带有命令行界面的测试设备,并且安装好了Python包管理器、以及可用于开发的IDE工具。

优点
  • 过去,开发人员必须将他们的测试包含在各种大型的类中。如今,Pytest可以让用户写出更为紧凑的测试套件。
  • 其他的测试工具会要求开发或测试人员使用调试器,或以日志检查的方式检测某个特定值的来源。而用户在用Pytest来编写测试用例时,完全可以将所有的值都存储在测试用例之中,直到再获悉有哪些值失败了、以及哪些值得到了断言。
  • 由于涉及到的样板代码(boilerplate code)并不多,因此用户能够容易地编写和理解各种测试。
  • 测试夹具(Fixture)函数常被用来向测试函数添加某个参数,并返回不同的值。在Pytest中,您可以通过使用一个夹具来模块化另外一个。同时,用户可以使用多个夹具,在无需重写测试用例的情况下,将测试覆盖到所有参数的组合。
  • Pytest开发人员通过发布各种实用插件,来保持框架的可扩展性。例如:pytest-xdist可以在不使用其他测试器的情况下,被用于执行并行测试。同时,单元测试也可以在无需复制任何代码的情况下,实现参数化。
  • 通过为开发人员提供各种特殊的例程,它能够使得测试用例的编写更为简单、更不易出错,同时代码也会变得更短、更易被理解。
缺点

上述提及的特殊例程,也意味着用户必须放弃一定的兼容性。虽然方便了用户编写测试用例,但是这些用例却无法与任何其他的测试框架一起被使用。

Pytest的特点与竞品比较

就编写功能性测试用例和开发复杂的框架而言,Pytest胜过下面将要提到的UnitTest。不过,它和Robot Framework类似,仅适用于开发出简单的测试框架。

图片

UnitTest/PyUnit

受到了JUnit启发的UnitTest/PyUnit,也是一种标准化的针对单元测试的Python类自动化测试框架。它的基类TestCase提供了各种断言方法、以及所有清理和设置的例程。因此,TestCase子类中的每一种方法都是以“test”作为名词前缀,以标识它们能够被作为测试用例所运行。用户可以使用load方法和TestSuite类来分组、并加载各种测试。

当然,您也可以通过联合使用,来构建自定义的测试运行器。正如我们使用Junit去测试Selenium那样,UnitTest也会用到UnitTest-sml-reporting、并能生成各种XML类型的报告。

使用先决条件

由于UnitTest默认使用了Python,因此我们并不需要什么先决条件。除了需要具备Python框架的基本知识,您也可以额外地安装pip、以及用于开发的IDE工具。

优点
  • 开发人员并不需要安装任何其他的模块。
  • UnitTest是xUnit的衍生产品,其工作原理与其他xUnit框架十分类似。因此对于那些没有过硬Python背景的人来说,也能很快地上手。
  • 用户能够以更为简单的方式运行单个测试用例。您只需在终端上预定好名称,该框架便可灵活地执行各种用例的测试,并产生精炼的输出。
  • 它能够在几毫秒内生成各种测试报告。
缺点

虽然该框架常用snake_case来命名各种Python代码,但是由于它源自Junit,因此仍保留了一些传统的camelCase命名方法。这往往会让人产生混淆。

由于它过多地支持了抽象方法,因此造成了测试代码的目的有时不够清晰。需要大量的样板代码。

PyUnit的特点与竞品比较

和部分Python开发人员的观点相似,我认为:Pytest能够培养测试人员以非常紧凑的方式编写出更好的自动化代码,这一编程习惯。尽管UnitTest是Python默认的自动化测试框架,但是其工作原理、及命名规则仍与标准的Python代码略有不同。同时,它也需要太多的样板代码。因此该框架并不太受欢迎。

图片

Behave

我们都知道:行为驱动开发(behavior-driven development,BDD),是一种基于敏捷软件开发的方法。它能够鼓励开发人员、业务参与者和QA人员,三者之间的协作。作为另一种Python测试框架,Behave允许团队避开各种复杂的情况,去执行BDD测试。从本质上说,该框架与SpecFlow和Cucumber非常相似,常被用于执行自动化测试。用户可以通过简单易读的语言来编写测试用例,并能够在其执行期间粘贴到代码之中。而且,那些被设定的行为规范与步骤,也可以被重用到其他的测试方案中。

使用先决条件

任何具备Python基础知识的人都可以使用Behave。其他先决条件还包括:

您必须先安装Python 2.7.14及以上的版本。

需要通过Python包管理器或pip来与Behave协作。

大多数开发人员会选择Pycharm作为开发环境,当然您也可以选用其他的IDE工具。

优点
  • 由于系统行为使用了半正式(semi-formal)语言、以及域词汇表(domain vocabulary),因此Behave有助于在组织中保持一致性的行为。
  • 让那些工作在不同模块上的开发团队,通过协调处理来具有类似的特征。
  • 其构建的各个功能块能够执行各种测试用例。
  • 由于具有更多值得用户推理和思考的细节,因此目标产品会具有更好的规范性。
  • 根据类似的规范格式,它能够让项目经理和利益相关者,对开发团队和QA团队的输出具有更清楚地了解。
缺点

只适用于黑盒测试。

Behave的特点与竞品比较

Behave最适合于诸如简单Web测试之类的黑盒测试。但是,对于那些具有复杂场景的集成测试与单元测试而言,Behave并不是一个很好的选择。作为Behave的替代品,一些开发与测试人员会推荐使用pytest-bdd。该工具融合了Pytest的所有优点,并实现了各种行为驱动测试的场景。

图片

Lettuce

Lettuce是另一种基于Cucumber和Python的行为驱动类自动化工具。Lettuce主要专注于那些具有行为驱动开发特征的普通任务。它不但简单易用,而且能够使得整个测试过程更流畅、甚至更有趣。

使用先决条件

您需要安装带有IDE的Python 2.7.14、及以上的版本。当然,您也可以使用Pycharm或任何其他IDE工具。同时,您还需要安装Python包管理器。

优点
  • 和其他BDD测试框架类似,Lettuce能够让开发人员创建多个场景,并用简单的自然语言去描述不同的功能。
  • 根据类似的规范格式,开发与QA团队能够协调共事。
  • 对于黑盒测试而言,Lettuce非常适合于那些行为驱动的测试用例。
缺点

为了成功地实现行为驱动测试,开发团队、QA人员以及利益相关者之间需要持续进行沟通。倘若缺乏此类沟通,则会产生流程模糊不清,并让团队遇到问题。竞品比较

在普通开发人员和自动化测试人员看来,Cucumber在执行BDD测试方面更为实用。而在Python开发和QA人员看来,Pytest-bdd才是的。Pytest的强大之处在于:其框架实现了紧凑且易于理解的代码,并能紧密地结合到行为驱动的测试之中。

图片

结语

综上所述,在上述五种自动化测试的Python框架中,Pytest、Robot Framework和UnitTest可主要用于功能与单元测试,而Lettuce和Behave仅适用于行为驱动测试。通过进一步比较,我们认为:对于功能测试而言,Pytest是的。如果您是基于Python自动化测试的新手,那么Robot Framework是的入门工具。虽然其功能有所受限,但是它非常容易上手。对于基于Python的BDD测试而言,Lettuce和Behave同样优秀。不过,如果你已经有了一定的Pytest经验,那么请使用Pytest-bdd,希望本文能够帮助小伙伴们选出合适的Python测试框架,并顺利开展测试工作。

图片

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序:基于MySQL+Nodejs的汽车品牌管理系统

各位好,接上期,今天分享一个通过本地MySQLNodejs服务器实现CRUD功能的微信小程序,一起来看看吧~ 干货!微信小程序通过NodeJs连接MySQL数据库https://jslhyh32.blog.csdn.net/article/details/137890154?spm1001.2014.3001.5502 …

阶段性学习汇报 4月19日

目录 一、毕业设计和毕业论文 二、学习python和vue 三、阅读知识图谱 四、下周规划 一、毕业设计和毕业论文 毕业设计后端功能基本实现,但是还有些具体的细节需要优化。前端小程序部分只有个前端页面以及部分交互逻辑,还需进一步完善。在疾病预测这里本…

力扣hot100(python解析)

文章目录 13. 合并区间14. 轮转数组 13. 合并区间 合并区间 数组 排序 思路: 代码: class Solution:def merge(self, intervals):result []if len(intervals) 0:return result # 区间集合为空直接返回intervals.sort() # 默认按照区间的左边界进…

个人开发 App 最简单方法:使用现代开发工具和平台

在移动应用市场的蓬勃发展下,个人开发者也有机会将自己的创意转化为实际的应用程序,并通过应用商店实现盈利。然而,对于许多初学者来说,如何开始个人开发一个应用可能会感到困惑。本文将介绍个人开发 App 的最简单方法&#xff0c…

【树莓派学习】系统烧录及VNC连接、文件传输

【树莓派学习】系统烧录及VNC连接、文件传输 Raspberry Pi is a series of small single-board computers (SBCs) developed in the United Kingdom by the Raspberry Pi Foundation in association with Broadcom. Since 2013, Raspberry Pi devices have been developed and…

Vitis HLS 学习笔记--优化指令-ARRAY_PARTITION

目录 1. ARRAY_PARTITION 概述 2. 语法解析 2.1 参数解释 2.1.1 variable 2.1.2 type 2.1.3 factor 2.1.4 dim 2.2 典型示例 2.2.1 dim1 2.2.2 dim2 2.2.3 dim0 3. 实例演示 4. 总结 1. ARRAY_PARTITION 概述 ARRAY_PARTITION 指令中非常重要,它用于优…

银河麒麟redis安装

一.编译和安装Redis wget http://download.redis.io/releases/redis-4.0.9.tar.gz 执行如下命令,解压包。 tar -zxvf redis-4.0.9.tar.gz 执行如下命令,进入deps目录 cd redis-4.0.9/deps 执行如下命令,编译Redis依赖库。 make -j4 hiredis l…

民航电子数据库:CAEMigrator迁移工具

目录 一、场景二、迁移步骤 一、场景 1、对接民航电子数据库 2、需要将mysql数据库迁移到民航电子数据库 3、使用CAEMigrator迁移工具 二、迁移步骤

VMware 15 虚拟机网络遇到的问题

剧情提要 通过Cent os7 的镜像文件,创建了一个虚拟机A(后面简称A),事后发现,宿主机无法ping通A 在虚拟机中通过IP a 看到的IP信息也没有只管的ip信息如图 然后执行,宿主机才能访问A。 sudo dhclient ens…

MySQL 基础语法(2)

文章目录 创建表查看表修改表表数据插入 本文为表结构相关的基础语言库相关的基础语句 创建表 CREATE TABLE table_name ( field1 datatype comment xxx, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;CREATE TABLE&#xff1…

白蚁自动化监测系统解放方案

一、系统介绍 白蚁自动化监测系统是基于物联网的各项白蚁监测点数据的采集形成智能控制系统。提供白蚁实时预警及解决方案,真正实现区域内白蚁种群消灭。白蚁入侵,系统第一时间自动报警,显示入侵位置,实现抓获白蚁于现场的关键环…

算法库应用-有序单链表插入节点

学习源头: 模仿贺利坚老师单链表排序文章浏览阅读5.9k次。  本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)//本程…

JS 分片任务的高阶函数封装

前言 在我们的实际业务开发场景中&#xff0c;有时候我们会遇到渲染大量元素的场景&#xff0c;往往这些操作会使页面卡顿&#xff0c;给用户带来非常不好的体验&#xff0c;这时候我们就需要给任务分片执行。 场景复现 我们看一段代码&#xff1a; <!DOCTYPE html> &l…

P2P面试题

1&#xff09;描述一下你的项目流程以及你在项目中的职责&#xff1f; 一个借款产品的发布&#xff0c;投资人购买&#xff0c;借款人还款的一个业务流程&#xff0c;我主要负责测注册&#xff0c;登录&#xff0c;投资理财这三个模块 2&#xff09;你是怎么测试投资模块的&am…

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好&#xff0c;我叫秋意零。 最近对公司进行日常运维工作时&#xff0c;出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时&#xff0c;业务也停了一个多小时。 起因是&#xff1a;我的部门直系领导&#xff0c;叫我**删除一个 …

vcruntime140.dll文件丢失的解决办法,为什么导致vcruntime140.dll文件丢失

废话少说&#xff0c;今天这篇文章直接和大家聊聊vcruntime140.dll文件丢失的解决办法&#xff0c;同时给大家分析vcruntime140.dll文件为什么会导致文件丢失。一起来看看吧。 vcruntime140.dll文件缺失的可能原因 A. 文件损坏或删除&#xff1a;vcruntime140.dll文件可能会…

《人工智能》大作业反馈

0 写在前面 春学期带了一门很有意思的课《人工智能与机器学习》&#xff0c;在学期初就在构思怎么才能把这门课上好&#xff0c;怎么才能让一群土木大类专业的小孩对人工智能这个领域感兴趣&#xff0c;怎么才能让他们将这个专业与自己专业结合起来。我对自己的要求就是希望自…

【C++类和对象】初始化列表与隐式类型转换

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Canal1--搭建Canal监听数据库变化

1.安装mysql 默认安装了mysql&#xff08;版本8.0.x&#xff09;&#xff1b; 新创建用户 -- 创建用户 用户名&#xff1a;canal 密码&#xff1a;Canal123456 create user canal% identified by Canal123456;授权 grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on…

使用AOP切面做防止用户重复提交功能

在我们的项目中&#xff0c;需要考虑到有时候因为网络原因或者其他原因用户对同一个接口进行同一批数据的重复性操作&#xff0c;如果不做这样的处理很可能会在数据库中添加多条同样的数据。 我们可以通过使用aop来解决这样的问题&#xff0c;接下来看看具体怎么做吧~ 自定义…