自动化测试框架Cucumber和RobotFramework的对比

一、摘要

自动化测试可以快速自动完成大量测试用例,节约巨大的人工测试成本;同时它需要拥有专业开发技能的人才能完成开发,且需要大量时间进行维护(在需求经常变化的情况下),所以大部分具有很好开发技能的人员不是很愿意编写自动化用例。但由于软件规模的高速增长,人力资源的逐步稀缺,自动化测试已是势在必行。

对于自动化测试首先需要保证其功能是对客户有价值的和正确可用的。而这一切的基础就是用例要能测试客户的需求,期望,最好能让客户参与到测试用例的开发过程中来或让客户评审测试用例,因此出现了ATDD、BDD等各种理论方法来支撑这一行为。现有很多自动化测试工具可支持ATDD、BDD等,比如Cucumber1、RobotFramework2、SpecFlow3、JBehave4、Fitness5、Concordion6等。其中Cucumber和RobotFramework是最流行的两个框架,但许多人在第一次选择测试框架时因缺乏实践经验而困惑,所以今天为大家分享这两款框架在几个项目上的经验及对比,方便大家在以后的项目上能正确地选择这两款测试框架。

首先看一下这两款工具的简单对比。


Cucumber


RobotFramework


编程语言支持


Java,Ruby,JavaScript etc.7


Python, Java, C


支持的系统


所有主流系统


所有主流系统


主要的IDE


IntelliJ,RubyMine, Eclipse


RIDE, IntelliJ, PyCharm, Eclipse


费用


免费


免费


多国语言支持


UTF-8


用户关键字及用例层面支持UTF-8

二、案例

----案例省略

案例1:

当时法国团队的架构师提出选用Cucumber作为自动化测试框架来测试这个系统,项目需要支持多国语言,且需要同时做服务器和手机端的功能测试,甚至在一个测试场景中既包含服务器测试部分,又含手机端测试部分,而使用基于Cucumber的测试系统很好的满足了我们的需求,其中手机端的功能测试用的是Calabash8。Calabash是一个手机功能测试系统,它使用Cucumber将Android的测试框架Robotium9和iOS的测试框架Frank10封装了起来,使得Cucumber的Step可以调用Robotium和Frank进行测试。这样就可以实现一个测试场景里面既包含手机端测试,又包含服务器端测试,比如:

I "submit" update to "Facebook" with "I am happy today" on "Android"

I "get" update on "Facebook” with "I am happy today" on "Server"

实现方式是在Calabash中使用Ruby实现一层胶水代码,和服务器测试功能测试代码连结起来,并根据不同的Step调用不同的测试驱动层代码从而实现同一个测试用例同时包含服务器端和手机端测试。虽然这样的测试用例不会很多,但它却有效的表达了端到端的系统集成测试,让测试集合更加丰满。

如果重新选择测试工具,我还是会选择Cucumber和Calabash,主要原因是它们可以方便的统一做手机和服务器的功能测试。虽然RobotFramework配合Selenium也能实现类似的功能,但是需要使用RobotFramework对Selenium重新进行封装,没有Calabash方便易用。

通过上面四个案例,展示了在不同的项目中实际使用Cucumber和RobotFramework时的一些经验和选择它们的理由。但对于Cucumber和RobotFramework更多的知识点,下面有一个更为详细的对比表。


Cucumber


RobotFramework


亮点

  • 使用自然语言,更易读
  • 支持表格参数14
  • 支持多种格式的Report:html、junit etc.
  • 支持多种语言
  • 支持四种状态的测试步骤15:Passed、Failed、Skipped、Pending
  • 支持使用变形器消除重复16
  • 一个商用的在线Cucumber系统:Cucumber Pro17
  • 使用关键字的机制,更容易上手
  • 提供了RIDE,对于不熟悉编码的人来说比较友好
  • 能够精细的控制关键字的scope19
  • Log和Report非常好20
  • 使用变量文件的机制来描述不同的环境21
  • 丰富的关键字库22
  • 内置变量23

不足

  • 缺乏类似RIDE对纯测试人员友好的专用工具
  • 不支持类似于Cucumber中的表格参数14
  • 使用Jython版本测试运行启动慢

Jenkins支持


支持


支持


Maven支持


支持


支持


开发效率


高效-Jetbrains系列的IDE


高效-RIDE和Jetbrains系列的IDE


商业支持


支持18



社区支持


广泛


广泛

三、测试工具选择的一般性原则

在上述的实战案例中,针对项目的具体情况我们对Cucumber和RobotFramework这两种工具进行了取舍。本节就来总结一下这些取舍的考虑因素。

首先来看一下自动化验收测试的层次:

然后对每层进行分析:

  1. 最下面是被测系统,需要明确它的形态,比如是Web系统、REST系统或者特定协议系统。
  2. 中间是测试库。比如Selenium、SSH、Scapy等,有了它们用例才能和被测系统进行交互,所以需要根据被测系统的形态来选择相应地测试库。该层的选择需要考虑几个因素:
    • 测试库的易用程度。
    • 测试库是否有良好的商业或者开源社区的支持。
    • 团队成员是否熟悉测试库使用的编程语言。
  3. 最上层则是测试框架,也就是Cucumber和RobotFramework这一层。其作用包括用例管理、测试数据管理、测试运行、测试报告等。该层的选择需要考虑几个因素:
    • 这一层会通过函数调用的方式和测试库打交道,因此测试框架必须支持测试库所使用的编程语言。
    • 是否提供易用的测试用例开发环境,比如是否有如RIDE这样的专用工具,或者Intellij的IDE的插件。
    • 引入某个测试框架之后对现有工作模式的影响程度,比如让不懂编程的测试人员写代码。

