2010-05-18 91 views
16

我想听听其他人使用Robot Framework进行自动验收测试的经验。使用Robot Framework for ATDD

它的主要优点和缺点以及与其他框架(主要是Fitnesse和Selenium)的比较有哪些?

将要测试的代码是实时的遗留代码,主要在C++中。

+2

你到底做了什么? – David 2014-07-23 06:50:51

回答

20

我在三家不同的公司使用Robot Framework,这些公司在我写这篇文章时跨越了大约六年,并且都以某种方式取得了成功。

我的经验

公司1

我用机器人的第一个地方是一个顶级的网络旅游公司基于Java的Web应用程序。我们使用了Robot with Jython,它让我们用Java创建关键字,并直接与待测系统一起工作。我们使用硒来驱动网络浏览器,我们的大部分测试都在Firefox上。尽管测试工作在QA组织中取得了很大的成功,但开发组织并未接受它 - 他们倾向于使用JUnit而不是Robot。

公司2

我觉得我的第二家公司是一个不合格的成功。我们以多种方式使用Robot。主要用途是驱动IE进行高度成功的商业.NET Web应用程序的验收和回归测试。我们还用它来结合硒和苹果来测试iPad应用程序。我们使用Robot来测试向应用程序提供数据的RESTful服务。我们编写了专门的关键词让我们进行图像分析,并且我们还使用机器人测试在每次训练之前快速分析我们的训练设备。我们有关键字让我们在测试之前快照数据库,并在测试后恢复数据库。

我们也开始使用机器人来帮助手动测试。我们在Robot中添加了手动测试用例,这让我们可以利用Robot的报告和标记功能。当这些测试运行时,他们会提示用户执行手动步骤,与我们让测试人员从测试用例管理工具或Word文档中读取手动步骤相比,这些步骤已被证明效率更高。

公司3

第三家公司是一家大型企业($ 1B收入)有相当大的IT人员。他们的测试人员的技术水平很低(我记得一个不知道命令行是什么的人)。我们有一个团队致力于编写一组核心关键词,并为其他团队提供培训和指导。我认为使用机器人有助于从最不熟练的测试人员那里获得一些用途,但即使使用高级别关键字,也是与他们斗争的。

公司4

最近,我搬到了一个非常小的公司,只是一个少数开发商也没有专门的测试人员。我们接受使用page objects与机器人框架,我们现在有一个非常稳定的易读高级别验收测试套件。在这家公司使用机器人取得了无与伦比的成功。

优势

机器人的最大的优势在于它的灵活性。我们使用Robot来支持手动测试,SOAP和REST服务测试,基于Web的UI测试,数据库测试,图像测试以及移动应用测试。由于Robot很容易通过附加库扩展,如果您愿意卷起袖子并编写一些关键字,几乎没有任何东西可以测试。根据您的设置,您可以使用Python,Java,.NET编写关键字,或者通过Robot远程API编写关于任何语言的关键字。

由于机器人测试用例和关键字是用纯文本编写的,因此您并未锁定使用专有工具来创建或查看测试。用户可以选择他们选择的工具 - Visual Studio,Eclipse,Emacs,记事本等。还有一个特定于机器人的IDE(RIDE),尽管我不推荐它。另外,由于文件是纯文本,他们与其他软件工具集成以及 - 它们很容易区别和合并,搜索等

弱点

机器人可以很容易地编写低质量的测试。尽管可以记录关键字和测试用例,并且为关键字,测试用例和变量使用人类可读的名称,但没有好的方法来执行最佳实践。编写大量测试和关键字需要纪律。俗话说,机器人给你足够的绳索,让自己与之挂钩。

另一个弱点是机器人的进度很慢。从好的一面来说,机器人强健且相对无bug,所以对频繁补丁的需求并不是很大。但是,有些功能请求在问题追踪器中多年来一直没有动静,这可能令人沮丧。

摘要

在我们享受能够利用由机器人的语法来创建数据驱动测试,BDD风格的测试,以及简单的程序测试,所提供的灵活性的所有公司。在所有情况下,因为测试是纯文本文件,测试资产易于使用我们的SCM工具(Mercurial,Subversion,Git)进行管理。

对我来说,Robot已经被证明是易于使用的,非常容易扩展以及对python函数的单元测试,Web服务测试,基于浏览器和平板电脑UI测试,图像测试,数据库测试甚至提高效率等广泛的测试任务有用的手动测试。

+0

感谢您的信息。您是否有任何现有的测试基础架构需要集成并与RF一起使用? – ratkok 2011-06-26 14:10:22

+0

不,我们没有现有的基础设施。 – 2011-09-14 11:00:22

+0

