您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
開源應(yīng)用架構(gòu)之​Selenium WebDriver
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/12/9 14:36:50 ] 推薦標(biāo)簽:

前不久,InfoQ向大家推薦了幾本有關(guān)軟件架構(gòu)的新書,引起了國(guó)內(nèi)讀者的廣泛興趣。​其中一本是《開源應(yīng)用架構(gòu)(The Architecture of Open Source Applications)》, 來自知名開源項(xiàng)目的各位作者對(duì)軟件的設(shè)計(jì)進(jìn)行了說明。通過對(duì)這些成功的系統(tǒng)架構(gòu)進(jìn)行概覽,讓軟件工程師可以徹底了解佳實(shí)踐和陷阱。InfoQ中文站響應(yīng) 讀者的需求,整理了該書有關(guān)知名開源軟件架構(gòu)的精彩內(nèi)容,供國(guó)內(nèi)開發(fā)社區(qū)借鑒。本期介紹的是瀏覽器自動(dòng)化工具Selenium WebDriver的軟件架構(gòu),第一部分主要分享了Selenium WebDriver的演變歷史和架構(gòu)觀點(diǎn)。

Selenium是一個(gè)瀏覽器自動(dòng)化工具,通常用來編寫​Web應(yīng)用 的端到端測(cè)試。瀏覽器自動(dòng)化工具​準(zhǔn)確執(zhí)行你所期望的行為:自動(dòng)化瀏覽器的某個(gè)控件,從而可以自動(dòng)重復(fù)執(zhí)行任務(wù)。這聽起來像是一個(gè)很容易解決的問題,但是 正如我們即將看到的那樣,其實(shí)Selenium成功的背后凝聚了大量的工作。

介紹Selenium WebDriver軟件架構(gòu)的技術(shù)專家是​來自Google的Simon Stewart,他是Selenium的核心貢獻(xiàn)者和Selenium WebDriver的創(chuàng)建者。

Simon Stewart首先談起了Selenium的組成部分:

    在介紹Selenium架構(gòu)之前,好先了解一下該項(xiàng)目的各個(gè)相關(guān)組成部分是如何結(jié)合在一起的。從較高的層次看,Selenium由三種工具組成。 第一個(gè)工具Selenium IDE,是Firefox的擴(kuò)展插件,支持用戶錄制和回訪測(cè)試。錄制/回訪模式​存在局限性,對(duì)許多用戶來說并不適合,因此第二個(gè)工具—— Selenium WebDriver提供了各種語言環(huán)境的API來支持更多控制權(quán)和編寫符合標(biāo)準(zhǔn)軟件開發(fā)實(shí)踐的應(yīng)用程序。后一個(gè)工具——Selenium Grid幫助工程師使用Selenium API控制分布在一系列機(jī)器上的瀏覽器實(shí)例,支持并發(fā)運(yùn)行更多測(cè)試。在項(xiàng)目?jī)?nèi)部,它們分別被稱為“IDE”、“WebDriver”和“Grid”。

​追根溯源,Selenium和WebDriver初是兩個(gè)獨(dú)立的項(xiàng)目,Simon Stewart​解釋了發(fā)展的歷史:

Jason Huggins在2004年發(fā)起了Selenium項(xiàng)目,當(dāng)時(shí)他在ThoughtWorks公司開發(fā)內(nèi)部的時(shí)間和費(fèi)用(Time and Expenses)系統(tǒng),該應(yīng)用使用了大量的JavaScript。雖然Internet Explorer在當(dāng)時(shí)是主流瀏覽器,但是ThoughtWorks還使用一些其他瀏覽器(特別是Mozilla系列),當(dāng)員工在自己的瀏覽器中無法正常 運(yùn)行T&E系統(tǒng)時(shí)會(huì)提交bug報(bào)告。當(dāng)時(shí)的開源測(cè)試工具要么關(guān)注單一瀏覽器(通常是IE),要么是模擬瀏覽器(如HttpUnit)。購(gòu)買商業(yè) 工具授權(quán)的成本會(huì)耗盡這個(gè)小型內(nèi)部項(xiàng)目的有限預(yù)算,所以它們都不是可行的測(cè)試選項(xiàng)。​

