黃華峰 黃華林
摘要:隨著互聯(lián)網(wǎng)應(yīng)用的不斷普及,各類基于網(wǎng)絡(luò)的應(yīng)用系統(tǒng)的規(guī)模及復(fù)雜性也與日俱增。傳統(tǒng)的Web應(yīng)用服務(wù)結(jié)構(gòu)中服務(wù)器在響應(yīng)客戶端請求時返回一個新的完整的網(wǎng)頁,而采用AJAX技術(shù)的web應(yīng)用服務(wù)僅返回頁面發(fā)生變化的部分。文中從AJAX技術(shù)的有關(guān)情況入手,分析了AJAX技術(shù)的工作流程和原理,以及該技術(shù)的優(yōu)點與缺點,介紹了基于AJAX技術(shù)的應(yīng)用系統(tǒng)的一般測試方法。
關(guān)鍵詞:AJAX;應(yīng)用系統(tǒng);測試
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)22-5345-03
AJAX技術(shù)指的是一種創(chuàng)建交互式網(wǎng)頁的開發(fā)技術(shù)。該技術(shù)是一種比較新型的Web應(yīng)用開發(fā)技術(shù),采用AJAX技術(shù)可以為用戶提供最好的Web體驗。AJAX技術(shù)是Web2.0時代的標(biāo)志性技術(shù),雖然提出的時間較晚,卻也得到廣泛的應(yīng)用和支持。在應(yīng)用AJAX技術(shù)中,很多用戶體驗到該技術(shù)為網(wǎng)頁操作帶來的改變。眾所周知,瀏覽器的廠家和版本眾多,所采用的客戶端系統(tǒng)也有所不同,代碼兼容性有很高的要求,進(jìn)行調(diào)試比較困難。確保用戶可以更加快捷的提升操作速度的同時,如何保障基于AJAX技術(shù)的Web應(yīng)用系統(tǒng)的質(zhì)量也同樣重要。
1 AJAX技術(shù)的工作原理及流程
AJAX技術(shù)的核心之一是XMLHttpRequest對象,這是一種可以支持異步請求的技術(shù)。換句話來說,XMLHttpRequest可以將用戶信息以異步方式發(fā)送到服務(wù)器端,并接收服務(wù)器響應(yīng)信息和數(shù)據(jù)。在建立Web應(yīng)用時,AJAX為客戶端頁面的刷新提供很大的方便。例如,在電子商務(wù)系統(tǒng)中,AJAX技術(shù)可以對購物車的物品總數(shù)進(jìn)行及時更新,不需要用戶單擊Update并等待服務(wù)器重新發(fā)送整個頁面。AJAX技術(shù)可以減少由服務(wù)器下載的數(shù)據(jù)量,從而提升應(yīng)用系統(tǒng)的性能。例如,在某個購物車頁面中,如果對購物車中的某項物品的數(shù)量進(jìn)行更新,會把整個頁面重新載入,這就要把整個頁面的數(shù)據(jù)從服務(wù)器端下載下來。若采用AJAX技術(shù)計算總數(shù)量,服務(wù)器端只返回更新后的總數(shù)量數(shù)據(jù),傳輸?shù)臄?shù)據(jù)量大大減少。采用AJAX技術(shù)可以直接對表格的數(shù)據(jù)進(jìn)行編輯,不需要用戶導(dǎo)航至新的頁面才能進(jìn)行數(shù)據(jù)編輯。如果用戶單擊了Edit,AJAX技術(shù)會把靜態(tài)的表格刷新為可進(jìn)行編輯的表格。如果用戶單擊了Done,就會發(fā)出一個AJAX請求實現(xiàn)更新服務(wù)器、刷新表格的效果。AJAX技術(shù)可以在無刷新的情況下更新界面,這就好比在用戶與服務(wù)器之間添加了一個中間層,確保用戶操作及服務(wù)器響應(yīng)達(dá)到異步化的目的。AJAX引擎主要負(fù)責(zé)處理、驗證數(shù)據(jù),如果需要由服務(wù)器讀取新數(shù)據(jù)時,可以讓引擎代為向服務(wù)器遞交請求。為了對 AJAX技術(shù)的工作原理更加清晰的認(rèn)識,通過圖1和圖2進(jìn)行比較。
通過比較得出,AJAX技術(shù)與傳統(tǒng)的Web開發(fā)有所不同,AJAX沒有以靜態(tài)頁面的形式看待Web應(yīng)用。AJAX技術(shù)的Web應(yīng)用是由相對較少的頁面組合而成,這里不同頁面就如一個小型的AJAX應(yīng)用。AJAX向服務(wù)器發(fā)送出HTTP請求,并異步方式處理服務(wù)器響應(yīng),其采用客戶端瀏覽器XMLHttpRequest對象并對其加以初始化,運用XMLHttpRequest對象的open和send方法對服務(wù)器發(fā)出HTTP請求,在其onreadyStateChange事件響應(yīng)中指定一個事件處理函數(shù)來處理XMLHttpRequest對象的執(zhí)行結(jié)果。
2 分析AJAX技術(shù)的優(yōu)點與缺點
1) AJAX技術(shù)可以在網(wǎng)頁內(nèi)部與服務(wù)器間達(dá)到通信的效果,沒有必要對整個頁面進(jìn)行刷新,不僅節(jié)省出大量的網(wǎng)絡(luò)資源,也在一定程度上減輕了服務(wù)器的負(fù)擔(dān),提升了Web應(yīng)用的響應(yīng)速率,為用戶帶來更加全新的體驗。AJAX技術(shù)可以在網(wǎng)頁內(nèi)部與服務(wù)器進(jìn)行通信,確??梢越⒅悄芑目蛻舳丝丶?。比如:建立數(shù)據(jù)表格、樹形控件等的復(fù)雜控件。
2) 智能化的客戶端控件可通過XMLHttpReqeust和服務(wù)器進(jìn)行通信,從而獲取相應(yīng)的數(shù)據(jù),也可以對數(shù)據(jù)進(jìn)行處理和緩存操作。智能化的客戶端控件有自己獨特的屬性、方法、及事件,確保Web編程如桌面的編程一樣具有豐富的功能。
3) AJAX技術(shù)不僅可以保障Web應(yīng)用保留自己B/S結(jié)構(gòu)的優(yōu)點,也具備C/S結(jié)構(gòu)應(yīng)用比較強(qiáng)大的功能和用戶感受。由此可見,AJAX技術(shù)就是Web標(biāo)準(zhǔn)和Web應(yīng)用的集合體,它在很大程度上改善了Web應(yīng)用的可用性和用戶的交互體驗,最后獲取用戶及市場的一致認(rèn)可。
3 AJAX應(yīng)用系統(tǒng)的測試
3.1 基于AJAX的應(yīng)用系統(tǒng)測試難點
1) AJAX的異步響應(yīng)的特性使得測試變得困難
傳統(tǒng)的Web應(yīng)用服務(wù)下,終端用戶習(xí)慣了點擊按鈕或鏈接然后等待瀏覽器載入頁面。但在動態(tài)HTML和AJAX應(yīng)用中,終端用戶希望通過頁面進(jìn)行方便的互動,用戶界面測試就變得復(fù)雜了。加上各種基于AJAX的架構(gòu)出現(xiàn)巨大的變化,對測試人員的技能水平要求更高了。
基于AJAX技術(shù)的應(yīng)用系統(tǒng),把更多工作轉(zhuǎn)移到客戶端,其用戶界面變得越來越相似,AJAX應(yīng)用變得越來越復(fù)雜。因為AJAX以異步方式運行,所以測試程序沒法設(shè)定狀態(tài),需要AJAX開發(fā)者從語法上分析服務(wù)端調(diào)用是如何影響性能及測試策略的。
2) JavaScript的調(diào)試也較為困難
JavaScript是AJAX應(yīng)用的基礎(chǔ),其本身就存在一些獨有的測試問題。從某些角度看,JavaScript是一種“啰嗦”的腳本語言,調(diào)試起來比較困難。測試人員需要找出JavaScript引擎在什么地方出現(xiàn)問題,然后與開發(fā)者一起圍繞該問題點進(jìn)行改進(jìn)。AJAX應(yīng)用傾向于調(diào)用JavaScript程序,并且程序的加載順序需要測試人員事先明確指定。再有,不同的瀏覽器對AJAX的處理也不盡相同,測試人員也要為此做更多的修改工作。
3) AJAX框架還會涉及其他方面的變化。
AJAX框架還會涉及其他方面的變化。例如JSON,很多AJAX架構(gòu)在AJAX中使用JSON部分取代了XML,同時提升其JavaScript對象特性。JSON數(shù)據(jù)格式比較簡單,易于讀寫,易于解析,支持多種服務(wù)器端語言,已廣泛使用。但是,不同AJAX框架的編碼請求方式不盡相同,在測試AJAX應(yīng)用時,測試人員需要花時間來弄清楚相應(yīng)請求報文的含義。
3.2 用Selenium測試AJAX應(yīng)用
1) Selenium簡介
Selenium是一套較為流行的針對WEB應(yīng)用的測試工具。使用Selenium可以編寫模擬終端用戶對Web頁面所作操作的測試腳本,設(shè)定測試用例后可以自動地對Web 應(yīng)用執(zhí)行黑盒測試任務(wù)。Selenium可以作為瀏覽器的插件直接在瀏覽器內(nèi)執(zhí)行操作,為當(dāng)前多種主流的瀏覽器所支持。第二代Selenium測試工具功能更加強(qiáng)大,其集成了WebDriver,WebDriver可以很便捷的直接控制瀏覽器。針對不同瀏覽器,測試人員可以選定相應(yīng)的WebDriver去進(jìn)行Web應(yīng)用的測試。
2) Selenium測試AJAX應(yīng)用程序
不需要服務(wù)器一次返回完整頁面到客戶端,是AJAX 應(yīng)用程序的一大優(yōu)勢??蛻舳艘援惒椒绞较蚍?wù)器請求數(shù)據(jù),服務(wù)器也只按需返回變化的數(shù)據(jù),客戶端只重新渲染頁面的變化部分,提高了用戶體驗,縮短了響應(yīng)時間,相對傳統(tǒng)的Web服務(wù)有著顛覆的變化,對AJAX 應(yīng)用程序進(jìn)行測試,其過程也有較大改變。
AJAX應(yīng)用的以異步的方式執(zhí)行發(fā)出請求到響應(yīng)服務(wù)器回應(yīng)的一系列動作的過程是,客戶端先向服務(wù)器發(fā)出請求,接著AJAX處理程序進(jìn)入等待狀態(tài),直到異步通信完成(獲得服務(wù)器回應(yīng)或出現(xiàn)異常等)。異步通訊完成后,AJAX程序?qū)⒁罁?jù)服務(wù)器的回應(yīng)數(shù)據(jù)繼續(xù)操作或是處理異常。在這個異步通信的過程中,AJAX處理程序存在等待狀態(tài),問題是,進(jìn)行測試時,這個等待狀態(tài)應(yīng)該持續(xù)多長時間?
要讓客戶端有適當(dāng)?shù)牡却龝r間來獲得服務(wù)器回應(yīng),最簡單最暴力的做法是在測試應(yīng)用程序中暫停一段時間,例如使用Thread.sleep(5000)或者使用selenium.wait(5000),這種做法大多時候是可行的。不過,一旦遇到網(wǎng)絡(luò)擁塞,AJAX處理程序發(fā)出請求過了暫停時間仍沒得到服務(wù)器回應(yīng),那么測試用例就執(zhí)行失敗了。
使用Selenium過程中,要處理Web測試過程中的等待時間有幾種便捷的方案可以選用。其中一種方式是,創(chuàng)建一個WebDriverWait對象,在指定時間內(nèi)等待一個頁面元素的出現(xiàn),在WebDriverWait對象的until()函數(shù)中定義等待的退出條件。以下是使用WebDriverWait類的一段樣例代碼。WebDriverWait對象在5秒內(nèi)每隔500毫秒掃描1次頁面變化,當(dāng)出現(xiàn)指定的元素"myElementId"后結(jié)束。
4 結(jié)束語
在Web應(yīng)用服務(wù)中引入AJAX技術(shù)能顯著提升Web應(yīng)用服務(wù)的性能,增強(qiáng)應(yīng)用系統(tǒng)的交互性,提升用戶體驗,同時系統(tǒng)的測試難度也增大了。該文以AJAX應(yīng)用系統(tǒng)的測試為研究依據(jù),概述了AJAX技術(shù)的工作原理及工作流程,分析了AJAX技術(shù)的優(yōu)缺點,介紹了使用Selenium對基于AJAX技術(shù)應(yīng)用系統(tǒng)進(jìn)行測試的一般方法。
參考文獻(xiàn):
[1] 蘇慶林.AJAX技術(shù)在基于Domino的油田協(xié)同辦公中的應(yīng)用[J].信息技術(shù),2014(1):121-123,127.
[2] 呂國勇,史祥龍.基于嵌入式Linux和AJAX技術(shù)的Web異步交互設(shè)計[J].計算機(jī)應(yīng)用,2013,33(z1):247-251.
[3] 陳瑞祥,季斌,王亞芳,等.基于AJAX的太陽能集熱工程遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計[J].制造業(yè)自動化,2013(22):104-107.
[4] 王宏偉,孫文磊,何麗等.AJAX技術(shù)在Web零件庫系統(tǒng)中的應(yīng)用研究[J].制造業(yè)自動化,2011,33(12):107-110.
[5] 楊鐵軍,李旭東.AJAX技術(shù)在糧情測控系統(tǒng)中的應(yīng)用研究[J].農(nóng)機(jī)化研究,2011,33(7):181-185.
[6] 黃華林.基于Selenium WebDriver的B/S架構(gòu)軟件的自動化測試研究[J].電腦知識與技術(shù),2013,9(23).