摘要:在整個web應(yīng)用的測試中,性能測試占非常重要位置,因?yàn)樾阅苤苯臃从沉薟eb應(yīng)用所提供服務(wù)的質(zhì)量水平。Web 應(yīng)用設(shè)計(jì)的復(fù)雜性和用戶使用的不可預(yù)測性給如何準(zhǔn)確地預(yù)測它的性能帶來了很大的挑戰(zhàn),而且隨著Web應(yīng)用的規(guī)模越來越大、用戶越來越多,這個挑戰(zhàn)變得更加嚴(yán)重。文中就如何準(zhǔn)確地設(shè)計(jì)負(fù)載測試進(jìn)行了深入研究,提出了對用戶導(dǎo)航、用戶延遲進(jìn)行建模的方法來設(shè)計(jì)負(fù)載測試,以使負(fù)載測試能夠準(zhǔn)確地模擬現(xiàn)實(shí)用戶環(huán)境和預(yù)測Web應(yīng)用的性能。最后應(yīng)用工具loadrunner 進(jìn)行負(fù)載測試實(shí)戰(zhàn)。
關(guān)鍵詞:Web應(yīng)用;負(fù)載測試;虛擬測試者;測試腳本;用戶會話;loadrunner;負(fù)載測試
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)11-20247-04
1 引言
一個Web站點(diǎn)為了個人消費(fèi)者、商業(yè)客戶、企業(yè)合作伙伴或者內(nèi)部用戶,都必須提供可靠、快速的性能,這是在評價(jià)一個Web應(yīng)用是否滿足用戶需求和期望的關(guān)鍵指標(biāo)。在這個競爭激烈的Internet 世界里,如果缺乏嚴(yán)格的過程,Web系統(tǒng)可能會在開發(fā)、發(fā)布和維護(hù)的過程中碰到一系列問題,甚至系統(tǒng)無法使用。而且如果一個企業(yè)的Web 應(yīng)用沒有良好的性能,就意味著它會失去潛在的用戶。所以,必須對Web 應(yīng)用進(jìn)行負(fù)載測試,了解它在不同的負(fù)載下的響應(yīng)情況。但是,由于Web應(yīng)用的復(fù)雜性和不可預(yù)測性,使得負(fù)載測試難度較大。如果負(fù)載測試不夠準(zhǔn)確,測試結(jié)果就是沒有任何用處的,甚至?xí)a(chǎn)生誤導(dǎo),使企業(yè)高估或者低估Web 應(yīng)用的能力[1]。因此,負(fù)載測試的設(shè)計(jì)是至關(guān)重要的,只有在設(shè)計(jì)的負(fù)載真正地模擬了現(xiàn)實(shí)用戶的工作負(fù)載,并且模擬的用戶行為真正模擬了現(xiàn)實(shí)用戶的行為,負(fù)載測試的結(jié)果才是可靠的,從測試結(jié)果得出的結(jié)論也才會正確。
2 負(fù)載測試
負(fù)載測試在不同負(fù)載下測試客戶端或者服務(wù)器端的響應(yīng)時間。負(fù)載測試也可以用來幫助測試人員計(jì)算在給定時間內(nèi)服務(wù)器可以處理的最大數(shù)量的事務(wù)數(shù)。此外,當(dāng)C/ S 系統(tǒng)使用了工作負(fù)載均衡或者分布式體系結(jié)構(gòu),負(fù)載測試就應(yīng)評估負(fù)載均衡或者分布式方法和設(shè)計(jì)是否一致[2]。
負(fù)載產(chǎn)生器模擬瀏覽器的行為,不斷地向Web 應(yīng)用發(fā)送請求,然后在Web 應(yīng)用發(fā)送一個應(yīng)答之后,等待一段時間,接著發(fā)送新的請求。負(fù)載產(chǎn)生器可以模擬成千上萬個并發(fā)用戶來測試Web 應(yīng)用的穩(wěn)定性。在負(fù)載測試中,每一個模擬瀏覽器稱為虛擬用戶,一個虛擬用戶就是腳本的一個實(shí)例。
對Web 應(yīng)用進(jìn)行準(zhǔn)確的負(fù)載測試時,首先要準(zhǔn)確、客觀地了解Web 應(yīng)用的負(fù)載情況。Web 應(yīng)用的負(fù)載情況是設(shè)計(jì)負(fù)載測試的前提和基礎(chǔ)。了解用戶的各種行為和動作是負(fù)載測試設(shè)計(jì)的關(guān)鍵,一個設(shè)計(jì)良好的負(fù)載測試要盡可能準(zhǔn)確地模擬用戶的動作。Web 應(yīng)用的日志文件和日志文件分析器是完成這個任務(wù)最重要的資源。
通過使用日志分析器對Web 應(yīng)用日志文件的分析,鑒別和跟蹤與Web 應(yīng)用通信量( traffic) 有關(guān)的用戶會話(user session) 變量集,其中主要包括的變量有:會話長度(以頁面數(shù)度量) 、會話持續(xù)時間(以分鐘和秒度量) 、會話期間訪問的頁面類型等等。頁面請求分布是用戶會話變量中需要特別關(guān)注的變量[4] 。這個變量顯示了每個頁面訪問的頻率,是設(shè)計(jì)測試場景的重要依據(jù)。除了這些主要變量外,那些會引起負(fù)載很小變化的其他變量也需要跟蹤。在確定了需要跟蹤的用戶會話變量之后,用日志分析器得到這些變量值的范圍和分布。
估計(jì)Web 應(yīng)用的負(fù)載水平,主要是Web 應(yīng)用的通信量如何增長、Web 應(yīng)用的最高負(fù)載、Web 應(yīng)用負(fù)載多長時間可以上升到最高負(fù)載、最高負(fù)載持續(xù)時間[4] 。一般情況下,最高負(fù)載的水平和通信量的水平大致成正比。如果一個Web 應(yīng)用每個星期的用戶會話數(shù)為10 萬個,在高峰期每小時的用戶會話數(shù)為1500 個,那么可以預(yù)計(jì)如果每個星期的用戶會話數(shù)為20 萬個時,高峰期每小時的用戶會話數(shù)也將翻倍,即為3000個。
3 負(fù)載測試的設(shè)計(jì)
準(zhǔn)確掌握了Web 應(yīng)用的負(fù)載情況之后,就根據(jù)獲得的各項(xiàng)信息進(jìn)行負(fù)載測試設(shè)計(jì),準(zhǔn)確模擬用戶的動作,其中主要包括用戶導(dǎo)航建模和用戶延遲建模。
3.1 用戶導(dǎo)航建模
用戶導(dǎo)航建模是對用戶在Web 應(yīng)用上的動作進(jìn)行建模。現(xiàn)實(shí)中,用戶在一個Web 應(yīng)用的行為可能包括一系列的動作。例如,一個在線書店的用戶登陸Web 應(yīng)用之后,先瀏覽網(wǎng)頁查看有關(guān)信息,然后再搜索要購買的書,最后購買需要的書。從客戶端的角度看,是一個用戶執(zhí)行了所有這些動作。但是,在負(fù)載測試中,不可能和現(xiàn)實(shí)完全一致地模擬所有用戶的動作。負(fù)載測試的目的在于當(dāng)用戶給服務(wù)器施加不同水平的負(fù)載時,根據(jù)考察服務(wù)器端的各項(xiàng)度量指標(biāo)找出系統(tǒng)的瓶頸,提高整個系統(tǒng)的性能。所以,負(fù)載測試時虛擬測試者只要模擬與實(shí)際負(fù)載相同的負(fù)載水平,而不用將虛擬測試者和實(shí)際用戶一一對應(yīng),模擬每一個用戶的具體動作。設(shè)計(jì)負(fù)載測試時可以把用戶的一系列行為劃分為若干子行為,然后虛擬測試者以適當(dāng)?shù)姆绞綀?zhí)行每一個子行為[5,6] 。例如,在上面的例子中,將用戶行為可以劃分為3個子行為——瀏覽信息、搜索圖書、購買圖書,然后用3 個不同的虛擬測試者以適當(dāng)?shù)拇涡驁?zhí)行3個子行為。從服務(wù)器端看來,這3個虛擬測試者給服務(wù)器施加的負(fù)載和實(shí)際使用中一個真實(shí)用戶給服務(wù)器施加的負(fù)載是相同的。
在了解了用戶的行為模式后,還需要知道不同用戶所占的數(shù)量或者百分比。因?yàn)橛脩舻拿恳活悇幼鹘o系統(tǒng)施加的負(fù)載都是不盡相同的,因此為了準(zhǔn)確地模擬實(shí)際用戶的動作,必須確定各種用戶的數(shù)量或者百分比。各種以不同的百分比組合到一起的動作,應(yīng)該滿足預(yù)期的頁面請求分布。例如,服務(wù)器施加很小的負(fù)載。而另一方面,購買圖書時要和數(shù)據(jù)庫通信,甚至要和其他子系統(tǒng)通信,這個動作對服務(wù)器施加的負(fù)載要比瀏覽信息大得多。因此,要根據(jù)掌握的Web應(yīng)用負(fù)載情況,明確不同用戶的數(shù)量或者百分比,這樣才能準(zhǔn)確地模擬實(shí)際用戶對服務(wù)器施加的負(fù)載。
3.2 用戶延遲建模
在進(jìn)行負(fù)載測試的設(shè)計(jì)時,用戶的延遲的建模也是重要的一個方面。由于不同的用戶對Web應(yīng)用的熟悉程度不同、閱讀速度和輸入速度不同,所以不同的用戶在完成相同的行為時延遲的時間也就不同,為了更加真實(shí)地模擬用戶的行為,必須對用戶延遲進(jìn)行準(zhǔn)確地建模[7]。在根據(jù)用戶導(dǎo)航建模錄制的腳本中,要考慮用戶延遲建模,對腳本進(jìn)行修改。首先,可以根據(jù)用戶的延遲不同將用戶分為比重不同的若干組。例如,在一個用戶登陸頁面中,可以根據(jù)用戶對Web 應(yīng)用的熟悉程度不同將用戶分為新用戶、返回用戶和有經(jīng)驗(yàn)的用戶,它們所占比重分別是35%、55%和10%。以用戶延遲的不同對用戶進(jìn)行分類,根據(jù)劃分的細(xì)致程度,模擬的用戶延遲的準(zhǔn)確度就不同,劃分類別越多越細(xì),模擬的用戶延遲就越準(zhǔn)確。相反,如果劃分的類別很少,模擬的用戶延遲準(zhǔn)確性就比較差。為了盡可能地和真實(shí)用戶的延遲相同,使用數(shù)學(xué)模型可以更好地實(shí)現(xiàn)。所以,在設(shè)計(jì)性能測試時為了很準(zhǔn)確地模擬用戶延遲,需要認(rèn)真地分析真實(shí)用戶的延遲情況,找到一種能夠和其很好吻合的數(shù)學(xué)模型,例如,常用的有均勻分布、正態(tài)分布和負(fù)指數(shù)分布。均勻分布模型就是從最大值和最小值之間隨機(jī)地選擇數(shù)據(jù),正態(tài)分布是從最大值和最小值之間以不同的概率選取數(shù)據(jù),越靠近中間的數(shù)字選取的概率越大。
4 基于LoadRunner的負(fù)載/壓力測試實(shí)例
4.1 并發(fā)性能測試
基于客戶端應(yīng)用的性能,測試的入口是單機(jī)客戶端。
并發(fā)性能測試的過程,即是一個負(fù)載測試和壓力測試的過程。它的基本原理是逐漸增加并發(fā)虛擬用戶數(shù),直到系統(tǒng)的瓶頸,通過綜合分析監(jiān)控指標(biāo)數(shù)據(jù)來確定系統(tǒng)性能。負(fù)載壓力測試有助于確認(rèn)被測系統(tǒng)是否能夠支持性能需求,以及預(yù)期的負(fù)載增長,并找出系統(tǒng)出現(xiàn)異常的原因,從而對系統(tǒng)性能進(jìn)行調(diào)優(yōu)。
并發(fā)用戶測試主要是對系統(tǒng)的核心功能和重要業(yè)務(wù)進(jìn)行測試,要以真實(shí)的業(yè)務(wù)數(shù)據(jù)作為輸入,選擇有代表性和關(guān)鍵的業(yè)務(wù)操作來設(shè)計(jì)測試用例。
其目的是:在真實(shí)或者仿真環(huán)境下檢測系統(tǒng)性能,評估系統(tǒng)性能以及服務(wù)等級的滿足情況;預(yù)見系統(tǒng)負(fù)載壓力承受力,在應(yīng)用實(shí)際部署之前,評估系統(tǒng)性能;幫助分析系統(tǒng)瓶頸、優(yōu)化系統(tǒng)自動化負(fù)載壓力測試實(shí)現(xiàn)機(jī)制。在多種服務(wù)器配置環(huán)境下測試,則配置成本,測試時間和人力資源必然會更多的消耗。但在很多情況下可以通過一種硬件配置下的壓力測試結(jié)果來預(yù)測不同配置下的Web應(yīng)用程序的性能。
4.2 進(jìn)入負(fù)載測試
由于條件的限制,本次實(shí)驗(yàn)Web服務(wù)器和web客戶端同機(jī)。這就與網(wǎng)絡(luò)無關(guān),即減少了網(wǎng)絡(luò)系統(tǒng)這個環(huán)境因素,直接與服務(wù)器連通。下面是錄制基本的用戶腳本。
(1)啟動VuGen(Visual User Generator虛擬用戶生成器),其方法:“開始”→“程序”→“Loadrunner”→“Visual User Generator”。通過菜單“new”新建一個用戶腳本,選擇通信協(xié)議。這里用的是Web應(yīng)用,所以選擇web(HTTP/HTML)協(xié)議。如下圖1。
(2)進(jìn)入VuGen主窗口
(3)點(diǎn)擊Start Record按鈕,進(jìn)入開始錄制窗口設(shè)置,如下圖3。
(4)在開始錄制錄制窗口中,URL設(shè)為http://127.0.0.1/xitong/default。Action序號可自定義,也可以用默認(rèn)值如:Action4。點(diǎn)擊”O(jiān)K”按鈕后,在web瀏覽器里打開網(wǎng)站首頁。
(5)在瀏覽登錄網(wǎng)頁的同時,VuGen自動生成腳本.用戶一般性登錄并瀏覽網(wǎng)頁中的信息。相應(yīng)地腳本是在這樣的情況下自動錄制的,因此腳本也是一般性的登錄瀏覽。如下:
(6)優(yōu)化腳本如事務(wù)。LoadRunner有兩種和事務(wù)相關(guān)的概念: Action和Transaction。Action是用戶的一系列操作的組合;Transaction是用戶某一具體的動作,為了衡量服務(wù)器的性能而需要定義的。例如:在腳本中有一個數(shù)據(jù)查詢操作,為了衡量服務(wù)器執(zhí)行查詢操作的性能,就把這個操作定義為一個事務(wù),這樣在運(yùn)行測試腳本時,LoadRunner 運(yùn)行到該事務(wù)的開始點(diǎn)時,LoadRunner 就會開始計(jì)時,直到運(yùn)行到該事務(wù)的結(jié)束點(diǎn),計(jì)時結(jié)束。這個事務(wù)的運(yùn)行時間在結(jié)果中會有反映。Action通常會包含一系列功能相關(guān)的Transaction。事務(wù)有三種執(zhí)行結(jié)果:pass(通過)可執(zhí)行全部虛擬用戶腳本;fail(失敗)執(zhí)行過程中發(fā)生了錯誤;stop(停止)因到測試結(jié)束時間等而停止執(zhí)行腳本。
本文事務(wù)定義為登錄某個子網(wǎng)頁,考查登錄子網(wǎng)頁的系統(tǒng)響應(yīng)情況。
錄制用戶進(jìn)行系統(tǒng)登錄訪問的腳本.在controller中選擇腳本,設(shè)置虛擬用戶數(shù)量并運(yùn)行,運(yùn)行時,將以設(shè)置的虛擬用戶數(shù)(每次增加用戶)為并發(fā)數(shù),并發(fā)進(jìn)行網(wǎng)站訪問操作,初步預(yù)計(jì)最大的并發(fā)量為20個用戶。
測試過程中記錄的部分?jǐn)?shù)據(jù),事務(wù)登錄某個子網(wǎng)。列表綜合分析:
從圖6所得數(shù)據(jù),容易看出:
平均響應(yīng)時間較快、平穩(wěn);訪問最大并發(fā)量為16;當(dāng)增加至50時,系統(tǒng)登錄失敗。
5 結(jié)論
(1)被測小系統(tǒng)性能比較差。測試運(yùn)行的環(huán)境未顯異常,測出的實(shí)際最大并發(fā)數(shù)量少于預(yù)期數(shù)量。因此,可初步確定被測系統(tǒng)是性能問題的關(guān)鍵。對于一個小系統(tǒng),它的反應(yīng)時間較快可能夠承受的最大并發(fā)用戶數(shù)比較小,并且還不能很好地持續(xù)工作。系統(tǒng)開發(fā)者應(yīng)該進(jìn)一步提高性能如:優(yōu)化代碼、核心功能模塊等,以支持更大并發(fā)用戶數(shù)。因?yàn)橄到y(tǒng)核心功能很大程序影響其性能。
(2)性能測試也能發(fā)現(xiàn)功能問題。系統(tǒng)有些功能和按鍵并不很完善,這也會影響性能的提升。性能測試和功能測試是緊密聯(lián)系在一起的,原因之一是很多性能問題是由軟件自身功能缺陷引起的。如果應(yīng)用系統(tǒng)功能不完善或者代碼運(yùn)行效率低下,通常會帶來一些性能問題。功能測試通常要先于性能測試或者同步進(jìn)行,軟件功能完善可以保證性能測試進(jìn)行得更加順利。
(3)盡最大努力無限接近正確值。做任何實(shí)驗(yàn)所得結(jié)果都不能保證其百分之百的準(zhǔn)確,同樣本論文的實(shí)驗(yàn)也是如此。因?yàn)樵诓煌臅r間用戶的動作事務(wù)是極不相同的,運(yùn)用不同的腳本或者場景,測試所得的結(jié)果往往是不一樣的。更何況,實(shí)驗(yàn)結(jié)果與測試工具、方法和環(huán)境(操作系統(tǒng),服務(wù)器,內(nèi)在及CPU等)也有關(guān),而工具和測試環(huán)境本身就無法完美無缺。為取得無限接近正確值,本文多次反復(fù)實(shí)驗(yàn)測試,摘錄一些平均穩(wěn)定結(jié)果數(shù)據(jù),再進(jìn)行列表比較,最后得出結(jié)論。
任何一種工具,相對而言也就很容易上手其它工具。
目前,國外對性能測試的研究己經(jīng)取得了許多成果,提出了一些模型、方法和策略,并相應(yīng)開發(fā)了測試工具。國內(nèi)在Web性能測試方面的研究和開發(fā)才剛剛起步,沒有比較完善的測試模型和良好的測試工具。這對我們來說是個極大的挑戰(zhàn),同時也是機(jī)遇。
參考文獻(xiàn):
[1] 李華飚,譯.[美]Anne Carask Henm.防火墻核心技術(shù)解析[M].中國水利水電出版社,2005.37-424.
[2] 黃允聰.網(wǎng)絡(luò)安全基礎(chǔ)[M].清華大學(xué)出版社,1999.113-162.
[3] 馮大輝,譯.[美]Stave Kalman.web安全實(shí)踐[M].人民郵電出版社,2000.25-43.
[4] 唐正軍.網(wǎng)絡(luò)入侵檢測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[M].電子工業(yè)出版社.2003.130-145.
[5] 顧春華.張雪寢芹.付歌.Web程序設(shè)計(jì)[M].華東理工大學(xué)出版社,2006.138-141
[6] 勵志,等,譯.[美]H.M.Deitel,BduWaidt.Web服務(wù)實(shí)用技術(shù)教程[M].機(jī)械工業(yè)出版社,2004,261-262
[7] 柴雪路.Web服務(wù)架構(gòu)與開放互操作技術(shù)[M].清華大學(xué)出版社,2002,38-39.
[8] 汪曉軍,鐘軍.網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn)[M].人民郵電出版社,2003,14-150.
[9] 劉東華.網(wǎng)絡(luò)通訊安全技術(shù)[M].人民郵電出版社,2002,188-197.
[10] 吳旭超,等,譯.Ben Galbraith.Whitney,Hankison.Web端安全性高級編程[M].清華大學(xué)出版社,2003,17-45.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文