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

  Selenium-Grid版本
  selenium-grid分為版本1和版本2,其實(shí)它的2個(gè)版本并不是和selenium的版本1和2相對(duì)應(yīng)發(fā)布的[即selenium-grid2的發(fā)布比selenium2要晚一點(diǎn)]。不過(guò)幸運(yùn)的是現(xiàn)在的selenium-grid2基本能支持selenium2的所有功能了。
  selenium雖然分1和2,但其實(shí)原理和基本工作方式都是一樣的。只是版本2同時(shí)支持selenium1和selenium2兩種協(xié)議,并且在一些小的功能和易用性上進(jìn)行了優(yōu)化。比如:指定測(cè)試平臺(tái)的方式;以下未作特殊說(shuō)明的Selenium-Grid均為通用。
  Selenium1工作原理
  selenium1中除了使用selenium-core以外,進(jìn)行自動(dòng)化測(cè)試時(shí)都需要使用selenium-RC來(lái)作為代理[不管是本機(jī)還是遠(yuǎn)程],目的是為了解決同源問(wèn)題;而造成同源問(wèn)題的原因是因?yàn)閟elenium1中是使用Javascript來(lái)驅(qū)動(dòng)測(cè)試執(zhí)行的【瀏覽器由于安全問(wèn)題不允許不同域之間的JS調(diào)用,即非同源不可調(diào)用;而selenium1中的工作方式是在宿主頁(yè)面注入JS并且通過(guò)調(diào)用JS來(lái)執(zhí)行測(cè)試操作的,所以設(shè)計(jì)到同源問(wèn)題】。所以為了達(dá)成目的,其解決方案有2種:
  1、使用selenium-core:
  selenium-core是一組js庫(kù),用來(lái)驅(qū)動(dòng)瀏覽器操作的所有庫(kù)文件都在這里,整個(gè)selenium1可以認(rèn)為核心組件是這個(gè)selenium-core;而使用selenium-core的方式是在被測(cè)試站點(diǎn)程序的源碼里把selenium-core中的所有js庫(kù)直接添加到頁(yè)面里,這樣頁(yè)面正常加載的同時(shí)也會(huì)把selenium-core加載下來(lái),并且天生是同源的。
  2、使用selenium-RC:
  RC是一個(gè)http代理程序,用來(lái)注入到瀏覽器和被測(cè)web程序之間,這樣瀏覽器所有的請(qǐng)求和接收的內(nèi)容都會(huì)通過(guò)RC;RC會(huì)把瀏覽器的請(qǐng)求發(fā)送給真實(shí)的web程序,而在接收到web程序的響應(yīng)內(nèi)容時(shí),并沒(méi)有把內(nèi)容原原本本的返回給瀏覽器客戶端,而是把包含selenium-core的內(nèi)容注入到響應(yīng)內(nèi)容中去,然后才發(fā)送響應(yīng)內(nèi)容給瀏覽器,這樣通過(guò)欺騙的方式讓瀏覽器認(rèn)為selenium1的驅(qū)動(dòng)類庫(kù)同樣是同源的。
  Selenium2工作原理
  selenium2中因?yàn)槭褂玫膚ebdriver,這個(gè)技術(shù)不是靠js驅(qū)動(dòng)的,而是直接調(diào)用瀏覽器的原生態(tài)接口驅(qū)動(dòng)的。所以沒(méi)有同源問(wèn)題,也不需要使用RC來(lái)執(zhí)行本地腳本了【當(dāng)然缺點(diǎn)是并不是所有的瀏覽器都有提供很好的驅(qū)動(dòng)支持,但JS卻是所有瀏覽器都通用的】。所以selenium2中執(zhí)行本地腳本的方式是:通過(guò)本地webdriver驅(qū)動(dòng)直接調(diào)用本地瀏覽器接口完事了。在本地調(diào)用本地的代碼是這樣的:
  import org.openqa.selenium.*;
  import org.openqa.selenium.firefox.*;
  WebDriver wd = new FirefoxDriver();
  wd.doSomething()
  但有時(shí)候并總是只執(zhí)行本地測(cè)試的腳本,有時(shí)候可能需要在本地調(diào)用遠(yuǎn)程的環(huán)境來(lái)執(zhí)行測(cè)試,【比如:因?yàn)闇y(cè)試環(huán)境覆蓋原因】此時(shí)需要一個(gè)類似selenium1中的RC來(lái)承擔(dān)這個(gè)任務(wù),也是selenium2中的selenium-server。selenium-server支持接收遠(yuǎn)程腳本的調(diào)用命令,然后操作其宿主機(jī)上的瀏覽器來(lái)到遠(yuǎn)程執(zhí)行測(cè)試的任務(wù)。當(dāng)然selenium-server為了兼容selenium1的腳本,它同樣也支持selniumRC所支持的功能【即能接收selenium1的調(diào)用命令】。在本地調(diào)用遠(yuǎn)程機(jī)器執(zhí)行測(cè)試的代碼是這樣的:
  import org.openqa.selenium.*;
  import org.openqa.selenium.remote.RemoteWebDriver;
  import org.openqa.selenium.remote.DesiredCapabilities;
  DesiredCapabilities ieDesiredcap = DesiredCapabilities.internetExplorer();
  WebDriver wd = new RemoteWebDriver("http://localhost:4444/wd/hub", ieDesiredcap);
  wd.doSomething()
  但是在運(yùn)行這段代碼之前,要先啟動(dòng)Selenium-Server;啟動(dòng)命令為:
  java -jar selenium-server-standalone-x.xx.x.jar
  調(diào)用selenium-server對(duì)應(yīng)的結(jié)構(gòu)圖:

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