2009年11月10日 星期二

Selenium Docs (4) - Selenium Grid

原文:Selenium Grid - How It Works

Selenium-RC 的問題
  • RC 控制 browser 很慢,除非你的網路或者網站本來就慢,否則 RC 會變成測試上的瓶頸(bottleneck)。
  • 一個 RC 上面能「同時執行」的測試有限,實際上開啟超過 6 個瀏覽器就會影響效能。(在 IE 上更慘)
  • 如果要開很多個 RC 來避開上述問題當然也是可以,不過維護這麼多個 RC 會很困難。

Selenium Grid 繼承 RC 的好處
  • 測試程式、測試網站、RC/瀏覽器是透過 http 聯繫的,所以可以在不同機器上面。
  • 測試程式跟網站是跟某個專案有關,但是 RC 跟瀏覽器與專案無關,所以架設起來之後可以很多個專案共用。

Selenium Grid 的架構
它有一個稱之為 Selenium Hub 的元件負責掌控大局,這個 Hub 主要處理三件事情:
  • 分配一個 RC 給每個測試程式。
  • 控制每個 RC 上面執行的測試程式數量。
  • 把測試程式跟整個 Grid 架構分開(測試程式跟 Hub 在一起,RC 們在其他機器上)
這樣的 Hub 設置有三個好處:
  1. 不用改測試程式:Hub 就取代原本的 RC 成為對外連接的橋樑,而原本在某個 RC 上面可以執行的程式,只要把 IP 改成 Hub 的 IP 就好。這樣方便測試程式編寫者在自己的機器(某個 RC 上)執行測試,或者丟到整個 grid 的大架構上測試。
  2. Hub 會控管所有 RC 的情況:自動分配可用的 RC 給這個測試、監控某個測試是否順利執行完畢。
  3. 測試程式可以不用管目前有的資源:當所有可用的(適合的) RC 都在忙碌中,Hub 會先保留測試程式給的第一個指令,等待有可以用的 RC 時就自動分派過去,因此測試程式只要等待 HTTP response 就好。

設置特殊環境
可以針對一個 RC 設置它的瀏覽器環境,例如「IE on Windows」、「Safari on OS X」...等,測試程式就能在某個環境下執行,Hub 會分派它到有那個環境的 RC 上。因此原本的測試程式要改這一行:
new DefaultSelenium("localhost", 4444, **'*firefox'**, 'http://amazon.com');
變成
new DefaultSelenium("localhost", 4444, **'Firefox on Windows'**, 'http://amazon.com');
以下是整個 Selenium Grid 架構示意圖:


設置 Selenium Grid
很簡單,只需要安裝好以下三樣東西:
  1. Java 6 JDK:用下面指令確定你已經安裝好
    $ java -version
    java version "1.6.0"
    Java(TM) SE Runtime Environment (build 1.6.0-b105)
    Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)
  2. Ant 1.7.x:用下面指令確定你已經安裝好
    $ ant -version
    Apache Ant version 1.7.0 compiled on December 13 2006
  3. Selenium Grid:用下面指令確定你已經安裝好
    $ cd selenium-grid-1.0
    $ ant sanity-check
然後就照著 網站上的 Demo 玩玩看。