張煥生,劉春玲,王靜
(1.河北工程技術(shù)高等專科學(xué)校計算機系,河北滄州 061001;2.公安部第一研究所,北京 100048)
基于Web應(yīng)用的負(fù)載測試研究
張煥生1,劉春玲1,王靜2
(1.河北工程技術(shù)高等專科學(xué)校計算機系,河北滄州 061001;2.公安部第一研究所,北京 100048)
為保證Web系統(tǒng)在實際運行中提供良好可靠的性能,針對Web應(yīng)用的復(fù)雜特點,提出基于訪問過程的負(fù)載測試方法。通過對用戶訪問過程進行劃分,綜合考慮影響測試結(jié)果的各種因素,并建立模型以模擬真實用戶,將該方法結(jié)合自動化測試工具應(yīng)用在一個Web系統(tǒng)上,針對測試結(jié)果進行分析,提出優(yōu)化方案。實驗表明:該方法能夠較準(zhǔn)確地模擬Web應(yīng)用的真實負(fù)載,找出瓶頸,提高系統(tǒng)性能。
Web應(yīng)用;負(fù)載;訪問過程;聚類
Web應(yīng)用以其方便快捷、易于管理和維護等特點逐步深入到人們的生活中。因為業(yè)務(wù)量的不斷增大,一些熱門的Web站點在運行中頻繁發(fā)生數(shù)據(jù)延遲、服務(wù)中斷甚至癱瘓的事故,給用戶造成不便也給運營商帶來損失。因此,在Web應(yīng)用投入使用之前,必須進行負(fù)載測試,考察各項度量指標(biāo),找出系統(tǒng)的瓶頸。但是,Web應(yīng)用體系結(jié)構(gòu)復(fù)雜、實現(xiàn)過程中多種技術(shù)的使用、Web用戶以及網(wǎng)絡(luò)的不確定性,都使得負(fù)載測試?yán)щy很大[1],而只有真正模擬了真實的用戶負(fù)載,測試結(jié)果才是準(zhǔn)確可靠的,才能保證在實際運行中提供良好、可靠的性能,減少潛在的風(fēng)險。針對這一問題,本文提出基于訪問過程的負(fù)載測試方法,綜合考慮影響測試結(jié)果的各種要素建立模型,較準(zhǔn)確地模擬Web應(yīng)用的真實負(fù)載,結(jié)合使用自動化測試工具LoadRunner進行組織和管理測試,能夠較快地收斂到被測試應(yīng)用系統(tǒng)的負(fù)載承受能力和性能下降的轉(zhuǎn)折點,找出系統(tǒng)瓶頸,提出解決措施,從而提高系統(tǒng)的性能。
由于Web應(yīng)用的復(fù)雜特點,如何根據(jù)系統(tǒng)的使用方式和客戶端以及服務(wù)器端的各種特征信息來確定負(fù)載,使其接近于真實的用戶負(fù)載成為關(guān)鍵問題,本文提出了基于訪問過程的負(fù)載測試方法,見圖1。
該測試主要由以下2階段組成:
(1)采用基于訪問過程的負(fù)載測試方法初步確定Web應(yīng)用的負(fù)載。建立真實有效的模型,充分考慮影響測試結(jié)果的若干因素,修正腳本。(2)由測試工具里面的負(fù)載產(chǎn)生器根據(jù)以上數(shù)據(jù)生成測試用例,并對某Web應(yīng)用進行測試。利用性能監(jiān)視器工具監(jiān)視測試過程和結(jié)果,并反饋給測試者。

圖1 基于訪問過程的負(fù)載測試框架
1.1 基于訪問過程的負(fù)載劃分
把用戶對Web應(yīng)用的訪問過程所經(jīng)過的各個路徑以及完成這一路徑的不同方法叫做子過程。每個子過程可以分為更小的子過程,當(dāng)子過程不能再分時,把它叫做一個基本訪問過程。根據(jù)這種思想把用戶對Web應(yīng)用的整個訪問過程進行相對獨立的劃分,劃分出的若干個基本訪問過程作為虛擬用戶,初步分析這些虛擬用戶和實際使用中真實用戶給服務(wù)器施加的負(fù)載性質(zhì)基本相同,進行初步的腳本錄制并保存。
例如用戶進行資源下載時,可把整個訪問過程做如圖2所示劃分。
1.2 服務(wù)器日志的聚類分析
對服務(wù)器日志的聚類分析[2]是在沒有先驗知識的情況下,將物理或抽象的對象集合劃分為類似的對象組成多個組,使同組中的對象具有最大的相似性,并進行標(biāo)號。然后對簇進行處理分析,目的是確定各個訪問子過程的訪問頻率、持續(xù)時間以及百分比等要素,為設(shè)計測試用例提供依據(jù)。

