2013-05-10 80 views
9

此前我使用Robot Framework来自动测试应用程序,但是一位新客户请求关注Spock + GEB。我从来没有使用它,但我需要快速比较这些工具中的两个并做出选择。请帮助我理解它们之间的区别以及它们各自的优缺点。Spock + GEB vs. Robot Framework

+0

您可以分享您所做的选择以及为什么 – binithb 2014-01-10 07:24:00

+0

第一个选择是RF。启动并快速获得UI的烟雾测试很简单。它扩展了python的脚本,所以我们也能够成功测试通过web服务加载xml文件,并将应用程序中的数据与DB /文件中的数据进行比较。 现在我们要切换到Geb + Spock。理解比较困难。这不是我的决定,它是使用Geb + Spock的项目方向。我刚刚开始研究它,这种方式看起来不逊色。另外我发现可以从LoadUI启动geb的脚本来进行负载测试,所以这可能是一个很好的补充。 – Evgeniy 2014-01-13 09:32:42

+1

我们已经在几个项目中使用了GEB和Robot;并在最近的机器人上继续使用Robot。我们发现的一个好处就是我们的测试团队很乐意编写机器人测试,因此我们的测试现在都由测试人员和开发人员编写(与GEB一样,它只是开发人员)。对于我们而言,我们的测试人员现在将Robot用于其他项目(主要是测试Web服务),因此他们可以轻松地在项目之间迁移,而无需为每个项目学习新的工具。编写机器人测试很简单,并且很容易让他们运行跨浏览器,这也很好。 – Bryce 2014-11-23 23:14:52

回答

10

我告诉你关于Geb,我使用gebish测试web应用程序更多6个月。这是他的所有优点:

  • 跨浏览器的自动化
  • 的jQuery样API
  • 页面对象
  • 异步性
  • 测试
  • 构建系统集成

现在更多细节他们每个人。

  • 跨浏览器的自动化

盖布充分利用了webdriver的库浏览器自动化。这意味着Geb可以与WebDriver一起使用的任何浏览器一起工作,并且WebDriver与其一起工作的浏览器列表正在不断增加。

核心支持的浏览器包括:

  • 火狐
  • 的Internet Explorer
  • 谷歌浏览器
  • 歌剧

还为实验性支持:

  • Android版Chrome
  • iPhone上的Safari & iPad的

的webdriver还支持远程驱动器。这使您可以自动运行在另一台机器上运行的浏览器!这意味着您可以轻松地从Mac或Linux机器的IE浏览器运行测试套件(反之亦然)。 jQuery的样

  • API

盖布的灵感来自jQuery来提供一个简洁而有效的方法来获得其中的内容。这被称为Navigator API。

美元函数可以在任何地方用于基于CSS选择器,属性匹配器和/或索引来选择内容。

// CSS 3 selectors 
$("div.some-class p:first[title='something']") 

// Find via index and/or attribute matching 
$("h1", 2, class: "heading") 
$("p", name: "description") 
$("ul.things li", 2) 

// 'text' is special attribute for the element text content 
$("h1", text: "All about Geb") 

// Use builtin matchers and regular expressions 
$("p", text: contains("Geb")) 
$("input", value: ~/\d{3,}-\d{3,}-\d{3,}/) 

// Chaining 
$("div").find(".b") 
$("div").filter(".c").parents() 
$("p.c").siblings() 
  • 页面对象

盖布已为页对象模式提供一流的支持,充分利用Groovy的DSL功能,使您的开发人员在很容易地定义你的页面的有趣的部分简洁,可靠和可扩展的方式。

import geb.Page 

class LoginPage extends Page { 
    static url = "http://myapp.com/login" 
    static at = { heading.text() == "Please Login" } 
    static content = { 
     heading { $("h1") } 
     loginForm { $("form.login") } 
     loginButton(to: AdminPage) { loginForm.login() } 
    } 
} 

class AdminPage extends Page { 
    static at = { heading.text() == "Admin Section" } 
    static content = { 
     heading { $("h1") } 
    } 
} 
  • 异步性

现代网页是完全一样的AJAX请求和动画异步操作。 Geb提供内置的对生活事实的支持。

任何内容查找或操作都可以包装在一个waitFor子句中。

waitFor { 
    $("p.status").text() == "Asynchronous operation complete!" 
} 

这将继续测试条件一段时间(可配置),直到它通过。可以使用相同的技术来等待内容,而不一定要使内容具有某些特征。

def dynamicParagraph = waitFor { $("p.dynamically-added") } 
dynamicParagraph.text() == "Added dynamically!" 

您也可以定义的内容应该隐含等待在页面内容DSL对象

import geb.Page 

class DynamicPage extends Page { 
    static content = { 
     dynamicParagraph(wait: true) { $("p.dynamically-added") } 
    } 
} 

根据这个定义,当请求dynamicParagraph盖布将implictly等待一定的时间为它出现。

  • 测试

盖布提供集成模块流行的测试框架,如斯波克,JUnit的,TestNG的部分,easyb和黄瓜(通过Cuke4Duke)

虽然盖布的伟大工程与所有的这些框架,它真的闪耀着Spock。 Spock是一个创新的测试框架,与Geb一起使用非常适合。使用Spock + Geb可以非常轻松地为您提供非常清晰,简洁和易于理解的测试规范。

import geb.Page 
import geb.spock.GebSpec 

class LoginSpec extends GebSpec { 
    def "login to admin section"() { 
     given: 
     to LoginPage 

     when: 
     loginForm.with { 
      username = "admin" 
      password = "password" 
     } 

     and: 
     loginButton.click() 

     then: 
     at AdminPage 
    } 
} 
  • 构建系统集成

盖布很容易集成到任何的构建系统,并与下面的生成/项目系统集成的信息和示例,请:

  • Gradle
  • Grails
  • Maven的

你可以看看我的例子(斯波克+ GEB)位置:github

了解更多关于创业板的位置:Official Site

谢谢!

+0

非常感谢您提供了如此完整和详细的回复。但是,不幸的是,我在这一切中都是一个完整的noob,下面的问题对我仍然有用: 1. GEB如何与Spock交互?我查看了官方网站,但是还没有找到我需要设置为使用Geb + Spock的信息?如何开始在我的电脑上写一个最简单的测试。 2.据我所知,所有的测试都是用groovy编写的,目的在于测试应用程序是用Java编写的。但是我不明白这个与机器人框架相比的强弱之处? 感谢您的帮助。 – Evgeniy 2013-05-12 17:15:02

+0

回答: 1)首先,您需要在PC上安装编译自动化(gradle,maven,grails),我使用gradle,因为 - DSL语言。之后,进入geb主页,看看如何配置构建文件(pom.xml - maven,build.gradle - gradle)[here](http://www.gebish.org/manual/current/build-integrations.html) – plsgogame 2013-05-13 07:22:40

+0

2)所有的测试都写在groovy - 99%的Java上,在你的测试中你可以检查GUI(网络驱动程序)+其他检查(检查数据库,检查REST等)。我认为这个框架很强大。 – plsgogame 2013-05-13 07:25:47