• 13
  • 12
分享

      自2018年被评选为编程语言以来,Python在各大排行榜上一直都是名列前茅。目前,它在Tiobe指数中排名第三个,仅次于Java和C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。

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


      1.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.8,以确保适当的注释能够被添加到代码段中,并能够跟踪程序的更改。同时,您还需要安装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框架。


      2.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类似,仅适用于开发出简单的测试框架。


      3.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代码略有不同。同时,它也需要太多的样板代码。因此该框架并不太受欢迎。


      4.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的所有优点,并实现了各种行为驱动测试的场景。


      5.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测试框架,并顺利开展测试工作。


作者:软件测试开发-虚竹

原文链接:https://blog.csdn.net/shuaigezhou10086/article/details/109145715

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • IT之家 9 月 14 日消息,随着美国年底购物旺季的到来,各家科技公司也在广告业务上更加上心,苹果也准备在 App Store 内增加新的广告位以让开发者购买,也就是说年底前大家可能就会在应用商店中看到更多的广告。当地时间周二,苹果向开发者发送消息,邀请他们参加线上会议,鼓励他们购买广告。邀请函显示,iOS App Store 中的新“广告位置”将在“这个假日季”及时出现。此外,Mobile Dev Memo 的开发者和创始人 Eric Seufert 在他的 Twitter 上向大家展示了这份邀请函。IT之家也因此得以知悉,苹果的网络研讨会定于 9 月 21 日星期三举行,关于结果如何,届...
            0 0 950
            分享
          •   最近小编的好友小李来找我抱怨,抱怨的内容也很简单,小李和小马在同一个部门,做着差不多的工作,薪资待遇差不多都是6K。  不久前两人相继跳槽,入职了之后,小李和小马一打听,才知道小马现在的薪资竟然有11K,而小李跳槽后的薪资才堪堪7K,这巨大的落差让小李心里十分不服气,想着自己也不比他差,同样是跳槽,怎么薪资就差了这么多?  其实在工作经验和能力差不多的情况下,这里我们就不得不谈谈谈薪技巧,在换工作时,如何和新公司谈判薪酬福利,才能在有可能的范围内,争取到福利待遇的最大化呢?  把握薪资浮动的弹性  大家都知道,无论哪一家公司,对于薪资都是有上下幅度的,没有一个固定的值。所以,跳槽时,开口谈...
            0 0 1106
            分享
          •   应用场景:设想要集中测试一个Web服务器的性能表现, 我们用一台机器模拟上千个用户不断地访问被测试的服务器,可能会遇到一些瓶颈,模拟的用户不够,服务器设置了安全措施、拒绝接收(当有超量的数据来自同一台机器在短时间内,服务器就会认为这是外来的攻击行为),测试机的配置过低、不能完成上千个用户的请求。  解决方案:利用JMeter的分布式测试配置,就可以很轻松的解决上述问题。如下图所示,我们选择一台主机(Master),然后配置一些节点服务器(Slaves),主机发送测试运行指令,节点服务器在同一时间模拟用户对终端服器发送请求。这样总模拟的用户数量 = 单个节点用户数 * 节点服务器个数  学习...
            5 4 5245
            分享
          • 一、前言618期间上线一个活动项目。但上线不顺利,当天就出现了性能问题,接口超时,用户无法打开网页,最后不得的临时下线。花了三天两夜,重构了后台核心代码,才让活动进行下去。回头看了一下自己的时间记录,从5月31号那天晚上8点25分开始准备上线,发现异常,分析原因,重构代码,离开公司时已经是6月2号的23点54,经历51小时29分,中间的睡眠时间不到5个小时,这已经是爆发小宇宙了。这一波刚过去了,一波未平另一波又起,由于活动的奖励丰厚,大批羊毛党闻风而至,某宝上公开卖脚本的都有了,严重影响了正常用户薅羊毛。某客户反馈说:我们别说薅羊毛了,现在是整头羊都被他们牵走了!接下来的几天,又得和薅羊毛的脚...
            14 14 1085
            分享
          •   最近在看单元测试的东西,想跟大家聊聊我的感受。单元测试这块说实在的,我并不太熟悉,我几乎不写单元测试,也不太爱写单元测试。  当我推广消息推送平台austin的时候,有过批评我整个项目没有单元测试,也有过让我补上单元测试的。  01、单元测试(UNIT TEST)  我有个前同事进了外企,他说进了外企以后学习了很多新名词,刚进去时都不知道他们讲的是什么...  他问我:UT你知道是什么意思吗?  我说:不知道啊。  他说:UT是Unit Test,单元测试  我说:你们现在都要写单元测试吗?  他说:是啊  后来,我在群里闲聊的时候,发现有个企鹅上班的大哥也不知道UT是什么意思,那我就放心...
            0 0 1295
            分享
      • 51testing软件测试圈微信