圖2 訪問過程的劃分
Web日志挖掘并不是簡單地把數(shù)據(jù)挖掘算法應(yīng)用在Web日志上,在使用挖掘算法之前必須進行數(shù)據(jù)預(yù)處理,由3個階段完成:(1)數(shù)據(jù)清洗。將服務(wù)器日志中用戶訪問頁面的日期、持續(xù)時間、IP地址等有用條目保留并格式化,刪除與本文訪問過程無關(guān)的信息。(2)用戶session的確定[3]。利用session對象存儲的信息與用戶建立聯(lián)系,得到用戶session信息,并格式化。(3)為確定各種用戶訪問過程的信息,做如下處理:
當(dāng)訪問Web服務(wù)器的是注冊用戶時表示為:{userID,{sessID,{<pageID,time>}}},是匿名用戶時表示為:{ip,{sessID,{<pageID,time>}}}。其中sessID是用戶的session ID,pageID是頁面的ID,time是訪問的時間。userID是注冊用戶ID,ip是用戶IP地址。
數(shù)據(jù)預(yù)處理后,本文采用BIRCH算法[3]進行聚類分析。分析結(jié)果用于建立模型。
1.3 建立模型修正腳本
為使測試最接近于真實負(fù)載,充分考慮影響測試結(jié)果的各種因素,建立真實有效的模型。
1.3.1 訪問過程建模
把用戶對Web應(yīng)用的訪問進行建模。對Web應(yīng)用的訪問實際上是用戶執(zhí)行的一系列訪問子過程,但測試中不可能窮舉所有的這些過程。虛擬用戶只要模擬與實際負(fù)載相同的負(fù)載水平即可,例如把下載的整個過程,分為登錄/瀏覽/搜索/下載4個子過程。即用4個虛擬用戶模擬此訪問過程。
用戶的每一訪問過程通常帶給系統(tǒng)的負(fù)載壓力是不完全一樣的,為準(zhǔn)確模擬實際用戶的訪問過程,需確定各負(fù)載的百分比。例如,瀏覽和下載兩個訪問過程差別就很大。瀏覽一般是靜態(tài)頁面,帶給服務(wù)器的負(fù)載壓力小。而下載一般需與數(shù)據(jù)庫甚至其他子系統(tǒng)通信,帶給服務(wù)器的壓力就大得多。用戶百分比等信息通過聚類分析得到。基于此,對錄制的測試腳本進行修正。
1.3.2 訪問延遲建模
不同的用戶通常在完成同樣的訪問時所表現(xiàn)出來的延遲時間是不同的。為了更真實地模擬真實用戶的訪問過程,必須對用戶進行分類,劃分的越細(xì)致,延遲模型的準(zhǔn)確度就越高。為此采用了正態(tài)分布的數(shù)學(xué)模型[4],用戶延遲圖如圖3所示。根據(jù)該模型建立比較準(zhǔn)確的用戶延遲數(shù)據(jù),修正腳本。

