在性能測試中如何處理Ajax技術
想像一下現在是1999年。開發人員和QA人員對將HTML瀏覽器做為計算客戶端是很放心的?焖俚網絡線路部署好,大量的瀏覽器兼容性問題被清除,與C/S(Client/Server,客戶機/服務器)時期相比,UI(User Interface,用戶界面)的開發和調試變得很容易。終端用戶已經習慣于點擊鏈接并等待頁面載入。
現在,讓我們快進到2008年。動態HTML和Ajax(Asynchronous JavaScript and XML,異步JavaScript和XML)應用大量出現,Flash和Silverlight以瀏覽器插件方式遞送RIA(Rich Internet Applications,富因特網應用程序),終端用戶期望通過界面進行更便捷的互動,UI測試再次變得復雜起來。
雖然Ajax和RIA的出現并沒有改變客戶端性能這一基本問題,但是因為描述架構出現大量的、甚至是根本性的變化,所以對測試人員的技能水平提出比以往更高的要求。
Ajax為何對現有測試造成挑戰
Ajax為什么會對現有的測試計劃造成挑戰,有多方面的原因。一方面,通過把更多工作轉移到客戶端,準HTML(pre-HTML)用戶界面變得越來越相似,Ajax應用變得越來越復雜。因為Ajax以異步方式運行,所以測試程序沒法設定狀態,需要Ajax開發者從語法上分析服務端調用是如何影響性能及測試策略的。
另一方面,和任何語言一樣,JavaScript作為大多數Ajax應用的基礎,存在一些獨有的測試問題。從某方面來說,JavaScript是一種啰嗦的腳本語言,調試起來非常困難。測試人員需要找出JavaScript引擎在什么地方出現問題,然后與開發者一起圍繞該問題點進行設計和改進。Ajax應用傾向于調用JavaScript程序,并且程序的加載順序需要測試人員事先明確指定。
再退回到C/S時代。當需要在多個瀏覽器上測試某個應用程序時,我們對原先的HTML頁面重新請求一下即可。而今天,因不同的瀏覽器對Ajax的處理也不同,測試人員必須為此做更多的修改工作。
除了瀏覽器的不同以外,測試人員還必須對Ajax的不同風格進行測試。已經涌現出許多種Ajax框架,然而每一種框架各自對Ajax理念的理解都有不同的一面。因為瀏覽器在最初設計時并沒有考慮到支持Ajax,所以不同的Ajax框架對瀏覽器的不足之處都有不同的權變方案。測試人員必須針對此權變方案做相應的調整,并且隨著下一輪瀏覽器軟件的升級,又可能要做新的變動。
Ajax框架還可能引起其他很多方面的變化。以JSON(JavaScript Serialized Object Notation,JavaScript對象符號)為例, 其通過把Ajax架構作為一種提升JavaScript對象特性并在Ajax中部分取代XML的方法,從中獲益。另外,不同Ajax框架的編碼請求方式也有所不同,所以當使用Ajax應用時,測試人員需要花更多時間來弄清楚相應請求報文的含義。
Ajax自身面臨的挑戰
馬特·布雷伯格(Borland Silk Performer和Silk Test測試套件專家)提到,Ajax并不算新事物!白钚虑闆r是它已經變得非常受歡迎,” 他說,“并且它改變了性能測試和功能測試!
Ajax不存在一個確定的目標!癆jax不是一種標準,它更大程度上是一種技術,而沒有任何標準實施!辈祭撞癖硎,并補充說他注意到JSON風格的Ajax正變得比XML風格更為普遍。
多樣性更容易激發創新。既然Ajax框架起始于由五湖四海的成員組成的開源Web社區,維護Ajax應用可能就成為當前的唯一問題了。
“在Ajax之前,我們能忽視客戶端的數據處理,而現在再也無法如此!辈祭撞裾f,F在,測試人員必須考慮把多少工作量分配給客戶端,多少工作量分配給服務器.
“Ajax有好有壞,” 布雷伯格繼續說道!八哪康氖前岩恍┨幚砉ぷ鲝姆⻊掌鬓D移到客戶端! 但是,他指出,運行在瀏覽器的JavaScript腳本使客戶端更容易遭受安全攻擊。
同時,匆忙奔向Ajax已經導致一些“設計說明不足”的應用軟件開發。測試人員可能問一個非常好的問題“在開發之前,它被設計好了嗎?”
在過去的幾年里,我們已經看到應用向Ajax客戶端的偏移,但開發經理同樣有理由轉移到RIA系統,它們有更嚴格的程序邊界。RIA已經出,例如,Adobe Flash和微軟Silverlight。
“我們注意到在安全性和一致性等方面Ajax正面臨著許多挑戰,”布雷伯格說!霸谖铱磥,Ajax過后的下一波就是Flex(注:Flex 是Adobe公司提供的一種Presentation Server,展現服務,它是Java Web Container或者.Net Server的一個應用,根據.mxml文件,純粹的XML描述文件和ActionScript,產生相應的.swf文件,傳送到客戶端,由客戶端的Flash Player或Shockwave Player解釋執行,給用戶以豐富的客戶體驗。)!
實際上,當最新的Borland Silk測試套件工具附件最終瞄準在更好的Ajax測試上時,第一個可用的RIA腳本性能測試工具就出現了。
Ajax測試面臨的問題
Ajax模糊了Web界面和傳統圖形界面之間的分界,基斯杜化·莫里爾,WebPerformance(一家測試工具和服務提供廠商)的總工程師說道:“對各種測試來說,Ajax存在一項特別的挑戰。我們已知的測試套件是把網站當作一連串的頁面。如果你想抓取Ajax的所有內容,你將停止在一個頁面上。你只能獲取一個頁面,而不是一系列頁面。而JavaScript通過操作下層的對象模型,使得這個頁面內容隨著時間的變化而變化!
“使用網站測試專用工具,你能享受到把一個頁面部分地作為一個整體的優待。而Ajax剝奪了這些優待,”莫里爾說!斑@要求測試工具能對頁面有更深入的理解,而不只是簡單的把一個請求發送給服務端,然后將其響應結果取回來!爆F在,當一個工具模擬Ajax應用時,它必須按照正確地順序得到全部頁面元素,這些在以前可能是無關緊要的。
所有的問題總結來說,就是Ajax是一種更復雜的Web頁面顯示方式!皬臏y試和質量的立場來說,開發人員和測試人員面臨的挑戰之一就是應用變得越來越復雜,”莫里爾說。
“極端Ajax應用”正變得越來越像經典的富客戶端應用程序(Rich Client Application)。例如,通過使用Ajax,應用程序的狀態能從一個操作持續到下一個操作,這意味著對某一狀態進行測試的話,需要考慮到所有從其它狀態到達該狀態的路徑。換句話說,到達應用的某個狀態存在多種可能。
Ajax性能測試的兩個層次
在去年波士頓舉行的Ajax Experience會議上,鮑勃·布芬建議,Ajax性能問題和已經在傳統的面向對象開發中發現的問題有許多相似之處。為了避開陷阱,開發者必須返回到基礎,明白你的代碼是做什么的,是如何做的,這令人頭疼。
“這是一種不同的環境,因為通過使用Ajax,各種應用在客戶端都有其狀態,因此捕獲并重放測試腳本可能更加困難,”Web客戶端開發工具公司Nexaweb的首席架構師布芬說:“測試人員必須改變他們使用測試工具的方式。更多的是回遷到C/S測試,而不是基于表或者基于頁的測試!
他推薦,在各種不錯的工具中,能發現問題的是Yslow。這是雅虎開發的一個Firefox插件,它能在Ajax網頁創建過程中對資源的請求使用及其它因素標出級別。
對所有Ajax應用性能來說,JavaScript性能都是內在的,并且它至少應該從兩個角度來看,布芬說:“我把JavaScript性能描述為執行期間性能(runtime performance)和啟動期間性能(startup-time performance)。當陷入到使用Ajax應用時,你必須處理這個問題。這意味著你將面臨處理一堆JavaScript文件,這一堆文件的數量可能是20,甚至30!
布芬提到的另一個JavaScript分析工具是jsLex,它能系統地注入分析代碼。
上面介紹的Ajax多層復雜性也許可以讓某些開發經理對一些Ajax開發計劃重新進行考慮!霸贘avaScript編程中有更多的抽象層,”布芬說,并舉出JavaScript調用屏幕畫圖對象的例子進行描述!拔掖_實看見人們遇到限制,他們應該意識到:Ajax沒辦法滿足他們所有的應用!
從設計階段開始考慮Ajax性能
“當設計一個Ajax應用時,你需要考慮期望用戶去做什么操作。一個天才的應用——比如Google Maps(谷歌地圖)——能預料到用戶的下一個需求會是什么,并把這些需求呈現出來,”Gomez的技術副總裁布林說道。
在最開始的一到兩年里,Ajax的一個消極影響是,當人們看到一個類似Google Maps的應用時,會說‘我也要做成那樣!,這并不容易做到。打造一個高品質、并且達到性能要求的Ajax應用,必須從設計階段就開始考慮你的用戶將會做什么。
Ajax的未來充滿變數。在沉寂了一段時間之后,瀏覽器制造者可能已經準備好推出升級版本。布林說:“我們注意到幾大主流瀏覽器都很快就會推出新版本,它們都受到人們現在遇到問題的影響和推動!
他以即將到來的、微軟公司的IE 8的種種變化為例,“一個根本性的改變就是用戶的可用連接數。微軟現在改為允許一個主機一次能發起6個連接,而在以前對每個瀏覽器,這個數字是2。
布林指出,Ajax框架的權變方案允許更多的連接。但是,這些權變方案可能造成嚴重破壞,因為一些網站管理員可能并不知道期望連接數出現增加。
在去年秋季舉行的AEEC會議(Ajax Experience East Conference,Ajax Experience東部會議)上,會議內容包括提供網絡化的Firebug和IBM Page Detailer,以及用于客戶端分析的Firebug、Firebug Lite以及Dojo.Profile。
提高Ajax性能的建議
Ajax無疑是一個Web現象,同樣的,Web也是Ajax最佳性能實踐的展示平臺。程序員和測試人員都能從同行的經驗中獲益。特別是Google和Yahoo,提供了不少構建Ajax應用方面的有用建議。這兩個站點都有著豐富的Ajax使用經驗。
在Ajax應用中,更大程度上的目標不是減低延遲,而是減低“用戶可覺察的延遲”。 因此,Google開發者計劃(Google Developer Program)的雅各布·穆恩(Jacob Moon)建議團隊把精力集中在減少初始頁面載入時HTTP請求的數量,以及把JavaScript和CSS文件整合到單一文件中以提升Ajax代碼的性能。
Yahoo則為此提供了一系列規范來加快網站性能。同樣的,把HTTP請求數量盡量減少仍是一個提升客戶端用戶可察覺速度的基本手段。Yahoo建議把終端用戶80%的響應時間消耗在前端,主要是組件下載上。降低組件在頁面渲染上的請求數量是創建更快速頁面的關鍵。Yahoo組員們的另一個基本建議是:減少DNS查詢,避免重定向,把JavaScript代碼數量減至最少,并盡量減少重復腳本。
文章來源于領測軟件測試網 http://www.kjueaiud.com/