自動化測試框架Tellurium使用方法介紹
這個框架是從Selenium框架發展而來,但又具有不同的測試理念。大多數Web測試框架,比如Selenium,主要致力于單獨的UI元素。而Tellurium恰好相反,它把多個UI元素看作一個Widget整體,并將其稱作UI module。
拿Google搜索的UI做個例子,這個界面用Tellurium表示成如下這樣:
ui.Container(uid: "GoogleSearchModule", clocator: [tag: "td"]){
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"])
}
正如你在例子中看到的,UI module是嵌套的UI元素、tag以及attribute的集合。Tellurium在采用了UI module之后,更具表述性,對變化的響應也更加智能化。同時它也可以很容易地表示動態Web內容,并易于維護。
這個框架由以下組件組成:
Trump——一個Firefox插件,全稱是Tellurium UI Module Plugin,它可以在用戶選擇待測Web頁面上的UI元素后,自動生成UI module。
Tellurium IDE——另外一個Firefox插件,可以記錄用戶操作,并生成Tellurium測試腳本,包括UI module的定義、用戶的動作以及斷言。測試腳本是用Groovy寫成的。
TelluriumWorks——一個單獨的Java Swing應用,用于編輯和運行Tellurium測試腳本。另外還在開發一個針對IntelliJ IDEA的IDE插件。
JavaScript Widget Extensions——針對流行JavaScript框架的擴展,比如Dojo和jQuery UI。這樣用戶就可以在項目中引用發布的Tellurium jar文件,并在UI module定義中,把UI widget當作一個普通的Tellurium對象。
特性
主要特性包括:
UI module清楚地表示了待測的UI。在Tellurium的測試代碼中,并沒有直接使用定位器(locator)。而是使用uid對象來引用UI元素,從而更具表現力。比如:
type "GoogleSearchModule.Input", "Tellurium test"
click "GoogleSearchModule.Search"
使用UI屬性而不是固定的定位器來描述UI。實際的定位器將會在運行時生成。如果屬性改變了,新的運行時定位器也會由框架自動重新生成。Tellurium從而可以按需自適應UI的變化。
Tellurium 0.7.0中的Santa算法通過一次定位整個的UI module,從而進一步提高測試的智能性。此外還使用了UI module部分匹配機制,在一定程度上適應屬性的變化。
采用了Tellurium UI模板和Tellurium UID描述語言(UDL)來表示動態的web內容。
框架實行UI module和測試代碼的分離,從而有利于重構。
比如,UI和對應的測試方法定義在分離的Groovy類中。這樣,測試代碼就和UI module解耦了。
另外該框架還:
使用抽象的UI對象來封裝Web UI元素
支持Widget以實現可重用性
為UI定義、動作和測試提供一門DSL
支持組定位,從而一次定位一組UI組件
包括CSS選擇器支持,以改善在IE中的測試速度
提供定位器緩存和命令集來提高測試速度
支持數據驅動測試
對比Selenium和Tellurium
Selenium Web測試框架是最流行的開源自動化web測試框架之一。它是一款獨創性的框架,提供了很多獨一無二的特性和優勢,比如:基于瀏覽器的測試、Selenium Grid以及使用Selenium IDE來“錄制和回放”用戶的動作。
然后,Selenium有點問題。拿下面這段測試代碼舉個例子:
setUp("http://www.google.com/", "*chrome");
selenium.open("/");
selenium.type("q", "Selenium test");
selenium.click("http://input[@value='Google Search' and @type='button']");
如果有人不是很熟悉Google的搜索頁面,他能根據這段代碼,說出頁面的UI是什么樣子的嗎?定位器q在這里是什么意思呢?
萬一因為Web的變化,XPath //input[@value='Google Search' and @type='button']變成無效的了,怎么辦?更有可能發生的是,這段代碼需要逐行檢查才能找出那幾行需要更新的代碼。
萬一這段測試代碼里面有幾十上百個定位器怎么辦?使用Selenium IDE生成測試代碼,這可能在一開始比較容易,但歸納和重構起來就很困難了。
重構會是一個比從頭生成新測試代碼更乏味的過程。原因在于硬編碼的定位器和使用的測試代碼耦合太緊密了。因為測試代碼沒有結構化,維護代碼就變得異常困難。
作為一個低層次Web測試驅動框架,Selenium是一個很好的框架。然而,它需要投入更多的努力才能創建出智能的測試代碼。
Tellurium就是為解決Selenium中的大多數問題而誕生的。
Tellurium同時被設計用來解決Selenium的其他弱點。比如,IE性能一直是Selenium突出的問題。Tellurium的解決方案是,使用CSS選擇器來作為缺省的定位器。定位器由UI module自動生成,并改善了測試速度。
另外,在采用了Tellurium UI module緩存以及基于新的Tellurium引擎的命令集之后,測試速度得到進一步的提升。Tellurium還支持對Ajax應用的測試:Tellurium的List和Table UI對象被用來在運行時表示動態Web內容。而option對象則被用來在運行時表示同一Web元素的兩個不同UI。
與Selenium一樣,Tellurium可以用來測試任何基于HTML DOM結構的Web應用。
文章來源于領測軟件測試網 http://www.kjueaiud.com/