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