您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium-Grid工作方式
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2015/2/6 15:07:43 ] 推薦標簽:Selenium 功能測試工具 單元測試

  了解了selenium-grid的基本結(jié)構(gòu),再來看看selenium-grid通信的原理。假設(shè)現(xiàn)在我們有這樣一個場景:[一個測試請求客戶端、一個hub節(jié)點、一個Windows+ie代理、一個linux+FF代理、一個Mac+Safari代理、一個任意平臺下的Chrome代理]。其分布圖如下:
  測試的代碼如下:
import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
//test01: 只匹配Windows下的ie來執(zhí)行此用例,版本不限;多個版本匹配成功時優(yōu)先級暫未知
DesiredCapabilities aDesiredcap = DesiredCapabilities();
aDesiredcap.setBrowserName("internet explorer")
aDesiredcap.setVersion("")
aDesiredcap.setPlatform(Platform.WINDOWS)
WebDriver wd = new RemoteWebDriver<span style="font-family: Arial, Helvetica, sans-serif;">("http://localhost:4444/wd/hub", aDesiredcap);</span>
wd.doSomething()
//test02: 只匹配linix下的firefox的版本為22的瀏覽器執(zhí)行用例;
DesiredCapabilities aDesiredcap = DesiredCapabilities("firefox", "22", Platform.LINUX);
WebDriver wd = new RemoteWebDriver("http://localhost:4444/wd/hub", aDesiredcap);
wd.doSomething()
//test03: 只匹配MAC下的safari瀏覽器執(zhí)行,版本不限
DesiredCapabilities aDesiredcap = DesiredCapabilities.safari();
aDesiredcap.setPlatform(Platform.MAC)
WebDriver wd = new RemoteWebDriver("http://localhost:4444/wd/hub", aDesiredcap);
wd.doSomething()
//test04: 只匹配chrome瀏覽器,任意平臺,任意版本
DesiredCapabilities aDesiredcap = DesiredCapabilities.chrome();
aDesiredcap.setPlatform(Platform.ANY)
WebDriver wd = new RemoteWebDriver("http://localhost:4444/wd/hub", aDesiredcap);
wd.doSomething()
  那么整個測試執(zhí)行的過程大概是這樣的。首先我們在測試請求機上執(zhí)行測試代碼,代碼中測試啟動方式為遠程調(diào)用;
  WebDriver wd = new RemoteWebDriver("http://localhost:4444/wd/hub", aDesiredcap);
  此時測試腳本會根據(jù)啟動參數(shù)連接hub節(jié)點,這里的連接信息為
  http://localhost:4444/wd/hub
  連接到hub成功后,會在hub上注冊一個session信息;[后面再與hub通信時會帶上這個session信息,告訴hub我之前來過,并且之前是被分配到哪個代理節(jié)點上執(zhí)行過測試]
  hub在接受初始化請求時會根據(jù)請求的類型來匹配所有代理,并確定是否有符合規(guī)則的代理;
  如果匹配失敗了會拒絕該初始請求;如果匹配成功則通知對應(yīng)代理節(jié)點進行對應(yīng)的初始化操作,這里是啟動XX,并記錄瀏覽器的注冊session,后發(fā)回給hub端;
  hub端接收到代理端起的完成后的session信息后,在hub中同樣要記錄session并返回給測試請求端,[session中會保存匹配到的代理信息]
  在初始化請求成功之后,測試請求端會繼續(xù)發(fā)送下一條測試命令,這里的命令是:
  wd.doSomething()
  此命令會同樣被發(fā)送給hub,當然是帶上session信息的;
  hub接收到帶有session的請求命令時,會查詢session的信息,得知session中對應(yīng)的代理后把請求的命令給轉(zhuǎn)發(fā)給該代理;
  代理在接收到hub發(fā)送過來的測試命令后,同樣查詢其session信息,并根據(jù)session信息操作與之對應(yīng)的瀏覽器以執(zhí)行測試;
  測試完成后會通知hub執(zhí)行結(jié)果,hub再轉(zhuǎn)發(fā)給測試請求端,測試請求端根據(jù)的返回信息來決定接下來的執(zhí)行流程;
  后測試結(jié)束后,通知hub關(guān)閉瀏覽器進程,同時清除對應(yīng)的session信息。
  由selenium-grid的原理可以得知
  通過selenium-grid執(zhí)行遠程操作時,并不需要遠程機器上有測試腳本;但是遠程機器上必須安裝了對應(yīng)的webdriver程序[可以直接放在環(huán)境變量的目錄里即可],當然了,還得需要正確的啟動了代理程序。[具體可以參考:如何搭建Selenium-Grid環(huán)境]

上一頁123下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd