qileilove

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

          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í)

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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 象州县| 尚义县| 乐昌市| 元谋县| 安庆市| 夏河县| 宾川县| 汶上县| 贵定县| 玛多县| 平山县| 武邑县| 铅山县| 惠来县| 高台县| 梅河口市| 霍邱县| 来凤县| 平阴县| 翁牛特旗| 平泉县| 新宁县| 辽中县| 嘉鱼县| 邵阳市| 上蔡县| 东兰县| 北安市| 神池县| 清水县| 邵武市| 临泽县| 徐水县| 竹溪县| 自治县| 贵南县| 肃南| 万荣县| 丰镇市| 新巴尔虎右旗| 昔阳县|