您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 > Selenium
菜鳥(niǎo)學(xué)自動(dòng)化測(cè)試??selenium系列全集
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/4/3 14:43:08 ] 推薦標(biāo)簽:

菜鳥(niǎo)學(xué)自動(dòng)化測(cè)試(七)----selenium RC 工作原理

關(guān)于selenium RC環(huán)境搭建(基于java語(yǔ)言),我在系統(tǒng)的學(xué)習(xí)selenium之前已經(jīng)做了,并在我的這個(gè)系列的文章中可以找到。那是照著一位前輩的視頻操作完成的,我詳細(xì)的記錄的操作步驟。

在這里我們一起了解一下selenium RC的工作原理。

簡(jiǎn)介

那么之前學(xué)習(xí)的了selenium IDE與selenium命令,那么是不是我們用selenium IDE可以完成我們的所有自動(dòng)化測(cè)試工作了呢?No !Selenium IDE 沒(méi)我們認(rèn)為的那么強(qiáng)大,在實(shí)際的項(xiàng)目中會(huì)有各種復(fù)雜的操作,如條件判斷、循環(huán)、讀寫(xiě)文件、查詢數(shù)據(jù)庫(kù)和E—mail郵寄測(cè)試報(bào)告。這些都不是selenium IDE簡(jiǎn)單的錄制能完成的。

Selenium RC可以適應(yīng)更復(fù)雜的自動(dòng)化測(cè)試需求,而不僅僅是簡(jiǎn)單的瀏覽器操作和線性執(zhí)行。Selenium RC 能夠充分利用編程語(yǔ)言來(lái)構(gòu)建更復(fù)雜的自動(dòng)化測(cè)試案例。

Selenium RC工作原理

那么Selenium RC組件是如何運(yùn)轉(zhuǎn)的,以及他們?cè)跍y(cè)試案例運(yùn)行過(guò)程中扮演什么角色。

說(shuō)明客戶端庫(kù)文件將命令傳遞給server。接著server使用selenium-Core的javaScript命令傳遞給瀏覽器,瀏覽器會(huì)使用自帶的javaScript翻譯器來(lái)執(zhí)行selenium命令。這意味著測(cè)試腳本中的selenese操作和驗(yàn)證將被執(zhí)行。

* Selenium server

它負(fù)責(zé)啟動(dòng)和關(guān)閉瀏覽器,解釋和運(yùn)行從測(cè)試程序傳來(lái)的selenese命令,像HTTP代理一樣,截取和驗(yàn)證瀏覽器與待測(cè)應(yīng)用(AUT)之間的HTTP消息。

在測(cè)試程序打開(kāi)瀏覽器時(shí)(使用客戶端庫(kù)文件的API函數(shù)),RC server綁定 selenium Core并自動(dòng)將它嵌入到瀏覽器中。selenium Core是一個(gè)javaScript程序,實(shí)際上市一系列javaScript函數(shù),它們使用瀏覽器內(nèi)置的javaScript翻譯器來(lái)翻譯和執(zhí)行selenese命令。

* 客戶端文件

客戶端庫(kù)文件提供編程接口。允許你使用自己編寫(xiě)的程序來(lái)運(yùn)行selenese命令,對(duì)于不同的語(yǔ)言都有對(duì)應(yīng)的客戶端庫(kù)文件。類似于數(shù)據(jù)庫(kù)方言包的概念,如果你想用java操作數(shù)據(jù)庫(kù),對(duì)于不同的數(shù)據(jù)庫(kù),需要導(dǎo)入不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar文件,mysql有mysql的方言包,DB有DB的方言包。

客戶端庫(kù)文件獲取一條selenise命令,并將它傳遞給selenium Server ,以便執(zhí)行一個(gè)指定操作或者基于待測(cè)應(yīng)用(AUT)進(jìn)行測(cè)試。客戶端庫(kù)文件收到命令的執(zhí)行結(jié)果,在將其傳給你的測(cè)試程序。程序接收到結(jié)果后,將它保存在變量中。接著報(bào)告成功還是失敗,如果結(jié)果是意料之外的失敗,還能有針對(duì)性地采取正確措施。

因此要?jiǎng)?chuàng)建測(cè)試程序,你只要使用客戶端庫(kù)文件的API來(lái)編寫(xiě)程序,程序會(huì)去運(yùn)行一系列selenium命令,當(dāng)然selenium IDE錄制的內(nèi)容生成selenese測(cè)試腳本,可以轉(zhuǎn)換成不同測(cè)語(yǔ)言腳本。

Selenium RC 架構(gòu)

下面我們來(lái)了解隱藏在selenium RC背后的技術(shù)實(shí)現(xiàn)。要了解selenium RC Server 工作的細(xì)節(jié),需要我們理解下面幾個(gè)概念。

1. 同源規(guī)則

