1. 程式人生 > >Selenium Grid2做分散式測試

Selenium Grid2做分散式測試

介紹

網格允許你做的事情:

  • 通過將測試分配到多臺機器上進行擴充套件(並行執行)
  • 從一個控制點集中管理多個環境,這使得非常容易的將測試執行在廣闊的瀏覽器和作業系統組合上。
  • 最小化網格的維護時間(允許實現自定義的鉤子,以便利用虛擬基礎設施)

快速指南

這個例子將告訴你如何開始Selenium2 Hub,並且註冊一個WebDriver節點和一個RC節點。我們也將向您展示如何從java中呼叫網格。在這個例子中,hub和節點執行在同一臺機器上,當然你也可以將selenium-server-standalone拷貝到多臺機器上。注意:selenium-server-standalone包包括執行網格所需要的

Hub,WebDriver,legacy RCAnt不再是必要的。你可以從下載selenium-server-standalone-*.jar包。在SeleniumStandalone Server節點,目前版本為3.4.0

第一步:啟動hub

Hub是接受全部測試請求的集中點,並將測試請求發發送到正確的節點。

開啟cmd並進入到selenium-server-standalone檔案所在的目錄,然後執行如下命令:java -jar selenium-server-standalone-<version>.jar -role hub


變數名 JAVA_HOME

變數值:

C:\ProgramFiles\Java\jdk1.7.0_45 \

變數名: PATH

變數值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

變數名: CALSS_PATH

變數值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Hub預設使用4444埠啟動。如需要改變預設埠,在執行啟動命令的時候可以增加-port引數來指定你需要使用的埠。你可以在瀏覽器裡面開啟來檢視hub的狀態資訊。


第二步:啟動節點

不管是要使用WebDriver功能的網格還是RC功能的網格還是同事使用兩者,都是使用selenium-server-standalone

jar檔案來啟動節點。命令如下:

java -jarselenium-server-standalone-<version>.jar -role node  -hub http://localhost:4444/grid/register

剛註冊的節點:


備註:節點的預設埠是55555

為保持向後相容, "wd""rc"角色依然是"node"角色的合法子集。但是這些角色限制了遠端連線到對應的API的連線型別,然而"node" 同事允許RCWebDriver的練級。

使用網格來執行測試

現在網格已經準備好了,我們需要從測試用例中訪問網格,對於RC節點可以繼續使用DefaultSelenium物件並傳遞hub的資訊給它。