在自動(dòng)化困難的情況下,通常會(huì)依靠手動(dòng)測(cè)試。​當(dāng)開發(fā)團(tuán)隊(duì)規(guī)模很小或者構(gòu)建發(fā)布非常頻繁時(shí),這種方式不太適用。同時(shí),讓人手動(dòng)執(zhí)行原本可以自動(dòng)化的腳本也是一種對(duì)人力的浪費(fèi)。沉悶重復(fù)的任務(wù)越無聊,人們工作會(huì)越慢而且比機(jī)器犯更多錯(cuò)誤。手動(dòng)測(cè)試也不是一種選擇。​ 

幸運(yùn)的是,所有被測(cè)試的瀏覽器都支持Javascript。Jason和他所在的團(tuán)隊(duì)有理由采用Javascript編寫一種測(cè)試工具來驗(yàn)證應(yīng)用的行為。他們受到FIT​(Framework for Integrated Test) 的啟發(fā),使用基于表格的語法替代了原始的Javascript​,這種做法支持那些編程經(jīng)驗(yàn)有限的人在HTML文件中使用關(guān)鍵字驅(qū)動(dòng)的方式來編寫測(cè)試。該 工具,初稱為“Selenium”,后來稱為“Selenium Core”,在2004年基于Apache 2授權(quán)發(fā)布。​

Selenium的表格格式類似于FIT的​ActionFixture。表格的每一行分為三列。第一列給出了要執(zhí)行的命令名稱,第二列通常包含元 素標(biāo)記符,第三列包含一個(gè)可選值。例如,如下格式表示了如何在名稱為“q”的元素中輸入字符串“Selenium WebDriver”:

type   name=q   Selenium WebDriver

因?yàn)镾elenium過去使用純JavaScript編寫,它的初設(shè)計(jì)要求開發(fā)人員把準(zhǔn)備測(cè)試的應(yīng)用和Selenium Core、測(cè)試腳本部署到同一臺(tái)服務(wù)器上以避免觸犯瀏覽器的安全規(guī)則和JavaScript沙箱​策略。在實(shí)際開發(fā)中,這種要求并不總是可行。更糟的是, 雖然開發(fā)人員的IDE能夠幫助他們快速處理代碼和瀏覽龐大的代碼庫(kù),但是沒有針對(duì)HTML的相關(guān)工具。​人們很快意識(shí)到維護(hù)一個(gè)中等規(guī)模的測(cè)試集是笨拙而 痛苦的過程。​

為了解決這個(gè)問題和其他問題,我們編寫了HTTP代理,這樣所有的HTTP請(qǐng)求都會(huì)被Selenium截獲。使用代理可以繞過“同源”規(guī)則(瀏覽器 不支持Javascript調(diào)用任何當(dāng)前頁面所在服務(wù)器以外的其他任何東西)的許多限制​,從而緩解了首要弱點(diǎn)。這種設(shè)計(jì)使得采用多種語言編寫 Selenium綁定成為可能:它們只需把HTTP請(qǐng)求發(fā)送到特定URL。連接方法基于Selenium Core的表格語法​​嚴(yán)格建模,稱之為“Selenese”​。因?yàn)檎Z言綁定在遠(yuǎn)程控制瀏覽器,所以該工具稱為“Selenium Remote Control”或者“Selenium RC”。

在Selenium處于開發(fā)階段的同時(shí),另一款瀏覽器自動(dòng)化框架WebDriver也正在ThoughtWorks公司的醞釀之中。 WebDriver的初代碼在2007年初發(fā)布。WebDriver項(xiàng)目的初衷是把端對(duì)端測(cè)試與底層測(cè)試工具隔離開。通常情況下,這種隔離手段通過適配 器(Adapter)模式完成。WebDriver正是來源于該方法在許多項(xiàng)目上的不斷實(shí)踐應(yīng)用,初是HtmlUnit的封裝,工具發(fā)布后很快開始支持 Internet Explorer和Firefox。

在WebDriver初發(fā)布時(shí),與Selenium RC存在顯著差異,盡管它們都屬于瀏覽器自動(dòng)化的API工具。對(duì)于用戶來說,明顯的區(qū)別在于Selenium RC提供基于字典的API,所有方法都在一個(gè)類中開放,而WebDriver的API更面向?qū)ο蟆4送,WebDriver僅支持Java,而 Selenium RC提供廣泛的語言支持。技術(shù)差異也很明顯:Selenium Core(RC的基礎(chǔ))基本上是JavaScript應(yīng)用,運(yùn)行在瀏覽器的安全沙箱之內(nèi)。WebDriver則嘗試原生綁定到瀏覽器中,繞開了瀏覽器的安 全模型,代價(jià)是框架自身的開發(fā)投入顯著增加。

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