Selenium并行啟動多個瀏覽器
快速上手
如果你對 Selenium 自動化測試已經(jīng)非常熟悉,你僅僅需要一個快速上手來使程序運行起來。本章節(jié)的內(nèi)容能滿足不同的技術(shù)層次,但是如果你僅僅需要一個可以快速上手的指引,那么就顯得有點多。如果是這樣,你可以參考 Selenium Wiki 的相關(guān)文章。
什么是 Selenium-Grid ?
Selenium-Grid 允許你在多臺機器的多個瀏覽器上并行的進(jìn)行測試,也就是說,你可以同時運行多個測試。本質(zhì)上來說就是,Selenium-Grid 支持分布式的測試執(zhí)行。它可以讓你的測試在一個分布式的執(zhí)行環(huán)境中運行。
何時需要使用
通常,以下兩種情況你都會需要使用 Selenium-Grid。
在多個瀏覽器中運行測試,在多個版本的瀏覽器中進(jìn)行測試,或在不同操作系統(tǒng)的瀏覽器中進(jìn)行測試。
減少測試運行時間。
Selenium-Grid 通過使用多臺機器并行地運行測試來加速測試的執(zhí)行過程。例如,如果你有一個包含100個測試用例的測試套件,你使用 Selenium-Grid 支持4臺不同的機器(虛擬機或?qū)嶓w機均可)來運行那些測試,同僅使用一臺機器相比,你的測試所需要的運行時間大致為其 1/4。對于大型的測試套件和那些會進(jìn)行大量數(shù)據(jù)校驗的需要長時間運行的測試套件來說,這將節(jié)約很多時間。有些測試套件可能要運行好幾小時。另一個需要縮短套件運行時間的原因是開發(fā)者檢入(check-in)AUT 代碼后,需要縮短測試的運行周期。越來越多的團(tuán)隊使用敏捷開發(fā),相比整夜整夜的等待測試通過,他們希望盡快地看到測試反饋。
Selenium-Grid 也可以用于支持多執(zhí)行環(huán)境的測試運行,典型的,同時在多個不同的瀏覽器中運行。例如,Grid 的虛擬機可以安裝測試必須的各種瀏覽器。于是,機器 1 上有 ie8,機器 2 上有 ie9,機器 3 上有最新版的 chrome,而機器 4 上有最新版的 firefox。當(dāng)測試套件運行時,Selenium-Grid 可以使測試在指定的瀏覽器中運行,并且接收每個瀏覽器的運行結(jié)果。
另外,我們可以擁有一個裝有多個類型和版本都一樣的瀏覽器 Grid。例如,一個 Grid 擁有 4 臺機器,每臺機器可以運行 3 個 firefox 12 實例,形成一個 firefox 的服務(wù)農(nóng)場。當(dāng)測試套件運行時,每個傳遞給 Selenium-Grid 的測試都被指派給下一個可用的 firefox 實例。通過這種方式,我們可以使得同時有 12 個測試在并行的運行以完成測試,顯著地縮短了測試完成需要的時間。
Selenium-Grid 非常靈活。以上兩個例子可以聯(lián)合起來使用,這樣可以就可以使得不同類型和版本的瀏覽器有多個可運行實例。使用這樣的配置,既并行地執(zhí)行測試,同時又可以測試多個瀏覽器類型和版本。
Selenium-Grid 2.0
Selenium-Grid 2.0 是在編寫本文時(5/26/2012)已發(fā)布的最新版本。它同版本 1 有很多不同之處。在 2.0 中,Selenium-Grid 和 Selenium-RC 服務(wù)端進(jìn)行了合并。現(xiàn)在,你僅需要下載一個 jar 包就可以獲得它們。
Selenium-Grid 1.0
版本 1 是 Selenium-Grid 的第一個發(fā)布版本。如果你是一個 Selenium-Grid 新手,你應(yīng)該選擇版本 2 。新版本已經(jīng)在原有基礎(chǔ)上進(jìn)行了更新,頁增加了一些新特性,并且支持 Selenium-WebDriver。一些老的系統(tǒng)可能仍然在使用版本 1.關(guān)于 Selenium-Grid 版本 1 的信息可以參考 Selenium-Grid website
Selenium-Grid 的 Hub 和 Nodes 是如何工作的?
Grid 由一個中心和一到多個節(jié)點組成。兩者都是通過 selenium-server.jar 啟動。在接下來的章節(jié)中,我們列出了一些例子。
中心接收要執(zhí)行的測試信息,包括在哪些平臺和瀏覽器執(zhí)行等。它知道每個注冊了的節(jié)點的配置。根據(jù)測試信息,它會選擇符合需求的節(jié)點進(jìn)行測試。一旦選定了一個節(jié)點,測試腳本就會初始化 Selenium 命令,并且由重心發(fā)送給選定的要運行測試的節(jié)點。這個節(jié)點會啟動瀏覽器,然后在瀏覽器中執(zhí)行這個 AUT 的 Selenium 命令。
我們提供了一些圖標(biāo)來演示其原理。第二張圖標(biāo)是用以說明 Selenium-Grid 1 的,版本 2 也適用并且對于我們的描述是一個很好的說明。唯一的區(qū)別在于相關(guān)術(shù)語。使用“Selenium-Grid 節(jié)點”替換“Selenium Remote Control”即符合我們對 Selenium-Grid 2 的描述。
下載
下載過程很簡單。從 SeleniumHq 站點的下載頁面下載 Selenium-Server jar 包。你需要的鏈接在“Selenium-Server (以前是 Selenium-RC)”章節(jié)中。
將它存放到任意文件夾中。你需要確保機器上正確的安裝了 java。如果 java 沒有正常運行,檢查你系統(tǒng)的 path 變量是否包含了 java.exe 的路徑。
啟動 Selenium-Grid
由于節(jié)點對中心有依賴,所以你通常需要先啟動一個中心。這也不是必須的,因為節(jié)點可以識別其中心是否已經(jīng)啟動,反之亦然。作為教程,我們建議你先啟動中心,否則會顯示一些錯誤信息,你應(yīng)該不會想在第一次使用 Selenium-Grid 的時候就看到它們。
啟動中心
通過在命令行執(zhí)行以下命令,可以啟動一個使用默認(rèn)設(shè)置的中心。所有平臺可用,包括 Windows Linux, 或 MacOs 。
java -jar selenium-server-standalone-2.21.0.jar -role hub
我們將在接下來的章節(jié)中解釋各個參數(shù)。注意,你可能需要修改上述命令中 jar 包的版本號,這取決于你使用的 selenium-server 的版本。
啟動節(jié)點
通過在命令行執(zhí)行以下命令,可以你懂一個使用默認(rèn)設(shè)置的節(jié)點。
java -jar selenium-server-standalone-2.21.0.jar -role node -hub http://localhost:4444/grid/register
該操作假設(shè)中心是使用默認(rèn)設(shè)置啟動的。中心用于監(jiān)聽請求使用的默認(rèn)端口號為 4444,這就是為什么端口 4444 被用于中心 url 中。同時“localhost”假定你的節(jié)點和中心運行在同一臺機器上。對于新手來說,這是最簡單的方式。如果要在兩臺不同的機器上運行中心和節(jié)點,只需要將“localhost”替換成中心所在機器的 hostname 即可。
警告: 確保運行中心和節(jié)點的機器均已關(guān)閉防火墻,否則你將看到一個連接錯誤。
配置 Selenium-Grid
默認(rèn)配置
JSON 配置文件
通過命令行選項配置
中心配置
通過指定 -role hub 即以默認(rèn)設(shè)置啟動中心:
java -jar selenium-server-standalone-2.21.0.jar -role hub
你將看到以下日志輸出:
Jul 19, 2012 10:46:21 AM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid server
2012-07-19 10:46:25.082:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT
2012-07-19 10:46:25.151:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}
2012-07-19 10:46:25.185:INFO:osjs.AbstractConnector:Started SocketConnector@0.0.0.0:4444
指定端口
中心默認(rèn)使用的端口是 4444 。這是一個 TCP/IP 端口,被用于監(jiān)聽客戶端,即自動化測試腳本到 Selenium-Grid 中心的連接。如果你電腦上的另一個應(yīng)用已經(jīng)占用這個接口,或者你已經(jīng)啟動了一個 Selenium-Server,你將看到以下輸出:
10:56:35.490 WARN - Failed to start: SocketListener0@0.0.0.0:4444
Exception in thread "main" java.net.BindException: Selenium is already running on port 4444. Or some other service is.
如果看到這個信息,你可以關(guān)掉在使用端口 4444 的進(jìn)程,或者告訴 Selenium-Grid 使用一個別的端口來啟動中心。-port 選項用于修改中心的端口:
java -jar selenium-server-standalone-2.21.0.jar -role hub -port 4441
即使已經(jīng)有一個中心運行在這臺機器上,只要它們不使用同一個端口,就能正常工作。
你可能想知道哪個進(jìn)程使用了 4444 端口,這樣你就可以讓中心使用這個默認(rèn)端口。使用以下命令可以查看你機器上所有運行程序使用的端口:
netstat -a
Unix/Linux, MacOs 和 Windows 均支持此命令,只是在 Windows 中 -a 參數(shù)為必須的。基本上,你需要顯示進(jìn)程 id 和端口。在 Unix 中,你可以通過管道 “grep” 輸出那些你關(guān)心的端口相關(guān)的條目。
節(jié)點配置
時間參數(shù)
獲取命令行幫助
Selenium-Server 提供了一個可選項列表,每個選項都有一個簡短的描述。目前(2012夏),命令行幫助還有一些奇怪,但是如果你知道如何去找、如何解讀信息會對你很有幫助。
Selenium-Server 提供了兩種不同的功能,Selenium-RC server 和 Selenium-Grid。它們是兩個不同的團(tuán)隊編寫的,所以每個功能的命令行幫助被放置在不同的地方。因此,對于新手來說,在初次使用任意一個功能時,幫助都不是那么顯而易見。
如果你僅傳遞一個 -h 選項,你將看到 Selenium-RC Server 的可選項而不是 Selenium-Grid 的。
java -jar selenium-server-standalone-2.21.0.jar -h
上述代碼將顯示 Selenium-RC server 選項。如果你想看到 Selenium-Grid 的命令行幫助,你需要先使用 -hub 或 -node 選項告訴 Selenium-Server 你想看的是關(guān)于 Selenium-Grid 的,然后再追加 -h 選項。
java -jar selenium-server-standalone-2.21.0.jar -role node -h
對于這個問題,你還可以給 -role node 傳遞一個垃圾參數(shù):
java -jar selenium-server-standalone-2.21.0.jar -role node xx
你將先看到 “INFO...” 和一個 “ERROR”,在其后你將看到 Selenium-Grid 的命令行選項。我們沒有列出這個命令的所有輸出,因為它實在太長了,這個輸出的最初幾行看起來如下:
Jul 19, 2012 10:10:39 AM org.openqa.grid.selenium.GridLauncher main INFO: Launching a selenium grid node org.openqa.grid.common.exception.GridConfigurationException: You need to specify a hub to register to using -hubHost X -hubPort 5555. The specified config was -hubHost null -hubPort 4444 at org.openqa.grid.common.RegistrationRequest.validate(RegistrationRequest.java:610) at org.openqa.grid.internal.utils.SelfRegisteringRemote.startRemoteServer(SelfRegisteringRemote.java:88) at org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:72) Error building the config :You need to specify a hub to register to using -hubHost X -hubPort 5555. The specified config was -hubHost null -hubPort 4444 Usage : -hubConfig: (hub) a JSON file following grid2 format. -nodeTimeout: (node) <XXXX> the timeout in seconds before the hub automatically ends a test that hasn't had aby activity than XX sec.The browser will be released for another test to use.This typically takes care of the client crashes. |
常見錯誤
Unable to acess the jarfile
Unable to access jarfile selenium-server-standalone-2.21.0.jar
無論是啟動中心還是節(jié)點都有可能產(chǎn)生這個錯誤。這意味著 java 無法找到 selenium-server jar 包。你需要從 selenium-server-XXXX.jar 文件存放在目錄運行命令或者指定 jar 包的完整路徑。
posted on 2014-11-06 10:03 順其自然EVO 閱讀(4559) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學(xué)習(xí)