Selenium selenium = newDefaultSelenium(“localhost”, 4444, “*firefox”, “http://www.google.com”);

對於WebDrive節點,需要使用RemoteWebDriverDesiredCapabilities物件來定義你希望使用的瀏覽器、版本和平臺。

DesiredCapabilities capability= DesiredCapabilities.firefox();

將其傳入RemoteWebDriver物件:

WebDriver driver = newRemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

Hub將測試分配給匹配的節點。

如果節點匹配所有的請求能力,為在網格上請求特定的能力,需要在傳送給WebDriver之前指定這些請求的能力。

capability.setBrowserName();

capability.setPlatform();

capability.setVersion()

capability.setCapability(,);

例子:一個設定如下的節點:

 -browser browserName=firefox,version=3.6,platform=LINUX

將匹配:

capability.setBrowserName(“firefox”);

capability.setPlatform(“LINUX”); 

capability.setVersion(“3.6”);

也匹配

capability.setBrowserName(“firefox”);

capability.setVersion(“3.6”);

沒有指定的能力將被忽略。如果你指定的能力在網格中不存在(Firefox的版本為4.0但是沒有Firefox的例項),那麼就不會進行匹配且測試執行失敗。

配置節點

配置節點的方式有兩種;一種方式是通過命令列引數來指定,另外一種是通過json檔案來指定。

通過命令列引數配置節點

啟動節點是,預設可以併發使用11個瀏覽器;5FireFox5Chrome1InternetExplorer。最大的併發測試數量是5。為改變瀏覽器設定,通過-browser開關指定引數(每一個開關代表一個節點)。如果你使用-browser引數,預設瀏覽器將被忽略並且只有你指定的命令列將被使用。

-browserbrowserName=firefox,version=3.6,maxInstances=5,platform=LINUX

這個設定是在linux機器上啟動53.6版本的FirFox節點。

如果在遠端機器上有多個需要使用的FireFox版本,可以通過路徑來指定特定的版本:

-browserbrowserName=firefox,version=3.6,firefox_binary=/home/myhomedir/firefox36/firefox,maxInstances=3,platform=LINUX-browserbrowserName=firefox,version=4,firefox_binary=/home/myhomedir/firefox4/firefox,maxInstances=4,platform=LINUX

提示:如果你提供的引數有空格,使用雙引號括起來:

-browser“browserName=firefox,version=3.6,firefox_binary=c:\Program Files\firefox,maxInstances=3, platform=WINDOWS”

可選引數

  • -port 4444 (4444是預設埠號)
  • -host <IP | hostname> 指定主機名或IP地址,通常這個是沒有必要的且這個是自動確定的。對於外部網路配置(如VPN)指定主機可能是必須的。
  • -timeout 30 (300秒是預設值)hub自動釋放節點的超時毫秒數(沒有收到任何請求)。在這個時間之後節點將被釋放用於佇列中的其他測試。這個清除客戶端崩潰而不用手工介入。如果timeout的引數為0,將永遠不會超時,hub永遠不會釋放節點。

注意:這個不是WebDriver的超時設定。(”wait for WebElement”型別命令)

  • -maxSession 5 (5是預設值) 在節點上可以併發執行的瀏覽器數量。這個與支援的瀏覽器的maxInstance 不同(例如:一個支援Firefox 3.6, Firefox 4.0  and Internet Explorer 8的節點,maxSession=1將只會有一個瀏覽器執行,maxSession=2可以同時執行兩個FireFox瀏覽器或者1個FireFox和1個Internet Explorer瀏覽器)。
  • -browser < params > 如果 –browser引數沒有設定,啟動的節點將具有5 firefox, 1 chrome, and 1 internet explorer例項 (在Windows平臺上). 這個引數可以在同一行設定多次,如:-browser: browserName={android, chrome, firefox, htmlunit, internet explorer, iphone, opera} version={browser version} firefox_binary={path to executable binary} chrome_binary={path to executable binary} maxInstances={maximum number of browsers of this type} platform={WINDOWS, LINUX, MAC}
  • -registerCycle N = 在多少毫秒之後節點重新註冊自己。這個允許重啟hub而不用重啟節點。
  • 對於大容量的hub安裝(超過50個節點),需要在java命令列增加jetty的執行緒數量-DPOOL_MAX=512 (or larger)

配置超時(2.21版本需要)

網格的超時通過webDriver.manage().timeouts()來處理,這個允許控制不同操作的超時。

為保持具有selenium-server網格的執行時完整性,有兩個其他的超時值可以設定。

hub上,使用-timeout選項設定30秒超時,這將確保在客戶端崩潰後所有資源在30秒內被回收。通過-browserTimeout 60設定一個節點被瀏覽器掛起的最大時間。所有的節點都是用來自於hub設定的這兩個值。一般建議不要在單獨的節點上設定這些超時。

browserTimeout的設定應該是:

  • 高於套接字鎖定超時(45秒)
  • 一般來說也要高於webDriver.manage().timeouts()設定的值, 因為這個是最後的防禦機制。

JSON配置節點

java -jar selenium-server-standalone.jar -rolenode -nodeConfig nodeconfig.json

如下:

{

"capabilities":

  [

    {

"browserName": "firefox",

"maxInstances": 5,

"seleniumProtocol": "WebDriver"

    },

    {

"browserName": "chrome",

"maxInstances": 5,

"seleniumProtocol": "WebDriver"

    },

    {

"browserName": "internet explorer",

"maxInstances": 1,

"seleniumProtocol": "WebDriver"

    }

  ],

"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",

"maxSession": 5,

"port": 5555,

"register": true,

"registerCycle": 5000,

"hub": "http://localhost:4444",

"nodeStatusCheckTimeout": 5000,

"nodePolling": 5000,

"role": "node",

"unregisterIfStillDownAfter": 60000,

"downPollingLimit": 2,

"debug": false,

"servlets" : [],

"withoutServlets": [],

"custom": {}

}

{

"capabilities":

      [

        {

"browserName": "*firefox",

"maxInstances": 5,

"seleniumProtocol": "Selenium"

        },

        {

"browserName": "*googlechrome",

"maxInstances": 5,

"seleniumProtocol": "Selenium"

        },

        {

"browserName": "*iexplore",

"maxInstances": 1,

"seleniumProtocol": "Selenium"

        },

        {

"browserName": "firefox",

"maxInstances": 5,

"seleniumProtocol": "WebDriver"

        },

        {

"browserName": "chrome",

"maxInstances": 5,

"seleniumProtocol": "WebDriver"

        },

        {

"browserName": "internet explorer",

"maxInstances": 1,

"seleniumProtocol": "WebDriver"

        }

      ],

"configuration":

  {

"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",

"maxSession": 5,

"port": 5555,

"host": ip,

"register": true,

"registerCycle": 5000,

"hubPort": 4444,

"hubHost": ip

  }

}

注意:在2.x.x裡面的configuration{ ... }物件在3.x.x裡面已經被取消。

JSON配置hub

java -jar selenium-server-standalone.jar -rolehub -hubConfig hubconfig.json

Hub的診斷訊息

當檢測到異常使用模式時,hub會給出如下的訊息:

Client requested session XYZthat was terminated due to REASON

原因

起因/修復

TIMEOUT

會話超時,因為客戶端在規定的超時時間裡沒有訪問它。如果客戶端已經被暫停執行就可能發生。

BROWSER_TIMEOUT

節點瀏覽器超時,因其被掛起太長的時間。 (引數 browserTimeout)

ORPHAN

在佇列中等待的客戶端放棄了,因其被賦予了新的會話。

CLIENT_STOPPED_SESSION

客戶端呼叫stop/quit終止了會話。為什麼又在使用呢????

CLIENT_GONE

客戶端程序已經宕機或者對請求沒有迴應,不穩定的網路也可能導致這個問題。

FORWARDING_TO_NODE_FAILED

Hub不能轉發給節點。記憶體不足、節點穩定性問題或網路問題

CREATIONFAILED

節點建立瀏覽器失敗。主要是節點環境或配置問題。嘗試直接使用節點來跟蹤問題。

PROXY_REREGISTRATION

會話被丟棄,因為節點重新註冊到了網格。

使用網格要點:

如果你的測試是併發執行的,請確保每一個執行緒有獨佔的webdriver資源。線上程開始執行的時候每個執行緒分配一個瀏覽器然後線上程結束的時候釋放所有的瀏覽器,這並不是一個好的注意。(因為如果一個測試用例花費了太多的時間,可能導致剩餘的測試超時,因為都在等待這個慢的測試。這個會令人感到迷惑)

相關推薦

Selenium Grid2分散式測試

介紹 網格允許你做的事情: 通過將測試分配到多臺機器上進行擴充套件(並行執行) 從一個控制點集中管理多個環境,這使得非常容易的將測試執行在廣闊的瀏覽器和作業系統組合上。 最小化網格的維護時間(允許實現自定義的鉤子,以便利用虛擬基礎設施) 快速指南 這個例子將告訴你如何

Selenium Grid3 多執行緒分散式測試

selenium Gride3 介紹:地址 首先啟動本地一個hub,一個node java -jar selenium-server-standalone-3.9.0.jar -role hub - port java -jar selenium-serv

python用selenium自動化測試(一)

python 用selenium做自動化測試: 在w3school裡搜尋css python3 test_w3school_search.py XPath路徑表示式: http://www.ruanyifeng.com/blog/2009/07/xpath_pa

selenium Gird2——瀏覽器引數化和與分散式測試

selenium server環境配置 下載Java JDK:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm 下載Selenium Standalone Server:https://w

selenium 結合 docker 構建分散式測試環境

隨著自動化測試越學越深,深深覺得有太多的東西需要總結。 1.記錄下學習中遇到的坑,當做學習筆記。 2.有前人路過看到文章中比較落後的做法,請務必一定要指教。(因為是初學者視角,很多東西只是走通而已,不足的地方多的去了,無論誰的指教都會讓我受益匪淺) 3.因為我就是一個初學者,所以我打算詳細的記錄操作步驟,爭取

selenium工具軟體自動化測試的面試題及答案

1、selenium中如何判斷元素是否存在? 答:isElementPresent  2、selenium中hidden或者是display = none的元素是否可以定位到? 答:不可以定位到  3、selenium中如何保證操作元素的成功率?也就是說如何保證我點選

Python用Selenium自動化測試(三):Page Object專題

Page Object專題 頁面物件模型的設計優勢: 創造可以被多個測試用例共享的可重用程式碼。 減少大量重複的程式碼。 如果使用者介面發生改變,則修改只用在一處進行。 圖片來源: 目的:測試程式碼與被測頁面物件程式碼分離,後期如果有頁面元素髮生了更改,

使用docker selenium 構建web自動化分散式測試環境時,遇到的一些問題

前幾天,在某測試社群裡看到了有關docker selenium的文章,立刻就被吸引到了,通過docker 啟動容器建立一個乾淨的測試環境,把外界因素對自動化測試的干擾降至最低;畢竟,自動化測試的穩定才是王道。 鑑於此,針對以前做過的selenium+webdr

50.[Python]使用SeleniumWeb頁面自動化測試詳解

簡介 Selenium是ThoughtWorks公司為Web自動化測試開發的工具,除支援多種作業系統如Linux、Mac OS X、Windows外,還支援Chrome、Firefox、Safari、Opera、IE等多種瀏覽器,適合做Web應用

Selenium Grid分散式測試環境搭建

Selenium Grid簡介 Selenium Grid實際上是基於Selenium RC的,而所謂的分散式結構就是由一個hub節點和若干個node代理節點組成。Hub用來管理各個代理節點的註冊資訊和狀態資訊,並且接受遠端客戶端程式碼的請求呼叫,然後把請求的命令轉發給代理節點來執行(官方說明) 簡單來說

自動化測試之前需要了解的

java 程序 產品 接口 記錄 首先理清自動化測試的概念,什麽是自動化測試?廣義上來講,自動化包括一切通過工具(程序)的方式來代替或輔助手工測試的行為都可以看做是自動化,包括性能測試工具(Loadrunner、Jmeter),或自己所寫的一段程序,用於生成1到100個測試數據。狹義上來講

selenium+python之HTML測試報告

d+ 百度 復制 tips 代碼 drive ext 情況 lec r一、準備 1、本節用到的模塊——HTMLTestRunner 1)下載:下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html 鼠標右鍵→目標

