JavaScript集成測(cè)試工具Test Swarm發(fā)布
jQuery JavaScript程序庫(kù)的創(chuàng)建者John Resig發(fā)布了Test Swarm,該平臺(tái)用于對(duì)客戶端JavaScript進(jìn)行分布式的持續(xù)集成測(cè)試。由于對(duì)傳統(tǒng)JavaScript測(cè)試環(huán)境(無(wú)法擴(kuò)展)深感失望,John的新項(xiàng)目(目前還是私有的alpha版)旨在為眾多的開(kāi)發(fā)者和社區(qū)提供一個(gè)用以測(cè)試瀏覽器的系統(tǒng)。
正如John所述,在各種不同的瀏覽器中測(cè)試jQuery難度非常大:
我們力求在jQuery項(xiàng)目中支持所有主流瀏覽器的當(dāng)前版本、***發(fā)布版以及即將發(fā)布的每日構(gòu)建版/beta版(我們根據(jù)用戶升級(jí)瀏覽器的頻率對(duì)這些支持標(biāo)準(zhǔn)進(jìn)行了一些平衡——Safari與Opera用戶的升級(jí)頻率非常高)。
在本文發(fā)布時(shí)一共包含12個(gè)瀏覽器。
◆Internet Explorer 6、7、8。(不包括8中的7模式)
◆Firefox 2、3及每日構(gòu)建版
◆Safari 3.2、4
◆Opera 9.6、10
◆Chrome 1、2
當(dāng)然了,這只是Windows平臺(tái)上的,還不包括OS X及Linux。對(duì)于jQuery項(xiàng)目我們采取了明智的策略,通常只在一種平臺(tái)上進(jìn)行測(cè)試,但理想情況下還需要在所有平臺(tái)上測(cè)試Firefox、Safari及Opera(這三個(gè)是跨平臺(tái)的瀏覽器)。***的結(jié)果是在每一次提交前后我們都要在12個(gè)獨(dú)立的瀏覽器上運(yùn)行10個(gè)獨(dú)立的測(cè)試套件。跨瀏覽器的JavaScript測(cè)試的可伸縮性還不行。
如果測(cè)試需要與用戶進(jìn)行交互,那么這對(duì)于jQuery乃至任何大量使用JavaScript的Web應(yīng)用來(lái)說(shuō)都是糟糕透頂?shù)氖虑榱恕?/P>
一些測(cè)試套件(如Yahoo UI、jQuery UI及Selenium)可以對(duì)用戶交互進(jìn)行自動(dòng)化(你可以編寫類似于“點(diǎn)擊按鈕”這樣的測(cè)試)。大多數(shù)情況下這能滿足我們的要求,但所有這些僅僅是對(duì)實(shí)際用戶交互的一種模擬。沒(méi)有什么東西可以與讓人手工運(yùn)行一些容易重現(xiàn)(并且可驗(yàn)證)的測(cè)試相提并論。
這是***的可伸縮性問(wèn)題。用自動(dòng)化的測(cè)試套件乘以想要運(yùn)行的測(cè)試個(gè)數(shù),手工在12個(gè)瀏覽器中運(yùn)行100個(gè)測(cè)試簡(jiǎn)直是天方夜譚。一定還有更好的辦法,因?yàn)楹苊黠@:跨瀏覽器的JavaScript測(cè)試的可伸縮性還不行。
像Selenium Grid這樣的解決方案有幾個(gè)限制:
據(jù)我所知,Selenium Grid需要用Selenium來(lái)運(yùn)行測(cè)試。目前還沒(méi)有哪個(gè)主流的JavaScript程序庫(kù)使用了Selenium(這么做的代價(jià)也不?。?/P>
它無(wú)法測(cè)試非桌面機(jī)。每個(gè)服務(wù)器都必須運(yùn)行一個(gè)后臺(tái)程序來(lái)處理眾多任務(wù),這樣移動(dòng)設(shè)備就不行了。
它無(wú)法測(cè)試未知的瀏覽器。每個(gè)瀏覽器都需要特殊的回調(diào)代碼以讓Selenium加載瀏覽器,這樣未知的瀏覽器(如IE 8、Opera 10、Firefox Nightly及Chrome)可能就沒(méi)法運(yùn)行了。
最重要的是:Selenium Grid要求你擁有大量機(jī)器來(lái)運(yùn)行測(cè)試,這不太可行,尤其是在分布式的開(kāi)源JavaScript開(kāi)發(fā)下更是如此。因此我們需要更加行之有效的解決方案。
John提出的解決方案Test Swarm基于JavaScript客戶端,該客戶端會(huì)持續(xù)不斷地向中央服務(wù)器發(fā)出連接請(qǐng)求以運(yùn)行測(cè)試。服務(wù)器收集測(cè)試套件并將其發(fā)送到各自的客戶端上:
以下是我設(shè)想的Test Swarm的工作方式:開(kāi)源的JavaScript程序庫(kù)將測(cè)試套件提交到中央服務(wù)器上,同時(shí)用戶也會(huì)參與進(jìn)來(lái)。程序庫(kù)的用戶需要在其日常的工作中額外開(kāi)兩個(gè)瀏覽器窗口來(lái)輔助我們的工作,這樣他們會(huì)感覺(jué)到也在參與著項(xiàng)目(其實(shí)就是這樣!)。
程序庫(kù)還可以將手工測(cè)試發(fā)給用戶。新的手工測(cè)試到來(lái)時(shí)會(huì)通知用戶(通過(guò)聲音提示?),這樣他們就能迅速執(zhí)行了。
用戶提供的這些幫助也不是無(wú)償?shù)模何覀兛梢越y(tǒng)計(jì)參與最積極的用戶,然后對(duì)前幾名進(jìn)行嘉獎(jiǎng)(T恤、杯子、書等等)。
相關(guān)信息
Test Swarm基于何種協(xié)議?
基于MIT協(xié)議(服務(wù)器端采用PHP和MySQL,客戶端是一些簡(jiǎn)單的JavaScript)。
除了框架所有者以外,你認(rèn)為它對(duì)于其他組織有何價(jià)值?
我認(rèn)為這對(duì)于其他組織和廠商都大有裨益。下面是我設(shè)想的成長(zhǎng)計(jì)劃:
首先開(kāi)放給主流的JavaScript程序庫(kù)(他們已經(jīng)建立好了測(cè)試套件和測(cè)試體制)。
接下來(lái)開(kāi)放給其他開(kāi)源的JavaScript項(xiàng)目。
然后開(kāi)放給其他組織,只要這些組織允許匿名用戶運(yùn)行其測(cè)試就行。
當(dāng)然通過(guò)這些步驟,任何組織都可以輕松下載服務(wù)器軟件并運(yùn)行自己的swarm實(shí)例——無(wú)需通過(guò)主要的Test Swarm服務(wù)器的測(cè)試。
在最初的聲明中,John還提到了Test Swarm的“corporate”版:
Test Swarm的“corporate”版已經(jīng)引起了很多人的興趣。目前對(duì)此還沒(méi)有什么計(jì)劃(除了以開(kāi)源的形式發(fā)布該軟件),我倒是想留點(diǎn)空間以便將來(lái)的擴(kuò)展(或許用戶會(huì)因手工測(cè)試而得到一些報(bào)酬——就像Mechanical Turk測(cè)試JavaScript那樣——我不知道,但確定的是其成長(zhǎng)空間很大)。
如果對(duì)Test Swarm感興趣可以索取其alpha版。
【編輯推薦】