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框架還定義了一套全新的領域特定語言來進行web測試,比如對于Google搜索模塊,你可以使用下面的DSL來完成一次搜索測試:
type "GoogleSearchModule.Input", "Tellurium test"
click "GoogleSearchModule.Search"
waitForPageToLoad 30000
目前Tellurium已經發布0.6.0版本,InfoQ中文站就Tellurium的方方面面,特地郵件采訪了Tellurium的創始人方劍先生:
1、請介紹一下您自己,以及所從事的工作?
我的名字是方劍,曾經在上海讀書和工作多年。2000年在美國佐治亞理工(Georgia Institute ofTechnology)求學。畢業后在一家美國公司做軟件開發工作,從事企業級應用(EnterpriseApplications)開發,主要負責服務器端框架的設計和開發,商業應用服務(Business Services)的開發,和一些軟件規范的制定。此外,我還有很強的人工智能和計算機網絡方面的研究背景。 2、您開始做Tellurium這樣一個自動化測試框架,是基于怎樣的考慮呢?我看到有特色的兩點是使用UI module-based這樣的描述塊來定義待測的UI,以及使用DSL來表述測試代碼,還有哪些與以往框架不同的設計思想,緣起是什么呢?
在2007年,我們公司開始注意到Selenium測試框架。由于我們用敏捷開發方法(Agiledevelopment),在Scrum隊伍中,每個人的角色開始變得多樣性了。我有個工作(Task)就是用Selenium去測試我們的一個應用程序(是用Dojo Javascript框架寫的)。應該說在當時,Selenium是一個開創性的框架,如果用他們的復制和重播模式(recordandreplay)很容易產生測試腳本。但一旦我開始用Selenium,我發現它還是有一些缺點和不便之處。主要測試腳本是對代碼的更新很脆弱(Fragile)。 但是在一個敏捷開發的環境下,一般都有階段性的用戶接受測試(User AcceptanceTest),由于程序一直更新,Selenium測試腳本的維護就變成一個很頭痛的問題。而且,對于很多企業級應用,復制和重播模式本身就不太適用,比喻我們有很多數據格(DataGrid),它的內容本身就是動態的。其他的問題包括Selenium測試腳本不是結構化的,你可以看到處有XPath,這更增加了維護的困難。因此,我們決定開發一個在Selenium之上的框架來解決這些問題。我做的第一個版本是通過Spring框架和物體工廠(ObjectFactory)來產生UI元素(Element),使得框架能把UI元素的表達和測試代碼分開,自動處理Javascript事件,并在一定程度上能處理動態網頁內容。
由于這個框架用XML來配置UI元素,使用起來并不是很方便。在2008年,我用Groovy重寫了整個框架并變成一個開源項目(opensource project)。新的版本主要有三個大的改變。首先是采用UIModule(UI模塊)描述塊來定義待測的UI。這樣做的好處是系統自動生成運行時的Locator,即使你改變了其中的一些元素,框架本身會生產新的Locator來適應這種改變。而且框架側重一個集合的元素,而不是單個元素,這樣使得我們可以利用元素之間的關系來幫助我們定位他們在DOM中的位置。此外,這樣也增加了重用性,比如,我們可以定義一些TelluriumWidget,在你的測試代碼中可以直接定義這個Widget,而不需要重新定義一個個的單個元素。第二個大的變化是用DSL來寫測試代碼。這樣增加了表達性使得用戶很容易寫和維護測試代碼。Tellurium測試代碼可以用Java, Groovy,或純DSL腳本來寫。Tellurium本身也支持JUnit和TestNG測試框架。另一個大的變化是開始用UI模板(UItemplates)來表述動態網頁內容,例如數據格(Data Grid)。這樣使得Ajax應用程序的測試變得可行和容易。 3、 Tellurium主要有那些子項目構成?
Tellurium主要是由Tellurium Core, Tellurium Engine, TelluriumWidget Extensions, 和Tellurium UI Module Plugin(TrUMP)子項目構成。TelluriumCore主要是處理DSL和動態生成Locator. Tellurium Engine是測試驅動模塊,目前還是利用Selenium Core.Tellurium Widget Extensions包括一些DOJO和ExtJSJavascript框架的可重用Widget模塊。這些Widget被編譯成一個jar文件方便用戶調用。TrUMP是一個Firefoxplugin來自動生成UI Module。
另外,Tellurium還提供兩個參考子項目(Reference Projects),分別為JUnit和TestNG項目,來給用戶示范如何創建Tellurium測試項目和如何使用Tellurium的各種功能。
除此之外,Tellurium還提供了Tellurium Maven Archetypes,使得用戶可以用一個Maven命令就可以創建自己的Tellurium測試項目。 4、介紹一下Tellurium的代碼貢獻者們吧?
我主要是負責Tellurium的整體設計和很大一部分的代碼編程。除我之外,現在還有四個來自美國和英國的隊友(teammembers)。Vivek Mongolu主要負責TrUMP的UI設計和實現。MattSenter主要負責Maven支持,包括代碼的編譯,發布,和Maven Repository的維護。HaroonRasheed參加了Tellurium參考項目(Tellurium Reference Projects)的開發,SeleniumGrid的支持和其他的維護工作。MikhailKoryak參于了TrUMP的開發工作,他是jQuery方面的專家,負責Tellurium的jQuery支持,F在參與TelluriumEngine的開發。 5、你了解在自動化測試工具這個領域,有著哪些和Tellurium類似的競爭對手嗎?比如ThoughtWorks的Twist?與它們相比,Tellurium的優勢在什么地方?有什么劣勢嗎?
Tellurium脫胎于Selenium,它的主要競爭對手還是Selenium,畢竟Selenium已經推廣好幾年了。要用戶用一個新的框架是要花一定的時間的。此外CanooWebTest也是一個比較流行的網頁測試框架(Framework)。但是Tellurium還是有它本身的優勢的,如UIModule的概念,魯棒性好,可重用性好,表達性好(Expressiveness)。用Tellurium寫的測試代碼的結構性好,比較容易維護。
畢竟Tellurium還是一個新的框架,到現在只有一年多的開發時間。有些特色還有待成熟。此外,Tellurium要用到Groovy動態語言,盡管用戶并不一定需要了解Groovy才可用Tellurium,但由于Groovy相對比較新,所以不少人還是有疑豫的。
ThoughtWorks的Twist基本上是Selenium + GSpec, 就是在Selenium之上增加了行為測試(BehaviorDrivenTest)的DSL。其實我很早就考慮到對行為測試的支持,但精力有限,Tellurium目前還沒有這方面的實現。將來會增加的,可以和EasyB框架結合來支持行為測試,或直接實現對行為測試的支持。 6、現在Tellurium的應用情況是怎樣的?來自使用者的反響如何?
現在已經有不少Tellurium用戶,主要來自美國,印度和歐洲。由于Tellurium本身的特色,如易用,可維護性好,新的功能如對jQuerySelector的支持,使用者的反應還不錯。甚至有的用戶在自己的公司里給同事作Tellurium的培訓。當然,Tellurium還很年青,而且前一段時間由于全球性經濟危機的影響,我們對Tellurium的推廣還做得很不夠。以后會加大對Tellurium的推廣。7、Tellurium在社區采用了哪些方式和開發者們進行交互呢?
我們有自己的用戶組Tellurium user group,用戶提出問題往往能很快地得到解答。我們也有LinkedIn用戶組讓用戶之間能更好地交流。此外我們還鼓勵用戶參加Tellurium的設計討論和推廣。我們會每年從用戶中推選出一個最活躍用戶(most active user)和一個最有價值用戶(most valuableuser)。Tellurium將來會設推廣隊(EvangelismTeam),如果某人對Tellurium做了很多推廣工作,他/她也可以成為Tellurium正式成員(team member)。8、Tellurium未來的發展有怎樣的規劃嗎?有計劃推出中文的社區及文檔嗎?
盡管Tellurium和Selenium在概念上有很大的不同,一直到Tellurium 0.6.0,我們還是依賴Selenium Core作為底層的測試驅動Engine. Tellurium0.7.0將成為Tellurium發展史上的一個重要里程碑,我們將開發自己的測試驅動Engine使得Tellurium能更好,更有效地支持UIModule,同時可以進行UI Module的緩存(Caching)以增加其可用性和提高測試速度。并可對UIModule進行部分匹配以增加其魯棒性。在新的Tellurium Engine的支持下,Telluriumwidget將變得更容易,更實用,和更有效。其他的發展規劃包括TrUMP的改進,行為測試(Behavior DrivenTest)的支持,功能測試(functional test)的增強支持, 和IDE的支持。
畢竟我來自中國,當然希望得到更多的來自自己國家的用戶的參與和支持,F在我們已經開通中文社區和文檔項目,會有相關的中文文檔逐漸添加進來,我們也熱烈歡迎更多國內的開發者能加入進來,幫助支持和推廣Tellurium,謝謝。 9、能給國內的用戶一個快速的開始嗎?怎么立刻感受到Tellurium帶來的好處?
我們提供了一份中文版的Tellurium QuickStart,還有一個短小的演示:十分鐘感受Tellurium(10minutes to Tellurium)。它包括利用Tellurium Mavenarchetype去建立一個新的Tellurium測試項目,再用 Tellurium Firefox pluginTrUMP去自動生成一個UI Module,然后再寫自己的Tellurium測試代碼。
如果用戶不熟悉Maven, 他可以下載Tellurium參考項目(Tellurium Reference Project)。這個項目是我們用來測試Tellurium項目網頁的。包括了各種例子,可以直接運行。 更多有關Tellurium的信息,請參考DZone上的相關資料和Tellurium的Wiki。敬請期待Tellurium在InfoQ中文站的更多技術文章。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/