圖3 正態(tài)分布的用戶延遲圖
1.3.3 訪問放棄建模
根據(jù)日志分析器提供的信息,確定頁面可接受的打開時間,一旦超時將得出用戶可能的放棄率。如當(dāng)首屏響應(yīng)時間小于5s時是比較優(yōu)秀的,放棄率為0%,10 s以內(nèi)是可以接受的,放棄率是25%,10 s以上用戶會選擇刷新或離開。
1.3.4 其他負(fù)載信息建模
借助日志分析器并利用AUT和WUS方法[5-6]收集負(fù)載信息。
(1)訪問分布表。記錄Web應(yīng)用各訪問在一天中不同時段的吞吐率情況。
(2)訪問簡表。記錄各訪問在高峰階段和非高峰階段的吞吐率對數(shù)據(jù)庫和Web服務(wù)器負(fù)載情況以及操作失敗帶來的風(fēng)險信息。
Web應(yīng)用實現(xiàn)過程中涉及到多種技術(shù)的使用,使得測試任務(wù)非常艱巨。選擇合適的自動化測試工具可以減少測試的時間和測試開銷[7]。目前Web應(yīng)用測試工具眾多,其中常用的Web性能測試工具有:微軟的WAS、Rational Robot、Jmeter、LoadRunner、OpenSTA等。其中LoadRunner可以預(yù)測系統(tǒng)的行為和性能,適用于各種體系架構(gòu)。它能模擬成千上萬個用戶并發(fā),進行實時地性能檢測,支持的協(xié)議和技術(shù)非常廣泛,可以最大限度地縮短測試時間,優(yōu)化性能[8]。基于此選用其作為測試工具。
現(xiàn)對一個綜合型IT網(wǎng)站進行測試。該網(wǎng)站主要提供用戶的注冊登錄、IT信息、交流空間(論壇、群或Blog)、資源下載或上傳、搜索、視頻等。測試流程如圖4所示。
3.1 測試計劃的制定
測試計劃主要包括測試目標(biāo)、策略、工具(本文測試工具選用LoadRunner)、進度和測試資源等。
3.2 設(shè)計測試場景
設(shè)計測試場景的關(guān)鍵是使設(shè)計的負(fù)載能代表真實負(fù)載,一般按以下3原則:

圖4 負(fù)載測試流程
(1)應(yīng)確定訪問過程的組合以反映真實情況。窮舉執(zhí)行所有訪問過程是不現(xiàn)實的,經(jīng)驗表明選擇執(zhí)行80%左右是比較有效的,選擇執(zhí)行率高、給Web服務(wù)器和數(shù)據(jù)庫服務(wù)器帶來較重負(fù)載的訪問。基于此選擇了7個訪問過程:注冊、登錄、瀏覽、搜索、論壇、視頻和下載作為測試基礎(chǔ)。
(2)測試的速度應(yīng)反映真實用戶訪問的速度。針對日志分析、性能監(jiān)測結(jié)果,得到負(fù)載訪問數(shù)量、平均訪問時間(或思考時間)等信息。
(3)確定綜合負(fù)載以反映真實的測試數(shù)據(jù)。設(shè)計一天某時段的訪問數(shù)為2 000,根據(jù)7個訪問過程,綜合考慮各模型信息,得到綜合負(fù)載,給出部分?jǐn)?shù)據(jù)如表1所示。
3.3 開發(fā)測試腳本
首先根據(jù)訪問過程的劃分使用LoadRunner[9]的Virtual User Generator生成初步的測試腳本;然后根據(jù)各種模型修正腳本,用LoadRunner的Controller組織管理測試;最后對腳本進行反復(fù)調(diào)試和驗證,保證測試結(jié)果的準(zhǔn)確性。
3.4 運行、分析和優(yōu)化
運行測試場景、分析結(jié)果、優(yōu)化系統(tǒng)需要反復(fù)進行。
運行時由輕負(fù)載(如5~20個虛擬用戶)到中等負(fù)載(如20%左右的負(fù)載)再到重負(fù)載(如100%的負(fù)載)甚至超負(fù)載(如120%的負(fù)載)分階段進行。運行測試場景時,發(fā)現(xiàn)通過逐漸增加用戶數(shù)進行并發(fā)用戶(都運行相同的行為腳本,比如登錄操作)數(shù)目測試[10],來模擬峰值負(fù)載的時候,當(dāng)用戶達到1000時,系統(tǒng)的運行響應(yīng)速度開始降低,出現(xiàn)部分錯誤,再繼續(xù)增加一定用戶數(shù)量,系統(tǒng)中活動的用戶數(shù)竟呈直線下降,并且服務(wù)器返回大量錯誤信息。這說明,此時系統(tǒng)出現(xiàn)性能瓶頸,需要更新服務(wù)器硬件或?qū)ο到y(tǒng)進行其他優(yōu)化。