Selenium面臨的主要限制是同源規(guī)則,市場(chǎng)上的每一款瀏覽器都應(yīng)用了這一安全限制。其目的是確保一個(gè)站點(diǎn)的內(nèi)容不會(huì)被另一個(gè)站點(diǎn)的腳本所訪問(wèn)。同源規(guī)則專注于確保瀏覽器加載的任何代碼,都只能在同一站點(diǎn)內(nèi)部進(jìn)行操作。假如你在一個(gè)瀏覽器的一個(gè)選項(xiàng)卡內(nèi)打開(kāi)了一個(gè)網(wǎng)上銀行的頁(yè)面(www.yinhang.com)。又在另選項(xiàng)卡上不小心打開(kāi)了一個(gè)掛馬的頁(yè)面(www.guama.com),那么掛馬的頁(yè)面是不能操作網(wǎng)上銀行頁(yè)面的內(nèi)容,因?yàn)橐肓送匆?guī)則。所以,他們不能相互作用。如果不引入同源規(guī)則,我們可以想象用戶很生氣,后果很嚴(yán)重。

要在這一規(guī)則下工作,selenium Core必須與待測(cè)系統(tǒng)在同一源中。在歷史上,selenium Core被這一問(wèn)題所限制,因?yàn)樗怯胘avaScrpt實(shí)現(xiàn)的。但是selenium RC 沒(méi)有被同源規(guī)則所限制,它使用selenium Server作為單利來(lái)回避這一問(wèn)題,“哄騙”瀏覽器,讓瀏覽器以為自己在server提供的單一站點(diǎn)上工作。

同源:相同的協(xié)議、端口、域名

感興趣的同學(xué)google“同源規(guī)則”和“XSS(跨站點(diǎn)執(zhí)行腳本)”相關(guān)技術(shù)

2. 代理注入

selenium 用來(lái)規(guī)避同源規(guī)則的第一種方法是代理注入,在代理注入模式下,selenium Server 像客戶端配置的HTTP代理一樣工作,它位于瀏覽器和待測(cè)系統(tǒng)之間。接著其偽造待測(cè)系統(tǒng)的URL(集成selenium Core 和一系列測(cè)試案例并加以傳遞,它們像同源一樣)

代理作為第三者,在雙方間傳遞信息,它表現(xiàn)的像一個(gè)“web服務(wù)器”,想瀏覽器傳遞待測(cè)系統(tǒng)。作為代理selenium Server ,它擁有篡改待測(cè)系統(tǒng)真實(shí)URL的能力。

瀏覽器啟動(dòng)時(shí),使用配置的profile,其中已經(jīng)設(shè)置localhost:4444作為HTTP代理,這是為什么任何來(lái)自瀏覽器的HTTP請(qǐng)求都會(huì)經(jīng)過(guò)selenium Server,而且HTTP響應(yīng)也來(lái)自selenium Server而非真實(shí)的服務(wù)器。

 

(1)客戶驅(qū)動(dòng)與selenium RC Server之間建立起一個(gè)鏈接。

(2)Selenium RC Server 啟動(dòng)瀏覽器,并在瀏覽器加載頁(yè)面中注入了Selenium Core 的javaScript

(3)客戶端驅(qū)動(dòng)給Server傳遞一條Selenese命令

(4)客戶端驅(qū)動(dòng)個(gè)Server解釋命令,并觸發(fā)對(duì)應(yīng)的javaScript在瀏覽器中執(zhí)行。

(5)Selenium Core指示瀏覽器執(zhí)行第一條指令,例如打開(kāi)一個(gè)待測(cè)系統(tǒng)頁(yè)面。

(6)瀏覽器接收到打開(kāi)請(qǐng)求后,向Selenium RC Server(作為瀏覽器的HTTP代理),要求web站點(diǎn)內(nèi)容。

(7)Selenium RC Server與web服務(wù)器通信,請(qǐng)求頁(yè)面,并且一旦收到響應(yīng)將頁(yè)面?zhèn)鬟f給瀏覽器,但它會(huì)篡改源,是頁(yè)面看上去好像來(lái)自于與selenium Core同源的服務(wù)器。

(8)瀏覽器接收到web頁(yè)面后,在保留的框架窗口中展示頁(yè)面。

3. 提高瀏覽器權(quán)限

這一方式下的工作流與代理注入十分相似,區(qū)別在于瀏覽器以特殊模式-------“高特權(quán)模式”啟動(dòng)。它允許瀏覽器做一些通常不被允許的事情,如XSS。通過(guò)這個(gè)瀏覽器模式,Selenium Core 可以直接帶卡待測(cè)系統(tǒng),并讀取和操作其中的內(nèi)容,而不需要通過(guò)Selenium RC Server來(lái)傳遞整個(gè)待測(cè)系統(tǒng)。

(1)客戶驅(qū)動(dòng)與selenium RC Server之間建立起一個(gè)鏈接。

(2)Selenium RC Server啟動(dòng)瀏覽器,其實(shí)用的URL會(huì)在頁(yè)面中加載 Selenium Core

(3)Selenium Core 從客戶端啟動(dòng)得到第一條指令(通過(guò)Selenium RC Server)

(4)Selenium Core 執(zhí)行第一條指令。

(5)瀏覽器接到打開(kāi)請(qǐng)求,向web服務(wù)器請(qǐng)求頁(yè)面,一旦瀏覽器接收到web頁(yè)面后,在保留的框架窗口中展示頁(yè)面。

===========================================================================

圖不優(yōu)雅,但也是自己花費(fèi)一個(gè)多小時(shí)畫(huà)的。

關(guān)于selenium RC 的工作原理。沒(méi)有hyddd將的好,也沒(méi)他理解的深入。但也算是自己小小的總結(jié)。

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