以上这些点是从RobotFramework和Cucumber的对比中总结出来的,但如果你想要选择这两者之外的其他框架,同样可以考虑上述这些原则。

四、总结

对于这两个工具本身来讲,只需要清楚它们各自的特点,根据项目本身的情况和需求选择就可以了,简单地说就是:知行合一。

  1. http://cukes.info/
  2. http://robotframework.org/
  3. http://www.specflow.org/
  4. http://jbehave.org/
  5. http://www.fitnesse.org/
  6. http://concordion.org/
  7. https://cukes.info/docs#cucumber-implementations
  8. https://github.com/calabash
  9. https://code.google.com/p/robotium/
  10. http://www.testingwithfrank.com/
  11. https://github.com/cucumber/cucumber-jvm
  12. http://secdev.org/projects/scapy/
  13. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#creating-test-libraries
  14. https://cukes.info/docs/reference#data-tables
  15. https://github.com/cucumber/cucumber/wiki/Step-Definitions
  16. https://github.com/cucumber/cucumber/wiki/Step-Argument-Transforms
  17. https://cucumber.pro/
  18. http://cukes.info/support
  19. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#test-library-scope
  20. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#report-file
  21. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#variable-files
  22. http://robotframework.org/#test-libraries
  23. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#built-in-variables

摘自:http://www.infoq.com/cn/articles/cucumber-robotframework-comparison

时间: 2024-07-29 08:19:18

自动化测试框架Cucumber和RobotFramework的对比的相关文章

自动化测试框架Cucumber和Robot Framework的实战对比

自动化测试框架Cucumber和RobotFramework的实战对比 一.摘要 自动化测试可以快速自动完成大量测试用例,节约巨大的人工测试成本:同时它需要拥有专业开发技能的人才能完成开发,且需要大量时间进行维护(在需求经常变化的情况下),所以大部分具有很好开发技能的人员不是很愿意编写自动化用例.但由于软件规模的高速增长,人力资源的逐步稀缺,自动化测试已是势在必行. 对于自动化测试首先需要保证其功能是对客户有价值的和正确可用的.而这一切的基础就是用例要能测试客户的需求,期望,最好能让客户参与到测

自动化测试框架对比(UIAutomator、Appium、Robotium)

一.原理 1.UiAutomator——基于UIAutomation的用户界面自动化测试框架,可以跨应用工作,谷歌亲生的. UIAutomation在Android4.3发布时有了新版本,官方简介:http://blog.csdn.net/zhubaitian/article/details/40504827. Android4.3之前:使用inputManager或者更早的WindowsManager来注入KeyEvent Android4.3之后:使用Accessibility APIs来注

RobotFramework自动化测试框架(1)- RobotFramework简介

对于RobotFramework自动化测试框架,我这里会从三个单元进行阐述,希望能对你有帮助. RobotFramework简介 RobotFramework是什么? Robotframework 是由python编写的,一个开源的基于关键词驱动的自动化测试框架,它可以做基于UI或者接口的验收测试,有着非常简单易用的语法.它的一大特点就是可以使用java&python去扩展自定义一些测试库以及基于一些已有的关键词自定义一些高级关键词,这就意味着如果官方以及第三方提供的一些测试库没法满足项目的测试

RobotFramework自动化测试框架-MongoDBLibrary库的使用

笔者接着 RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作) 继续分享robotframework 对数据库中的MongoDB的详细操作.这是笔者第二篇关于robotframework 对数据库的操作的分享介绍. MongoDB是非常常用的一个非关系型数据库,在RobotFramework中,也提供了对MongoDB数据库测试操作的支持.我们可以通过在浏览器中访问github的网站地址 https://github.com/iPlantColla

RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramework中如何使用Selenium进行自动化测试. 本文章节目录: 1.Get Value 2.Get Webelements和Get Webelement 3.Get Window Titles 4.Go Back 和 Go To 5.Get List Items 6.Get Selected List

移动APP自动化测试框架

简介 移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的"变", 变化导致自动化用例的大量维护.从分层测试的角度,自动化测试应该逐层进行.最大量实现自动化测试的应该是单元测试,最容易实现也最容易在早期发现问题:其次是接口级测试,以验证逻辑为目的进行自动化,由于接口的相对稳定,自动化测试成本相对也可以接受:自动化成本最大的便是UI级自动化测试,然而UI界面是直接反馈给用户的效果展示,适度的尤其是BVT级的自动化测试也是非常必要的.本文通过分析几种自动化框架的异同,使测试人员

Android 自动化测试框架

Android常用的自动化测试工具框架: Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk 但是这些工具框架都有什么关系呢,先通过一张图来了解一下吧.(图是某博客上借过来的) 是不是一脸懵逼,不知道这是什么鬼.下面详细了解一下. 一.Monkey 是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键输入,触摸屏输入,手势输入等),实现对正在开发的应用

android常用自动化测试框架

目录: Monkey MonkeyRunner Instrumentation UiAutomator Espresso Selendroid Robotium Athrun Appium Monkey Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出.实际上该工具只能为程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性. $~: android

基于Ruby的Watir-WebDriver自动化测试框架

Watir-WebDriver       —— 软件测试的自动化时代 QQ群:160409929 支持哪些浏览器? 几乎所有的浏览器: 比如Firefox, Chrome 和IE,除了Safari. 支持网页上哪些元素? watir-webdriver支持所有的HTML元素 运行模式是什么? Watir-WebDriver是基于ruby开发web驱动框架 自动化测试框架 根据不同业务开发相应自动化用例,由Ruby测试框架统一调用分析展示.实现出入口统一,工具类封装:降低用例开发复杂度,框架统一