有点复活,但我不明白你对公司喜欢使用Junit的开发团队的评论。 Junit和Robot指的是完全不同的测试类型,这听起来像是公司的成功,因为开发人员专注于单元测试,QA团队处理功能测试 – shicky 2015-02-02 14:04:06

14

一年多来,我们一直在我的工作场所使用Robot Framework,并取得了中等成功。像海报一样,我们也做C++工作。我们花了一些时间来评估对FitNesse的/修身机器人,并在当时,这两种解决方案是好的,但决定因素(截至〜2009年):

  • 这是更清晰的机器人及其报告如何将缩减大项目
  • 它不明显如何版本控制FitNesse的文物

从技术角度来看,我们一直使用SWIG机器人和C之间的桥梁++。我们将测试夹具包装在SWIG中,并将其与测试中的生产代码链接起来 - 给我们一个可以由Robot导入的python模块。

我们对机器人输入几乎完全使用.txt格式 - 我们发现这个版本控制得更好,读起来更容易,而且我们根本没有使用HTML的高级功能(这是我们开始的地方) 。另外,我们也使用"BDD Style"机器人语法。我们使用GoogleMock和一些包装来帮助我们设定在每次机器人测试拆解期间检查的期望值。

至于组织的测试中,我们已经选定了以下方法(灵感来自Dale Emery's approach given here):

  • 主要的功能层次由一个文件夹结构表示。
  • 一个特征尺寸的东西在机器人测试文件名中描述。
  • 机器人测试用例名称中使用了该功能各部分的说明。
  • 给出了一个例子作为测试用例中的步骤。
  • 示例文本被分解成使用Robot“keywords”的步骤。
  • 测试夹具驱动生产代码。

例如,一个电话可能是这样的:

// PhoneProject/MakingCalls/DialAPhoneNumber.txt 

*** Test Case *** 
A user can dial a US number with an area code, up to 10 digits 
    Given a phone without any numbers dialed 
    Expect the attempted phone number to be 123-456-7890 
    When a user enters the numbers 1234567890 


// A separate MakingCallsKeywords.txt or something similar 
*** Keyword *** 
Given a phone without any numbers dialed    CreateNewDialer 
Expect the attempted phone number to be ${phoneNumber} ExpectDialedNumber ${phoneNumber} 
When a user enters the numbers ${numbersEntered}  DialNumbers ${numbersEntered} 

// MakingCallsFixture.cpp (which gets wrapped by SWIG) 

std::wstring MakingCallsFixture::DialNumbers(const std::wstring& numbersEntered) 
{ 
    ... Drive production code ... 
} 

// CreateNewDialer, ExpectDialedNumber also go here 

我们会再与覆盖拐角条件的单元测试配对这件事(例如,确保不超过10位被允许) - 或者这可能是另一个验收测试(可执行规范),取决于谁在阅读测试以及他们对域的熟悉程度。

在开始工作之前,我们创建了这些规范的草案并与领域专家和团队一起审核。这有助于尽早消除一些误解。

+0

伟大的信息。不知道关于SWIG,这是整合用Robot Framework驱动的低级代码C/C++的好方法。除此之外,我的另一个想法是实现一个基于C/C++的XML-RPC服务器作为远程库,与Robot交谈来调用C/C++代码。 – David 2012-07-25 05:56:12

0

我用机器人框架下列情况下
UI测试
1.机器人框架是测试UI 2.框架提供了可用于编写测试用例乘坐编辑器真的很不错。 3.你不必是硒的专家,硒的命令 可以在乘车编辑器中搜索。 4.您可以通过使用关键字共享代码并共享
资源。允许您简单地重用测试用例并测试库代码。 5您可以轻松调用python库函数来完成更多繁琐的任务。

对于服务测试,我发现机器人框架很难用于我正在进行的一种测试自动化。
。我们的应用程序服务层完全用C/C++编写。我个人使用Windows笔记本电脑,我们的应用程序驻留在Linux服务器上。
我发现fitnesse框架更有帮助和更简单的做自动化。 Fitnesse下面提到了允许轻松编写测试用例的额外功能。我无法在Robot中找到类似的功能。

决策表 - 您可以使用Microsoft xls格式编写测试用例。数据网格中的每一行代表一个测试用例。每行将有一组输入和输出。输出将在标题前加上问号。

查询表 - 测试输出将是您希望验证的数据列表。

此外,fitnesse允许与其他语言如C(使用Slim服务)轻松集成。这不需要任何集成编码。 Fitnesse测试用例直接执行测试装置,获取者,设置者。

总结我的经验:

  • 找到易于使用的UI自动化。

  • 发现它很难用于服务自动化。