Tellurium自動(dòng)測(cè)試框架是一款針對(duì)web應(yīng)用、基于UI模塊的自動(dòng)測(cè)試平臺(tái)。UI模塊是由一組復(fù)合的UI對(duì)象以嵌套的形式組成,比如,Google的搜索UI模塊可以表示成:
ui.Container(uid: "GoogleSearchModule", clocator: [tag: "td"], group: "true"){
InputBox(uid: "Input", clocator: [title: "Google Search"])
SubmitButton(uid: "Search", clocator: [name: "btnG", value: "Google Search"])
SubmitButton(uid: "ImFeelingLucky", clocator: [value: "I'm Feeling Lucky"])
}
Tellurium框架還定義了一套全新的領(lǐng)域特定語(yǔ)言來(lái)進(jìn)行web測(cè)試,比如對(duì)于Google搜索模塊,你可以使用下面的DSL來(lái)完成一次搜索測(cè)試:
type "GoogleSearchModule.Input", "Tellurium test"
click "GoogleSearchModule.Search"
waitForPageToLoad 30000
目前Tellurium已經(jīng)發(fā)布0.6.0版本,InfoQ中文站Tellurium的方方面面,特地郵件采訪了Tellurium的創(chuàng)始人方劍先生:
1、請(qǐng)介紹一下您自己,以及所從事的工作?
我的名字是方劍,曾經(jīng)在上海讀書和工作多年。2000年在美國(guó)佐治亞理工(Georgia Institute of Technology)求學(xué)。畢業(yè)后在一家美國(guó)公司做軟件開(kāi)發(fā)工作,從事企業(yè)級(jí)應(yīng)用(Enterprise Applications)開(kāi)發(fā),主要負(fù)責(zé)服務(wù)器端框架的設(shè)計(jì)和開(kāi)發(fā),商業(yè)應(yīng)用服務(wù)(Business Services)的開(kāi)發(fā), 和一些軟件規(guī)范的制定。此外,我還有很強(qiáng)的人工智能和計(jì)算機(jī)網(wǎng)絡(luò)方面的研究背景。
2、您開(kāi)始做Tellurium這樣一個(gè)自動(dòng)化測(cè)試框架,是基于怎樣的考慮呢?我看到有特色的兩點(diǎn)是使用UI module-based這樣的描述塊來(lái)定義待測(cè)的UI,以及使用DSL來(lái)表述測(cè)試代碼,還有哪些與以往框架不同的設(shè)計(jì)思想,緣起是什么呢?
在2007年,我們公司開(kāi)始注意到Selenium測(cè)試框架。由于我們用敏捷開(kāi)發(fā)方法(Agile development),在Scrum隊(duì)伍中,每個(gè)人的角色開(kāi)始變得多樣性了。我有個(gè)工作(Task)是用Selenium去測(cè)試我們的一個(gè)應(yīng)用程序(是用Dojo Javascript框架寫的)。應(yīng)該說(shuō)在當(dāng)時(shí),Selenium是一個(gè)開(kāi)創(chuàng)性的框架,如果用他們的復(fù)制和重播模式(record and replay)很容易產(chǎn)生測(cè)試腳本。但一旦我開(kāi)始用Selenium,我發(fā)現(xiàn)它還是有一些缺點(diǎn)和不便之處。主要測(cè)試腳本是對(duì)代碼的更新很脆弱(Fragile)。 但是在一個(gè)敏捷開(kāi)發(fā)的環(huán)境下,一般都有階段性的用戶接受測(cè)試(User Acceptance Test),由于程序一直更新,Selenium測(cè)試腳本的維護(hù)變成一個(gè)很頭痛的問(wèn)題。而且,對(duì)于很多企業(yè)級(jí)應(yīng)用,復(fù)制和重播模式本身不太適用,比喻我們有很多數(shù)據(jù)格(Data Grid),它的內(nèi)容本身是動(dòng)態(tài)的。其他的問(wèn)題包括Selenium測(cè)試腳本不是結(jié)構(gòu)化的,你可以看到處有XPath,這更增加了維護(hù)的困難。因此,我們決定開(kāi)發(fā)一個(gè)在Selenium之上的框架來(lái)解決這些問(wèn)題。我做的第一個(gè)版本是通過(guò)Spring框架和物體工廠(Object Factory)來(lái)產(chǎn)生UI元素(Element),使得框架能把UI元素的表達(dá)和測(cè)試代碼分開(kāi),自動(dòng)處理Javascript事件,并在一定程度上能處理動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。
由于這個(gè)框架用XML來(lái)配置UI元素,使用起來(lái)并不是很方便。在2008年,我用Groovy重寫了整個(gè)框架并變成一個(gè)開(kāi)源項(xiàng)目(open source project)。新的版本主要有三個(gè)大的改變。首先是采用UI Module(UI模塊)描述塊來(lái)定義待測(cè)的UI。這樣做的好處是系統(tǒng)自動(dòng)生成運(yùn)行時(shí)的Locator,即使你改變了其中的一些元素,框架本身會(huì)生產(chǎn)新的 Locator來(lái)適應(yīng)這種改變。而且框架側(cè)重一個(gè)集合的元素,而不是單個(gè)元素,這樣使得我們可以利用元素之間的關(guān)系來(lái)幫助我們定位他們?cè)贒OM中的位置。此外,這樣也增加了重用性,比如,我們可以定義一些Tellurium Widget,在你的測(cè)試代碼中可以直接定義這個(gè)Widget,而不需要重新定義一個(gè)個(gè)的單個(gè)元素。第二個(gè)大的變化是用DSL來(lái)寫測(cè)試代碼。這樣增加了表達(dá)性使得用戶很容易寫和維護(hù)測(cè)試代碼。Tellurium測(cè)試代碼可以用Java, Groovy, 或純DSL腳本來(lái)寫。Tellurium本身也支持JUnit和TestNG測(cè)試框架。另一個(gè)大的變化是開(kāi)始用UI模板(UI templates)來(lái)表述動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容,例如數(shù)據(jù)格(Data Grid)。這樣使得Ajax應(yīng)用程序的測(cè)試變得可行和容易。
3、 Tellurium主要有那些子項(xiàng)目構(gòu)成?
Tellurium主要是由Tellurium Core, Tellurium Engine, Tellurium Widget Extensions, 和Tellurium UI Module Plugin(TrUMP)子項(xiàng)目構(gòu)成。Tellurium Core主要是處理DSL和動(dòng)態(tài)生成Locator. Tellurium Engine是測(cè)試驅(qū)動(dòng)模塊,目前還是利用Selenium Core. Tellurium Widget Extensions包括一些DOJO和ExtJS Javascript框架的可重用Widget模塊。這些Widget被編譯成一個(gè)jar文件方便用戶調(diào)用。TrUMP是一個(gè)Firefox plugin來(lái)自動(dòng)生成UI Module。
另外,Tellurium還提供兩個(gè)參考子項(xiàng)目(Reference Projects),分別為JUnit和TestNG項(xiàng)目,來(lái)給用戶示范如何創(chuàng)建Tellurium測(cè)試項(xiàng)目和如何使用Tellurium的各種功能。
除此之外,Tellurium還提供了Tellurium Maven Archetypes,使得用戶可以用一個(gè)Maven命令可以創(chuàng)建自己的Tellurium測(cè)試項(xiàng)目。
4、介紹一下Tellurium的代碼貢獻(xiàn)者們吧?
我主要是負(fù)責(zé)Tellurium的整體設(shè)計(jì)和很大一部分的代碼編程。除我之外,現(xiàn)在還有四個(gè)來(lái)自美國(guó)和英國(guó)的隊(duì)友(team members)。Vivek Mongolu主要負(fù)責(zé)TrUMP的UI設(shè)計(jì)和實(shí)現(xiàn)。Matt Senter主要負(fù)責(zé)Maven支持,包括代碼的編譯,發(fā)布,和Maven Repository的維護(hù)。Haroon Rasheed參加了Tellurium參考項(xiàng)目(Tellurium Reference Projects)的開(kāi)發(fā),Selenium Grid的支持和其他的維護(hù)工作。Mikhail Koryak參于了TrUMP的開(kāi)發(fā)工作,他是jQuery方面的專家,負(fù)責(zé)Tellurium的jQuery支持,F(xiàn)在參與Tellurium Engine的開(kāi)發(fā)。