Selenium-Grid2 配置RemoteWebDriver

tno 設備 driver one tty 兼容 images void 遠程 為什麽要使用Selenium Grid ? 分布式運行大規模的Test 能夠通過一個中央點,很容易的運行不同OS上的不同browser 最小化對Grid的維護時間,並能充分利用虛擬設備

selenium之批量執行測試用例生成HTML結果文件

col strftime 指定 class ast pattern fault import 測試報告 使用HTMLTestRunner運行測試套件,自動生成html測試報告: 1 import unittest, HTMLTestRunner, sendmail_ht

python+selenium自動化軟件測試:裝飾器之用例失敗後截圖

功能 get war keys case 全局參數 ase when code 對於用例失敗截圖,很多小夥伴都希望用例執行失敗的時候能自動截圖,想法是很好的,實現起來並不是那麽容易,這裏小編分享下最近研究裝飾器,打算用裝飾器來實現自動截圖。 一、函數作為形參1.函數的參數也

python+selenium自動化軟件測試(第6章):selenium phantomjs頁面解析使用

前端 down word logs pan canvas 鼠標 agent 瀏覽器中 我們都知道Selenium是一個Web的自動化測試工具,可以在多平臺下操作多種瀏覽器進行各種動作,比如運行瀏覽器,訪問頁面,點擊按鈕,提交表單,瀏覽器窗口調整,鼠標右鍵和拖放動作,下拉框和

python+selenium自動化軟件測試(第7章):Page Object模式

結合 首頁 .com selenium pan current returns find nbsp 什麽是Page ObjectModel模式Page Objects是selenium的一種測試設計模式,主要將每個頁面看作是一個class。class的內容主要包括屬性和方法

python+selenium自動化軟件測試(第11章):持續集成jenkins和GitHub的使用

con 內容 安裝與配置 sel 改變 安裝包 github使用 commit 軟件 11.1 jenkins持續集成環境 相關安裝包下載鏈接:http://pan.baidu.com/s/1qYhmlg4 密碼:dcw2贈送jenkins集成selenium環境視頻鏈接

selenium Grid2

Coding 靈活性 windows7 path 作用 nod des 選擇 變量 一、Selenium Server 環境配置 1、selenium grid的組成與作用:由一個集線器hub和多個客戶機node組成,如果你的程序需要在不用的瀏覽器,不同的操作系統上測試,

用Postman自動化測試的功能

剛才 解析 測試的 工具 art rom http 例如 但是 自動化測試應該在桌面應用有該功能,在chrome的插件不知道有沒有,我也沒裝chrome版的Postman Postman工具介紹圖 上面這張就是Postman的操作界面。一開始我就是這樣做簡單的數據請求,查