原文:Selenium Grid - How It Works
Selenium-RC 的問題
Selenium Grid 繼承 RC 的好處
Selenium Grid 的架構
它有一個稱之為 Selenium Hub 的元件負責掌控大局,這個 Hub 主要處理三件事情:
設置特殊環境
可以針對一個 RC 設置它的瀏覽器環境,例如「IE on Windows」、「Safari on OS X」...等,測試程式就能在某個環境下執行,Hub 會分派它到有那個環境的 RC 上。因此原本的測試程式要改這一行:
設置 Selenium Grid
很簡單,只需要安裝好以下三樣東西:
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 就取代原本的 RC 成為對外連接的橋樑,而原本在某個 RC 上面可以執行的程式,只要把 IP 改成 Hub 的 IP 就好。這樣方便測試程式編寫者在自己的機器(某個 RC 上)執行測試,或者丟到整個 grid 的大架構上測試。
- Hub 會控管所有 RC 的情況:自動分配可用的 RC 給這個測試、監控某個測試是否順利執行完畢。
- 測試程式可以不用管目前有的資源:當所有可用的(適合的) 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
很簡單,只需要安裝好以下三樣東西:
- 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)
- Ant 1.7.x:用下面指令確定你已經安裝好
$ ant -version
Apache Ant version 1.7.0 compiled on December 13 2006
- Selenium Grid:用下面指令確定你已經安裝好
$ cd selenium-grid-1.0
$ ant sanity-check