Selenium-Grid官方文檔翻譯

1 Selenium-Grid

Note:我們現在正在研究這一章。目前我們已經爲大家介紹了Selnium-Grid的新用法。接下來的幾個月我們將提供有用的例子和插圖來徹底介紹怎麼使用Selnium-Grid。

1.1 快速開始

如果您已經在Selenium測試自動化方面有經驗,您可能只需要快速啓動即可啓動並運行。本章提供了許多與技能水平相關的信息,但如果您只是尋找快速參考來快速嘗試,那可能太多了。有關快速入門的信息,請參閱Selenium Wiki中的Selenium-Grid文章。

1.2 什麼是Selenium-Grid

Selenium-Grid允許您在不同的計算機上針對不同瀏覽器並行運行測試。也就是說,在運行不同瀏覽器和操作系統的不同機器上同時運行多個測試。本質上,Selenium-Grid支持分佈式測試執行。它允許在分佈式測試執行環境中運行測試。

1.3 什麼時候使用它

一般來說,你可能想要使用Selenium-Grid有兩個原因。

  • 運行多個瀏覽器、多個瀏覽器版本和運行在不同操作系統上的瀏覽器的測試。
  • 減少測試套件完成測試通過所需的時間。

Selenium-Grid用於通過使用多臺機器並行運行測試來加速執行測試。例如,如果您有一套100個測試,但是您將Selenium-Grid設置爲支持4臺不同的機器(虛擬機或單獨的物理機器)來運行這些測試,那麼您的測試套件將大致完成四分之一的時間就像在單臺機器上依次運行測試一樣。對於大型測試套件和長期運行的測試套件,例如那些執行大量數據驗證的測試套件,這可以是一個重要的節省時間的方法。一些測試套件可能需要幾小時才能運行。提高運行套件所花費時間的另一個原因是在開發人員爲AUT註冊代碼之後縮短測試結果的週轉時間。越來越多從事敏捷軟件開發的軟件團隊希望儘快獲得測試反饋,而不是通宵等待一個測試通過。

Selenium-Grid還用於支持針對多個運行時環境的運行測試,特別是在同一時間針對不同瀏覽器進行測試。例如,可以設置虛擬機的“網格”,每個虛擬機支持要測試的應用程序必須支持的不同瀏覽器。所以,機器1有Internet Explorer 8、機器2有Internet Explorer 9、機器3有最新的Chrome和機器4有最新的Firefox。運行測試套件時,Selenium-Grid接收每個測試瀏覽器組合,並將每個測試分配給其所需的瀏覽器。

另外,可以有一個相同的瀏覽器,類型和版本的網格。例如,可以有一個由4臺機器組成的網格,每臺機器運行3個Firefox實例,共12個,允許在可用的Firefox實例中有一個“服務器農場”(在某種意義上)。當套件運行時,每個測試都傳遞給Selenium-Grid,Selenium-Grid將測試分配給下一個可用的Firefox實例。通過這種方式,可以獲得12次測試同時並行運行的測試通行證,大大縮短了完成測試所需的時間。

Selenium-Grid非常靈活。這兩個示例可以結合使用,以允許每個瀏覽器類型和版本的多個實例。像這樣的配置將同時提供並行執行,以便快速完成測試,並同時支持多種瀏覽器類型和版本。

1.4 Selenium-Grid 2.0

Selenium-Grid 2.0是本文檔撰寫(2012年5月26日)的最新版本。與Selenium-Grid的第一版完全不同。在2.0 Selenium-Grid與Selenium-RC服務器合併。現在,您只需下載一個.jar文件即可將遠程Selenium-RC-Server和Selenium-Grid全部集成到一個包中。

1.5 Selenium-Grid是如何工作的-使用 Hub(集線器) 和 Nodes(節點)

網格(grid)由一個集線器和一個或多個節點組成。兩者都是使用selenium-server.jar可執行文件啓動的。我們在本章的以下部分列舉了一些例子。

集線器接收一個要執行的測試,以及測試應該在哪個瀏覽器和“平臺”(如WINDOWS,LINUX等)上運行的信息。它“知道”每個已”註冊“到集線器的節點的配置。使用這些信息,它選擇一個可用的節點,該節點具有所請求的瀏覽器平臺組合。一旦節點被選中,測試啓動的Selenium命令將被髮送到集線器,並將其傳遞給分配給該測試的節點。該節點運行瀏覽器,並在該瀏覽器中執行鍼對被測試的應用程序的Selenium命令。

1.6 安裝

