qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          Selenium并行啟動多個(gè)瀏覽器

           快速上手
            如果你對 Selenium 自動化測試已經(jīng)非常熟悉,你僅僅需要一個(gè)快速上手來使程序運(yùn)行起來。本章節(jié)的內(nèi)容能滿足不同的技術(shù)層次,但是如果你僅僅需要一個(gè)可以快速上手的指引,那么就顯得有點(diǎn)多。如果是這樣,你可以參考 Selenium Wiki 的相關(guān)文章
            什么是 Selenium-Grid ?
            Selenium-Grid 允許你在多臺機(jī)器的多個(gè)瀏覽器上并行的進(jìn)行測試,也就是說,你可以同時(shí)運(yùn)行多個(gè)測試。本質(zhì)上來說就是,Selenium-Grid 支持分布式的測試執(zhí)行。它可以讓你的測試在一個(gè)分布式的執(zhí)行環(huán)境中運(yùn)行。
            何時(shí)需要使用
            通常,以下兩種情況你都會需要使用 Selenium-Grid。
            在多個(gè)瀏覽器中運(yùn)行測試,在多個(gè)版本的瀏覽器中進(jìn)行測試,或在不同操作系統(tǒng)的瀏覽器中進(jìn)行測試。
            減少測試運(yùn)行時(shí)間。
            Selenium-Grid 通過使用多臺機(jī)器并行地運(yùn)行測試來加速測試的執(zhí)行過程。例如,如果你有一個(gè)包含100個(gè)測試用例的測試套件,你使用 Selenium-Grid 支持4臺不同的機(jī)器(虛擬機(jī)或?qū)嶓w機(jī)均可)來運(yùn)行那些測試,同僅使用一臺機(jī)器相比,你的測試所需要的運(yùn)行時(shí)間大致為其 1/4。對于大型的測試套件和那些會進(jìn)行大量數(shù)據(jù)校驗(yàn)的需要長時(shí)間運(yùn)行的測試套件來說,這將節(jié)約很多時(shí)間。有些測試套件可能要運(yùn)行好幾小時(shí)。另一個(gè)需要縮短套件運(yùn)行時(shí)間的原因是開發(fā)者檢入(check-in)AUT 代碼后,需要縮短測試的運(yùn)行周期。越來越多的團(tuán)隊(duì)使用敏捷開發(fā),相比整夜整夜的等待測試通過,他們希望盡快地看到測試反饋。
            Selenium-Grid 也可以用于支持多執(zhí)行環(huán)境的測試運(yùn)行,典型的,同時(shí)在多個(gè)不同的瀏覽器中運(yùn)行。例如,Grid 的虛擬機(jī)可以安裝測試必須的各種瀏覽器。于是,機(jī)器 1 上有 ie8,機(jī)器 2 上有 ie9,機(jī)器 3 上有最新版的 chrome,而機(jī)器 4 上有最新版的 firefox。當(dāng)測試套件運(yùn)行時(shí),Selenium-Grid 可以使測試在指定的瀏覽器中運(yùn)行,并且接收每個(gè)瀏覽器的運(yùn)行結(jié)果。
            另外,我們可以擁有一個(gè)裝有多個(gè)類型和版本都一樣的瀏覽器 Grid。例如,一個(gè) Grid 擁有 4 臺機(jī)器,每臺機(jī)器可以運(yùn)行 3 個(gè) firefox 12 實(shí)例,形成一個(gè) firefox 的服務(wù)農(nóng)場。當(dāng)測試套件運(yùn)行時(shí),每個(gè)傳遞給 Selenium-Grid 的測試都被指派給下一個(gè)可用的 firefox 實(shí)例。通過這種方式,我們可以使得同時(shí)有 12 個(gè)測試在并行的運(yùn)行以完成測試,顯著地縮短了測試完成需要的時(shí)間。
            Selenium-Grid 非常靈活。以上兩個(gè)例子可以聯(lián)合起來使用,這樣可以就可以使得不同類型和版本的瀏覽器有多個(gè)可運(yùn)行實(shí)例。使用這樣的配置,既并行地執(zhí)行測試,同時(shí)又可以測試多個(gè)瀏覽器類型和版本。
            Selenium-Grid 2.0
            Selenium-Grid 2.0 是在編寫本文時(shí)(5/26/2012)已發(fā)布的最新版本。它同版本 1 有很多不同之處。在 2.0 中,Selenium-Grid 和 Selenium-RC 服務(wù)端進(jìn)行了合并。現(xiàn)在,你僅需要下載一個(gè) jar 包就可以獲得它們。
            Selenium-Grid 1.0
            版本 1 是 Selenium-Grid 的第一個(gè)發(fā)布版本。如果你是一個(gè) 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 由一個(gè)中心和一到多個(gè)節(jié)點(diǎn)組成。兩者都是通過 selenium-server.jar 啟動。在接下來的章節(jié)中,我們列出了一些例子。
            中心接收要執(zhí)行的測試信息,包括在哪些平臺和瀏覽器執(zhí)行等。它知道每個(gè)注冊了的節(jié)點(diǎn)的配置。根據(jù)測試信息,它會選擇符合需求的節(jié)點(diǎn)進(jìn)行測試。一旦選定了一個(gè)節(jié)點(diǎn),測試腳本就會初始化 Selenium 命令,并且由重心發(fā)送給選定的要運(yùn)行測試的節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)會啟動瀏覽器,然后在瀏覽器中執(zhí)行這個(gè) AUT 的 Selenium 命令。
            我們提供了一些圖標(biāo)來演示其原理。第二張圖標(biāo)是用以說明 Selenium-Grid 1 的,版本 2 也適用并且對于我們的描述是一個(gè)很好的說明。唯一的區(qū)別在于相關(guān)術(shù)語。使用“Selenium-Grid 節(jié)點(diǎn)”替換“Selenium Remote Control”即符合我們對 Selenium-Grid 2 的描述。
            下載
            下載過程很簡單。從 SeleniumHq 站點(diǎn)的下載頁面下載 Selenium-Server jar 包。你需要的鏈接在“Selenium-Server (以前是 Selenium-RC)”章節(jié)中。
            將它存放到任意文件夾中。你需要確保機(jī)器上正確的安裝了 java。如果 java 沒有正常運(yùn)行,檢查你系統(tǒng)的 path 變量是否包含了 java.exe 的路徑。
            啟動 Selenium-Grid
            由于節(jié)點(diǎn)對中心有依賴,所以你通常需要先啟動一個(gè)中心。這也不是必須的,因?yàn)楣?jié)點(diǎn)可以識別其中心是否已經(jīng)啟動,反之亦然。作為教程,我們建議你先啟動中心,否則會顯示一些錯(cuò)誤信息,你應(yīng)該不會想在第一次使用 Selenium-Grid 的時(shí)候就看到它們。
          啟動中心
            通過在命令行執(zhí)行以下命令,可以啟動一個(gè)使用默認(rèn)設(shè)置的中心。所有平臺可用,包括 Windows Linux, 或 MacOs 。
            java -jar selenium-server-standalone-2.21.0.jar -role hub
            我們將在接下來的章節(jié)中解釋各個(gè)參數(shù)。注意,你可能需要修改上述命令中 jar 包的版本號,這取決于你使用的 selenium-server 的版本。
            啟動節(jié)點(diǎn)
            通過在命令行執(zhí)行以下命令,可以你懂一個(gè)使用默認(rèn)設(shè)置的節(jié)點(diǎn)。
            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 中。同時(shí)“localhost”假定你的節(jié)點(diǎn)和中心運(yùn)行在同一臺機(jī)器上。對于新手來說,這是最簡單的方式。如果要在兩臺不同的機(jī)器上運(yùn)行中心和節(jié)點(diǎn),只需要將“localhost”替換成中心所在機(jī)器的 hostname 即可。
            警告: 確保運(yùn)行中心和節(jié)點(diǎn)的機(jī)器均已關(guān)閉防火墻,否則你將看到一個(gè)連接錯(cuò)誤。
            配置 Selenium-Grid
            默認(rèn)配置
            JSON 配置文件
            通過命令行選項(xiàng)配置
            中心配置
            通過指定 -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 。這是一個(gè) TCP/IP 端口,被用于監(jiān)聽客戶端,即自動化測試腳本到 Selenium-Grid 中心的連接。如果你電腦上的另一個(gè)應(yīng)用已經(jīng)占用這個(gè)接口,或者你已經(jīng)啟動了一個(gè) 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.
            如果看到這個(gè)信息,你可以關(guān)掉在使用端口 4444 的進(jìn)程,或者告訴 Selenium-Grid 使用一個(gè)別的端口來啟動中心。-port 選項(xiàng)用于修改中心的端口:
            java -jar selenium-server-standalone-2.21.0.jar -role hub -port 4441
            即使已經(jīng)有一個(gè)中心運(yùn)行在這臺機(jī)器上,只要它們不使用同一個(gè)端口,就能正常工作。
            你可能想知道哪個(gè)進(jìn)程使用了 4444 端口,這樣你就可以讓中心使用這個(gè)默認(rèn)端口。使用以下命令可以查看你機(jī)器上所有運(yùn)行程序使用的端口:
            netstat -a
            Unix/Linux, MacOs 和 Windows 均支持此命令,只是在 Windows 中 -a 參數(shù)為必須的。基本上,你需要顯示進(jìn)程 id 和端口。在 Unix 中,你可以通過管道 “grep” 輸出那些你關(guān)心的端口相關(guān)的條目。
            節(jié)點(diǎn)配置
            時(shí)間參數(shù)
            獲取命令行幫助
            Selenium-Server 提供了一個(gè)可選項(xiàng)列表,每個(gè)選項(xiàng)都有一個(gè)簡短的描述。目前(2012夏),命令行幫助還有一些奇怪,但是如果你知道如何去找、如何解讀信息會對你很有幫助。
            Selenium-Server 提供了兩種不同的功能,Selenium-RC server 和 Selenium-Grid。它們是兩個(gè)不同的團(tuán)隊(duì)編寫的,所以每個(gè)功能的命令行幫助被放置在不同的地方。因此,對于新手來說,在初次使用任意一個(gè)功能時(shí),幫助都不是那么顯而易見。
            如果你僅傳遞一個(gè) -h 選項(xiàng),你將看到 Selenium-RC Server 的可選項(xiàng)而不是 Selenium-Grid 的。
            java -jar selenium-server-standalone-2.21.0.jar -h
            上述代碼將顯示 Selenium-RC server 選項(xiàng)。如果你想看到 Selenium-Grid 的命令行幫助,你需要先使用 -hub 或 -node 選項(xiàng)告訴 Selenium-Server 你想看的是關(guān)于 Selenium-Grid 的,然后再追加 -h 選項(xiàng)。
            java -jar selenium-server-standalone-2.21.0.jar -role node -h
            對于這個(gè)問題,你還可以給 -role node 傳遞一個(gè)垃圾參數(shù):
            java -jar selenium-server-standalone-2.21.0.jar -role node xx
            你將先看到 “INFO...” 和一個(gè) “ERROR”,在其后你將看到 Selenium-Grid 的命令行選項(xiàng)。我們沒有列出這個(gè)命令的所有輸出,因?yàn)樗鼘?shí)在太長了,這個(gè)輸出的最初幾行看起來如下:
          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.
            常見錯(cuò)誤
            Unable to acess the jarfile
            Unable to access jarfile selenium-server-standalone-2.21.0.jar
            無論是啟動中心還是節(jié)點(diǎn)都有可能產(chǎn)生這個(gè)錯(cuò)誤。這意味著 java 無法找到 selenium-server jar 包。你需要從 selenium-server-XXXX.jar 文件存放在目錄運(yùn)行命令或者指定 jar 包的完整路徑。

          posted on 2014-11-06 10:03 順其自然EVO 閱讀(4559) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學(xué)習(xí)

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁强县| 长汀县| 潞城市| 竹山县| 甘南县| 灌阳县| 平顺县| 嵊泗县| 龙山县| 石嘴山市| 东辽县| 太湖县| 浠水县| 罗田县| 巴东县| 青冈县| 大名县| 南江县| 平邑县| 长子县| 赤峰市| 清徐县| 剑河县| 拜泉县| 松桃| 淳化县| 鹤峰县| 手游| 东至县| 舟曲县| 龙门县| 临泽县| 嵊泗县| 来凤县| 建水县| 贺兰县| 贵德县| 天水市| 白山市| 苏尼特左旗| 潞西市|