很多敏捷團隊已經(jīng)使用了Selenium和Watir等 工具進(jìn)行驗收測試或用戶(hù)接口測試。這些工具通過(guò)驅動(dòng)Web瀏覽器的方式反映用戶(hù)體驗,并且為測試那些使用DHTML和Ajax構建的動(dòng)態(tài)接口提供強力支 持。然而,隨著(zhù)更多的團隊采納類(lèi)似的工具,他們發(fā)現,運行這一整套瀏覽器驅動(dòng)的Web接口測試會(huì )花費很長(cháng)時(shí)間,而導致構建太慢。敏捷團隊可能就不得不在全 面測試和構建速度之間做出艱難的選擇。使用Selenium的用戶(hù)中,有人通過(guò)使用Selemium-RC運行多個(gè)測試,也有人將測試分配給多個(gè) Selemium-RC運行測試,但幫助有限。雖然對于少量并行是有效的,但對于大量并行卻無(wú)能為力。Selenium用戶(hù)現在有了另一種選擇:Selenium Grid。
Selenium Grid是Selenium的一個(gè)擴展,也是免費且開(kāi)源的(Apache License 2.0)。它把管理一小撮Selenium-RC實(shí)例的事情和為了運行一個(gè)測試而連接一個(gè)Selenium實(shí)際的事情分開(kāi)了。實(shí)際上,Selenium Grid是提供了一個(gè)hub,象個(gè)用于控制測試的遠程控制器,但是是顯式地將測試請求發(fā)送到一個(gè)或多個(gè)機器上的某個(gè)有效的Selenium-RC實(shí)例上。 這個(gè)Selenium Hub負責以下這些事情:
使用Selenium Gird時(shí),Selenium測試可以通過(guò)名稱(chēng)選擇具體環(huán)境的實(shí)例,例如某個(gè)測試可以運行在Windows XP系統的IE7上,而其它實(shí)例卻指定運行在Ubuntu的Firefox 1.5之上。
更重要的是,它允許組織構建一個(gè)復雜的包含多種必要的測試環(huán)境的測試機群,并在其上并行運行一個(gè)或多個(gè)項目的測試。這將在測試方面有顯著(zhù)的提高,最終減少每個(gè)項目所需要的基礎設施。某些大型組織對這一點(diǎn)認識的最為深刻(比如Google就在用相似的方法),但即使是對于單個(gè)項目的單個(gè)機器也是有價(jià)值的。
Selenium-RC 最近已經(jīng)大幅度地改進(jìn)了性能,包括在單一線(xiàn)程的環(huán)境下。但是,多機器多線(xiàn)程測試對于長(cháng)時(shí)間測試來(lái)說(shuō)還是有相當大的益處的。利用足夠的測試處理能力和測試的獨立性,對于減少最長(cháng)測試的時(shí)間是可行的。
雖然這些測試可以不必知道自己是在單機上順序運行還是運行于整個(gè)機群,但Selenium Grid卻不負責這些測試的并行執行,這些是由TestNG,Parallel JUnit和DeepTest for Ruby等完成的。
InfoQ采訪(fǎng)了Selenium Grid的團隊成員,并問(wèn)及并行執行測試可能對Selenium測試用例的影響:
我們討論過(guò)隔離性,以及開(kāi)發(fā)Grid之前所面臨的問(wèn)題。我們想現在就把這個(gè)擔子交給寫(xiě)測試的人,讓他們來(lái)設計測試用例,以確保它們之間不會(huì )相互影響。當 然,這個(gè)問(wèn)題在Gird產(chǎn)生之前就已經(jīng)存在了。你不想讓你的Selenium受其執行順序的影響,那在每個(gè)測試執行之前要做一些數據初始化工作,執行這后 再清理掉。然而,這不是一個(gè)優(yōu)雅的解決方案。理想情況下,你的Selenium test最好只了解這個(gè)應用的前端,但實(shí)際上,通過(guò)暴露一點(diǎn)數據給測試,會(huì )使針對具體的Scenarios寫(xiě)測試比較快且方便,而且由于只要較少的導航頁(yè) 就可達到被測試頁(yè),運行時(shí)間會(huì )較少。嗯,看來(lái)有一點(diǎn)兒道理啦!但是不管怎么樣,我們還是希望Grid能夠支持這兩種方式,不久前我們找到了一些方法可以在 數據庫層隔離這些測試。雖然還只算是alpha版,但它可能會(huì )成為Grid的一部分,也可有是一個(gè)獨立的項目。
在談到Selenium Grid的未來(lái)時(shí),開(kāi)發(fā)團隊認為以下特性中的內容最終會(huì )成為Selenium Grid的一部分:
原文轉自:http://kjueaiud.com