安裝很簡單。從SeleniumHq網站的下載頁面(http://www.seleniumhq.org/download/)下載Selenium-Server jar文件。您需要“Selenium Standalone Server(以前的Selenium-RC)”部分下的鏈接。

將其安裝在您選擇的文件夾中。您需要確保java可執行文件在您的執行路徑上,以便您可以從命令行運行它。如果沒有正確運行,請驗證您的系統路徑變量是否包含java.exe的路徑。

1.7 開始Selenium-Grid

一般來說,由於節點依賴於集線器,因此首先啓動集線器。但是,這並不是絕對必要的,因爲節點可以識別集線器何時啓動,反之亦然。不過,對於學習目的而言,首先啓動集線器會更容易,否則,您將會看到錯誤消息,可能不想從第一次使用Selenium-Grid開始。

1.7.1 啓動一個Hub

若要啓動帶有默認參數的集線器,請從命令行shell運行以下命令。這將適用於所有支持的平臺,Windows Linux或Mac OSX。

java -jar selenium-server-standalone-3.8.1.jar -role hub

這將使用默認參數值啓動集線器。我們將在下面的小節中解釋這些參數。請注意,您可能必須更改jar文件名中的版本號,具體取決於您使用的是哪個版本的selenium-server。

1.7.2 啓動節點(node)

要使用默認參數啓動節點,請從命令行運行以下命令。

java -jar selenium-server-standalone-3.8.1.jar -role node  -hub http://localhost:4444/grid/register

這假定集線器已經使用默認參數在上面啓動了。集線器用於偵聽新請求的默認端口是端口4444.這就是爲什麼在URL中使用端口4444來定位集線器的原因。同樣,“localhost”的使用假設你的節點和你的集線器在同一臺機器上運行。爲了開始,這可能是最簡單的。如果在不同的機器上運行集線器和節點,只需將“localhost”替換爲運行集線器的遠程機器的主機名即可。

警告:請務必關閉運行集線器和節點的計算機上的防火牆。否則,您可能會收到連接錯誤。

1.8 配置Selenium-Grid

1.8.1 默認配置

1.8.2 JSON配置文件

1.8.3 通過命令行選項配置

1.9 Hub配置

要使用默認選項運行集線器,只需指定-role hub到Selenim-Server

java -jar selenium-server-standalone-3.8.1.jar -role hub

您應該能看到以下日誌記錄輸出。

13:52:09.680 INFO - Selenium build info: version: '3.8.1', revision: '6e95a6684b'
13:52:09.681 INFO - Launching Selenium Grid hub
2018-01-17 13:52:51.314:INFO:osjs.Server:main: jetty-9.4.7.v20170914
2018-01-17 13:52:10.398:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@80ec1f8{/,null,AVAILABLE}
2018-01-17 13:52:10.421:INFO:osjs.AbstractConnector:main: Started ServerConnector@6c763753{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}

1.9.1指定端口

集線器使用的默認端口是4444.這裏引用的端口是“客戶端”(即自動測試連接到Selenium-Grid集線器)時使用的TCP / IP端口。如果您的計算機上的另一個應用程序已經在使用此端口,或者您已經啓動了Selenium-Server,則會在日誌輸出中看到以下消息。

java.net.BindException: Address already in use

如果發生這種情況,可以關閉使用端口4444的其他進程,也可以讓Selenium-Grid爲其Hub使用不同的端口。使用-port選項更改集線器使用的端口。

java -jar selenium-server-standaloe-3.8.1.jar -role hub -port 4441

即使另一個Hub已經在同一臺機器上運行,也就是說,只要它們都不使用端口4441,這將工作。

但是,您可能想查看使用端口4444的進程,因此您可以允許Hub使用默認設置。要查看機器上所有正在運行的程序使用的端口,請使用該命令。

netstat -a

這應該適用於所有支持的系統,Unix / Linux,MacOs和Windows,儘管可能需要超出-a之外的其他選項。基本上你需要顯示進程ID和端口。在Unix中,您可以從端口號中“輸入”輸出(使用管道),只顯示您所關心的記錄。

1.10 節點配置

1.11 時序參數

1.12 定製網格

1.12.1 在Hub和/或node添加自定義

網格允許您定義自己的servlet,然後將它們插入Hub(或)到node(節點)中。這使您可以在Hub端(或)在Node端添加自定義設置。讓我們舉一個例子來更詳細的理解這個定製需求。

爲了調試的目的,我們希望能夠訪問所有node(節點)生成的日誌。唯一的問題是,我們需要啓用日誌記錄到節點運行的每臺機器上。除此之外,我們可以通過在Hub和node上添加servlet來構建自定義解決方案。

這將是我們定製Hub的一個很好的例子。我們首先創建一個自定義的servlet。所有的servlet(無論是Hub還是Node)都可以通過擴展來創建:

1.org.openqa.grid.web.servlet.RegistryBasedServlet (or)
2.javax.servlet.http.HttpServlet.

擴展org.openqa.grid.web.servlet.RegistryBasedServlet當你需要訪問中心的內部(例如,org.openqa.grid.internal.Registry是Hub的心臟)和擴展javax.servlet.http.HttpServlet,如果你不需要訪問Hub內部。

所以對於我們的例子,可以說我們正在創建兩個servlet。

  • 一個servlet(可以稱之爲org.openqa.demo.AllNodes)在Hub上注入。當這個servlet被調用時,它會列出所有註冊到Hub的node
  • 一個servlet(讓我們稱之爲org.openqa.demo.NodeLog)被注入到node中。當這個servlet被調用時,它會從節點讀取日誌並將其作爲一個網頁。爲了簡單起見,我們不打算熟悉如何讓節點將其所有日誌記錄重定向到日誌文件。
    現在你需要構建一個JAR文件(假設其爲myservlets.jar)包含上面提到的類(AllNodes和NodeLog)的jar文件(假設它被調用)。

從目錄中同時兩個myservlets.jar和selenium-server-standalone-2.44.0.jar存在,通過運行命令啓動hub

java -cp *:. org.openqa.grid.selenium.GridLauncher -role hub -servlets org.openqa.demo.AllNodes

這個命令會導致網格生成,並將新的servlet添加到hub。它可以通過訪問http://localhost:4444/grid/admin/AllNodes

從目錄中都有myservlets.jar和selenium-server-standalone-2.44.0.jar存在,通過運行以下命令啓動節點

java -cp *:. org.openqa.grid.selenium.GridLauncher -role node -hub http://localhost:4444/grid/register -servlets org.openqa.demo.AllNodes

這個命令會產生節點,我們的新servlet會被添加到節點中。它可以通過被訪問http://xxx:5555/extra/NodeLog,其中xxx 表示其中節點運行的機器名/ IP。

要記住的要點:

  • 假設集線器運行在端口4444上,所有添加到集線器上的servlet都可以在http://xxx:4444/admin/路徑和路徑下訪問
  • 假設節點在端口5555上運行,所有添加到節點的serlvets都可以在http://xxx:5555/extra/路徑下訪問。

1.12.2 添加自定義代理

可能會出現這樣的情況,你想在每個節點上建立一些自定義的邏輯,比如“自動重啓”(或者“開始/停止視頻錄製”等等)。在這種情況下,你會去建立你自己的定製代理,然後將其注入到網格系統中。

以下是你如何去做這件事。

  • 首先擴展org.openqa.grid.selenium.proxy.DefaultRemoteProxy並定義您的自定義功能。
  • 建一個myproxy.jar包含自定義代理的jar(讓我們稱之爲jar )(爲了簡單起見,假設我們的自定義代理將被稱爲org.openqa.grid.MyProxy)。
  • 從目錄其中兩個myproxy.jar和selenium-server-standalone-2.44.0.jar存在,通過運行命令啓動hub。

    java -cp *:. org.openqa.grid.selenium.GridLauncher -role hub
    
  • 從目錄中都有myproxy.jar和selenium-server-standalone-2.44.0.jar存在,通過運行以下命令啓動節點。

    java -cp * :. org.openqa.grid.selenium.GridLauncher -role node -hub http:// localhost:4444 / grid / register -proxy org.openqa.grid.MyProxy
    

要記住的要點:

  • 使用自定義代理時,請確保代理僅在定義的內容之上添加自定義功能org.openqa.grid.selenium.proxy.DefaultRemoteProxy。
  • 確保包含自定義代理類的jar在Grid Hub和Node的類路徑中都可用(這就是爲什麼我們要使用java -cp而不是使用java -jar)。

1.13 獲取命令行幫助

Selenium-Server提供了可用選項列表,並對每個選項進行了簡要說明。目前(2012年夏季),命令行幫助有一些奇怪之處,但是如果您知道在哪裏查看以及如何解釋這些信息,這可能會有幫助。

Selenium-Server提供了兩個截然不同的功能,Selenium-RC服務器和Selenium-Grid服務器。這些可能是由不同的Selenium團隊編寫的,因此每個函數的命令行幫助已經在兩個不同的地方結束了。而且,對於新用戶來說,您可能並不清楚您正在查看的這兩個中的哪一個。

如果您只是簡單地傳遞一個-h選項,您可能會首先獲得Selenium-RC服務器選項,而不是Selenium-Grid。

java -jar selenium-server-standalone-3.8.1.jar -h

這會給你Selenium-RC的服務器選項。如果您需要Selenium-Grid的命令行幫助,則首先使用-hub或-node選項來告訴您對Selenium-Grid感興趣的Selenium-Server,然後跟隨-h。

java -jar selenium-server-standalone-3.8.1.jar -role node -h

或者,就這一點而言,只需將一個垃圾參數傳遞給-role節點,如下所示。

java -jar selenium-server-standalone-3.8.1.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.

1.13 常見錯誤

1.13.1 無法接取jar文件

Unable to access jarfile selenium-server-standalone-3.8.1.jar

啓動hub或node時可能會發生此錯誤。這意味着Java無法找到hub服務器的jar文件。從存儲了selenium-server-XXXX.jar文件的目錄運行該命令,或者指定jar的顯式路徑。

1.13.2 故障排除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章