2013-05-10 122 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