如何將自動化測試程式佈署在多台電腦上同時執行
這篇文章主要說明如何將Selenium網站自動化測試程式佈署到多台電腦上執行。
有幾種情境我們會需要這樣的測試執行環境:
- 瀏覽器或是平台的相容性測試。我們有 IE, FireFox, Chrome, Win7, Win8等。需要將測試程式佈署到不同的環境測試。
- 平行測試。我們希望有多台電腦可以同時執行測試,節省測試時間。
- 我們希望我多台電腦同時執行,做某些程度的網站效能測試。
要完成這樣的測試情境,需要做環境的設定並且程式做一些小修改。
Selenium GRID
Selenium提供一個測試架構讓我們可以將寫好的測試程式透過這個測試架構 Selenium GRID 將測試程式佈署到多台電腦上執行。
首先先認識兩個專有名詞。
Hub: 指的是中央控管。自動化測式程式會透過 Hub將程式佈署到各個電腦 node。
Node:執行測試程式的電腦。
那麼Hub 怎麼知道要將程式佈署到哪一個Node呢?Node 在註冊到 Hub時,必須告知 Hub,Node這台電腦上是什麼環境 FireFox or Chrome等。
那麼自動化測試程式需要 fireFox或是其他指定的瀏覽器時,Hub就將該測試程式佈署分配到對應的 Node電腦來執行。
環境與程式設定分為三大步驟
- Selenium Hub 的設定
- Selenium Node 的設定
- 程式的執行與設定
Selenium Hub 的設定
首先必須下載Selenium Server
Download version 2.46.0
http://docs.seleniumhq.org/download/
下載完後,啟動該 Selenium 為 hub
java –jar selenium-server-standalone-2.44.0.jar –role hub |
啟動之後可以用瀏覽器輸入下列網址驗證是否有啟動成功
http://<Hub_Machine_ip>:4444/
http://127.0.0.1:4444/wd/hub
Http://localhost:4444/grid/console
Selenium Node
接著設定 Selenium Node 同樣下載 selenium-server-standalone-2.44.0.jar 執行
但是參數有些不同。範例如下:
[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]
java -jar selenium-server-standalone-2.44.0.jar -role node -hub http://<HubIP>:4444/grid/register
[/pastacode]
[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]
java -jar selenium-server-standalone-2.44.0.jar -role node -browser browserName=safari -browser browserName=chrome -browser browserName=firefox -hub http://<HUB_IP>:4444/grid/register
[/pastacode]
程式如何指定需要的 Node?
Hub 怎麼知道該自動化測試程式需要佈署到哪一個 Node呢?
主要是在程式中指定 Desired Capabilities,如下列範例。其他部分的 Selenium程式完全沒有改變。
https://code.google.com/p/selenium/wiki/DesiredCapabilities
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
desired_caps = {}
desired_caps['platform'] = 'WINDOWS'
desired_caps['browserName'] = 'internet explorer'
self.driver = webdriver.Remote('http://127.0.0.1:4444/wd/hub',desired_caps)
[/pastacode]
GRID程式範例
最後舉一個完整的程式範例,該程式啟動之後,會通知 Hub,
將該程式佈署到 FireFox的Node上面執行。
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
import time, unittest
class OnInternetExplorer (unittest.TestCase):
def setUp(self) :
self.driver = webdriver.Remote(
command_executor='http://<hubIP>:4444/wd/hub',
desired_capabilities=DesiredCapabilities.Firefox)
def test_Google_Search_IE(self):
driver = self.driver
driver.get("http://www.google.com")
inputElement = driver.find_element_by_name("q")
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
[/pastacode]
參考資料
https://code.google.com/p/selenium/wiki/Grid2
https://code.google.com/p/selenium/wiki/DesiredCapabilities