如何將自動化測試程式佈署在多台電腦上同時執行

如何將自動化測試程式佈署在多台電腦上同時執行

這篇文章主要說明如何將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

 

Leave a Reply

Your email address will not be published. Required fields are marked *