表1 測試用例生成
系統(tǒng)響應(yīng)時間可以精確地找到性能下降的轉(zhuǎn)折點。運行中收集到的性能數(shù)據(jù)可通過LoadRunner Analysis生成一系列直觀的圖表和報告,供分析人員處理。經(jīng)分析發(fā)現(xiàn)視頻用戶數(shù)和文件下載用戶數(shù),是造成系統(tǒng)延遲的最大操作,其次是登錄、瀏覽、論壇等,這些都是訪問數(shù)據(jù)庫較頻繁的操作,那么影響性能的瓶頸即可能來源于數(shù)據(jù)庫。需要對數(shù)據(jù)庫進行優(yōu)化處理。
經(jīng)測試分析,發(fā)現(xiàn)系統(tǒng)性能瓶頸主要來源于數(shù)據(jù)庫和服務(wù)器,對系統(tǒng)可以進行以下3個方面的優(yōu)化處理:(1)對于系統(tǒng)中頻繁訪問數(shù)據(jù)庫但內(nèi)容更新較小的應(yīng)用,使用html靜態(tài)化實現(xiàn),例如論壇的公用設(shè)置信息,會大量被前臺程序調(diào)用,但更新較少,因此將其進行靜態(tài)化處理,以避免大量的訪問數(shù)據(jù)庫請求;(2)為解決服務(wù)器資源的不足,擴充服務(wù)器內(nèi)存,增大IIS緩存空間,設(shè)立獨立的圖片服務(wù)器,在圖片服務(wù)器和應(yīng)用服務(wù)器上進行不同的配置優(yōu)化,以保證系統(tǒng)的執(zhí)行效率和高消耗;(3)數(shù)據(jù)庫瓶頸問題,使用數(shù)據(jù)庫集群和庫表散列的方式解決,將數(shù)據(jù)庫進行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或表,再進一步對頁面或功能進行更小的數(shù)據(jù)庫或表散列,以保證使用低成本的數(shù)據(jù)庫同時提高了系統(tǒng)的性能。優(yōu)化之后要重新運行測試場景以驗證優(yōu)化的有效性。
基于訪問過程的負(fù)載測試方法,指出了保證測試成功的關(guān)鍵因素,能夠提高系統(tǒng)性能。但是在模型的建立過程中完善其他的影響因素以及廣泛實施到各種Web應(yīng)用是日后的研究重點。
[1]耿彩鳳.網(wǎng)絡(luò)測試中的Web測試[J].遼寧大學(xué)學(xué)報,2005,32(3):272-274.
[2]Han J,Kamber M.數(shù)據(jù)挖掘概念與技術(shù)[M].北京:機械工業(yè)出版社,2007.
[3]鄭玲霞,李大學(xué).基于用戶聚類分析的網(wǎng)站導(dǎo)航結(jié)構(gòu)智能優(yōu)化研究與實現(xiàn)[J].重慶郵電學(xué)院學(xué)報,2005,17(6):763-767.
[4]張江河,葛瑋,董云衛(wèi).Web應(yīng)用的負(fù)載測試策略研究[J].微機發(fā)展,2003,15(2):35-37.
[5]梁晟,李明樹.一種模擬驅(qū)動的Web應(yīng)用程序性能測試方法[J].計算機研究與發(fā)展,2003,40(7):1069-1075.
[6]孫鐵昆.Web應(yīng)用系統(tǒng)的測試技術(shù)研究與實現(xiàn)[D].武漢:湖北大學(xué),2006.
[7]路曉麗.Web應(yīng)用軟件的測試技術(shù)研究[D].西安:西北大學(xué),2006.
[8]李健.基于Web應(yīng)用系統(tǒng)的性能測試技術(shù)研究[D].西安:西安電子科技大學(xué),2010.
[9]尹文斌,鄭劍.基于LoadRunner的Web負(fù)載測試[J].江西理工大學(xué)學(xué)報,2008,29(4):13-15.
[10]談姝辰,尹軍.基于負(fù)載的Web性能測試研究與應(yīng)用[J].現(xiàn)代電子技術(shù),2007,253(14):139-142.
Load testing based on web app lication
ZHANG Huan-sheng1,LIU Chun-ling1,WANG Jing2
(1.Department of Computer,Hebei Engineering and Technical College,Cangzhou 061001,China;
2.The First Research Institute of Ministry of Public Security,Beijing 100048,China)
To ensure good and reliable performance of web system in actual operation,the authors proposed a load testmethod based on access process for complex Web application features.The access processes of users were divided and the models were built by considering the various factors to simulate the case of real users.And thismethod was combined with automated testing tool used in a web system to analyze the test results,and then optimization schemes were proposed.The experiment results show that it is able to more accurately simulate real load,find the bottlenecks,and improve system performance.
web application;load;access process;clustering
TP393.4;TP393.071;TP202+.7;TP391.9
A
1674-5124(2013)03-0096-04
2013-01-07;
:2013-03-01
張煥生(1978-),女,河北滄州市人,講師,碩士,主要從事計算機應(yīng)用研究。