楊艷杰
(德州職業(yè)技術(shù)學(xué)院,德州 253034)
研究Web應(yīng)用程序訪問過程是Web應(yīng)用程序性能測(cè)試模型的基礎(chǔ)。Web應(yīng)用程序訪問過程模型闡述了訪問Web應(yīng)用程序的過程,構(gòu)造一個(gè)web訪問請(qǐng)求的響應(yīng)時(shí)間的函數(shù),有助于分析是哪個(gè)步驟耗時(shí)過長(zhǎng),是系統(tǒng)的性能瓶頸。
一個(gè)典型的Web事務(wù)(請(qǐng)求與響應(yīng))過程的每個(gè)步驟都需要耗費(fèi)一定時(shí)間。Web應(yīng)用程序訪問過程模型及各步驟耗費(fèi)的時(shí)間如圖1所示。圖中,N1、N2、N3和N4均為網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,S1、S2和S3為服務(wù)器計(jì)算時(shí)間,C1為客戶端執(zhí)行腳本的時(shí)間。
從用戶角度來看,只有在客戶端執(zhí)行完所有預(yù)加載的腳本后,才能完全地使用web的功能,因而客戶端執(zhí)行腳本的時(shí)間也應(yīng)重點(diǎn)考慮。
圖1 Web應(yīng)用程序訪問過程模型
統(tǒng)計(jì)在客戶端消耗的時(shí)間,包括從電擊超鏈接到看到網(wǎng)頁(yè)內(nèi)容,主要包括:第一,在客戶端建立TCP連接所需要的三次握手過程的時(shí)間;第二,顯示內(nèi)容和圖片,以及解析HTML文件所消耗的時(shí)間;第三,執(zhí)行客戶端腳本所需要時(shí)間。為讓用戶更快地看到網(wǎng)頁(yè)內(nèi)容,則需在性能優(yōu)化過程中,減少上述三點(diǎn)消耗的時(shí)間,其中應(yīng)重點(diǎn)投入的是第2和第3點(diǎn)。
1.2.2 網(wǎng)絡(luò)因素
傳輸線路和轉(zhuǎn)發(fā)設(shè)備是網(wǎng)頁(yè)在網(wǎng)絡(luò)上所產(chǎn)生的延遲的主要兩方面原因。應(yīng)用層協(xié)議HTTP在Web系統(tǒng)上使用。在TCP協(xié)議數(shù)據(jù)單元中封裝有HTTP協(xié)議數(shù)據(jù)單元,同時(shí),IP分組中封裝有TCP協(xié)議數(shù)據(jù)單元,然后相關(guān)的IP分組為數(shù)據(jù)幀以便在網(wǎng)絡(luò)上傳輸。其中,網(wǎng)絡(luò)的帶寬和延遲和轉(zhuǎn)發(fā)設(shè)備的轉(zhuǎn)發(fā)能力事直接影響網(wǎng)頁(yè)傳輸時(shí)間的兩大因素。
1.2.3 服務(wù)器因素
對(duì)于作為Web系統(tǒng)的核心的服務(wù)器來說,其性能狀況對(duì)Web應(yīng)用系統(tǒng)性能影響明顯。服務(wù)器通常包括Web服務(wù)器、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器,它們通常處于一個(gè)局域網(wǎng)內(nèi)。服務(wù)器由一系列軟件和硬件所組成。影響Web應(yīng)用程序性能的軟件因素主要指數(shù)據(jù)庫(kù)系統(tǒng)和Web程序自身。
1)數(shù)據(jù)庫(kù)系統(tǒng):在動(dòng)態(tài)網(wǎng)頁(yè)中增加、刪除、修改、查詢數(shù)據(jù)庫(kù)記錄時(shí),響應(yīng)時(shí)間包括耗費(fèi)相關(guān)的時(shí)間。其中,對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的操作和建立和釋放數(shù)據(jù)庫(kù)連接,這兩項(xiàng)都是數(shù)據(jù)庫(kù)系統(tǒng)對(duì)于Web系統(tǒng)的性能影響問題。
2)Web程序自身:Web程序自身對(duì)Web系統(tǒng)的性能的影響主要表現(xiàn)在:業(yè)務(wù)邏輯的算法不夠優(yōu)化;對(duì)硬件組件資源、數(shù)據(jù)庫(kù)系統(tǒng)使用的不正確;使用冗余代碼,導(dǎo)致不必要的時(shí)間消耗。因此,在服務(wù)器端,影響Web應(yīng)用系統(tǒng)的性能問題的因素,在軟件和硬件兩個(gè)層面均有諸多可能,這給性能問題定位和性能調(diào)優(yōu)工作帶來了許多困難。
Web應(yīng)用程序的性能由一系列性能度量的標(biāo)準(zhǔn)來衡量。Web應(yīng)用程序的性能與相關(guān)服務(wù)器的軟硬件平臺(tái)、網(wǎng)絡(luò)帶寬和負(fù)載情況有關(guān)。各性能指標(biāo)也主要是反映服務(wù)器、網(wǎng)絡(luò)和負(fù)載的情況。本文主要研究響應(yīng)時(shí)間、吞吐率)、資源利用率這三種指標(biāo)。
響應(yīng)時(shí)間也稱為等待時(shí)間,從用戶觀點(diǎn)來看,它通常隨著用戶負(fù)載的增加而緩慢增加,但一旦越過某個(gè)負(fù)載臨界點(diǎn),等待時(shí)問就會(huì)快速地增加。在這個(gè)臨界點(diǎn),通常有至少一種系統(tǒng)資源以耗盡。用戶負(fù)載如持續(xù)在臨界點(diǎn)之上,可能會(huì)造成Web應(yīng)用程序的崩潰。
針對(duì)Web應(yīng)用系統(tǒng)的性能優(yōu)化最終目的都是優(yōu)化用戶體驗(yàn)。而響應(yīng)時(shí)間是影響用戶體驗(yàn)的一個(gè)重要的因素。通過以上分析,改善響應(yīng)時(shí)間可以從縮短網(wǎng)絡(luò)傳輸時(shí)間、服務(wù)器計(jì)算時(shí)間和客戶端腳本執(zhí)行時(shí)間做起。
所謂吞吐率,其常用的單位為請(qǐng)求數(shù)/秒或頁(yè)面數(shù)/秒,就是單位內(nèi)系統(tǒng)所處理的用戶請(qǐng)求在一定時(shí)間內(nèi)的數(shù)目,也可以視為,每天的訪問者數(shù)或每天頁(yè)面的瀏覽次數(shù)來衡量吞吐率。
一般而言,在未達(dá)到某個(gè)負(fù)載臨界點(diǎn)時(shí),吞吐率與用戶負(fù)載成正相關(guān)關(guān)系,而在越過這個(gè)臨界點(diǎn)后,則吞吐率將保持不變甚至下降。這里分兩種情況:當(dāng)臨界點(diǎn)是由于網(wǎng)絡(luò)設(shè)備的流量引起的時(shí)候,吞吐率會(huì)保持不變,這時(shí)需要改善網(wǎng)絡(luò)情況,吞吐率可能會(huì)繼續(xù)和用戶負(fù)載保持正相關(guān)關(guān)系;當(dāng)臨界點(diǎn)是由服務(wù)器承載壓力過大引起的時(shí)候,吞吐率會(huì)下降,此時(shí),Web應(yīng)用系統(tǒng)拒絕服務(wù)甚至崩潰,這時(shí)需要改進(jìn)服務(wù)器的軟硬件配置來優(yōu)化性能。
系統(tǒng)不同資源的使用程度,包括內(nèi)存、服務(wù)器的CPU和網(wǎng)絡(luò)帶寬等等方面,一般利用占資源的最大可用量的百分比來衡量。資源的最大可用度達(dá)到之前,利用率通常與用戶負(fù)載成正比例。資源已經(jīng)成為系統(tǒng)的瓶頸的指標(biāo)則是資源的恒定值保持在100%。所以,增加系統(tǒng)的吞吐率并縮短等待時(shí)間可以通過提升這種資源的容量進(jìn)行。
場(chǎng)景是用來模擬真實(shí)世界的用戶是如何產(chǎn)生訪問壓力的。一組測(cè)試場(chǎng)景需要對(duì)虛擬用戶腳本、負(fù)載產(chǎn)生器和虛擬用戶行為進(jìn)行配置。LoadRunner可以提供的場(chǎng)景包括兩大類:手動(dòng)的測(cè)試場(chǎng)景和面向目標(biāo)的測(cè)試場(chǎng)景。其中手動(dòng)的測(cè)試場(chǎng)景按是否有業(yè)務(wù)上的組合可分為單一業(yè)務(wù)場(chǎng)景和組合業(yè)務(wù)場(chǎng)景。
單一業(yè)務(wù)實(shí)際是指一些核心業(yè)務(wù)模塊對(duì)應(yīng)的業(yè)務(wù)。這些模塊通常具有功能比較復(fù)雜,使用比較頻繁,屬于核心業(yè)務(wù)等特點(diǎn)。單一業(yè)務(wù)場(chǎng)景測(cè)試的重點(diǎn)是一些系統(tǒng)重要模塊獨(dú)立運(yùn)行的情況。主要測(cè)試這類模塊和性能相關(guān)的一些算法,還要測(cè)試這類模塊對(duì)并發(fā)用戶的響應(yīng)情況。只有在決定整個(gè)Web應(yīng)用程序性能的這些核心業(yè)務(wù)模塊在性能上沒有問題,之后的其他性能測(cè)試才顯得有意義。
單一業(yè)務(wù)場(chǎng)景是整個(gè)Web應(yīng)用程序性能測(cè)試的基礎(chǔ),是不可或缺的,應(yīng)該在測(cè)試的早期進(jìn)行。
單一業(yè)務(wù)場(chǎng)景測(cè)試的效果主要有:1)發(fā)現(xiàn)一些核心業(yè)務(wù)算法的問題:如一些處理同步、與數(shù)據(jù)庫(kù)等組件交互的算法,其性能為題在單用戶模式下是很難發(fā)現(xiàn)的,需要通過測(cè)試工具模擬多個(gè)用戶的并發(fā)操作,必要的時(shí)候需維持壓力較長(zhǎng)的一段時(shí)間,才可以更容易地驗(yàn)證算法的正確性和性能。2)盡早發(fā)現(xiàn)性能問題已降低成本:軟件的缺陷越早被發(fā)現(xiàn)則修復(fù)的成本越低,性能缺陷也是如此。有時(shí)候,核心業(yè)務(wù)的性能問題可能使項(xiàng)目的架構(gòu)要推倒重來。因此,盡管性能測(cè)試需要較高的成本,但對(duì)于Web應(yīng)用程序的核心功能仍需盡早進(jìn)行性能測(cè)試。
對(duì)同一模塊的單一業(yè)務(wù)場(chǎng)景可以有以下兩方面內(nèi)容:1)完全一樣功能的并發(fā):該測(cè)試是檢查程序?qū)ν粫r(shí)刻并發(fā)操作的處理。例如,模擬多個(gè)用戶,同時(shí)寫入數(shù)據(jù)庫(kù),看Web應(yīng)用程序能否做出正確相應(yīng)。2)同一模塊里不同子功能的并發(fā):在同一業(yè)務(wù)模塊中,多數(shù)功能通常是耦合的,因此,它們可能互相干擾。實(shí)際上,這種并發(fā)是較常見的單一業(yè)務(wù)場(chǎng)景。
組合業(yè)務(wù)場(chǎng)景的性能測(cè)試與Web應(yīng)用程序?qū)嶋H運(yùn)行情況最為接近。它需建立在單一業(yè)務(wù)場(chǎng)景測(cè)試均較正常的基礎(chǔ)上,把Web應(yīng)用程序的各個(gè)業(yè)務(wù)模塊按訪問比例進(jìn)行測(cè)試。
組合業(yè)務(wù)場(chǎng)景設(shè)計(jì)需要做的工作有:1)確定各個(gè)業(yè)務(wù)模塊的訪問比例;2)根據(jù)訪問比例分配虛擬用戶的比例,盡可能地模擬真實(shí)用戶常見的場(chǎng)景。
通常,組合業(yè)務(wù)場(chǎng)景測(cè)試的效果有:1)發(fā)現(xiàn)業(yè)務(wù)模塊的交互問題:通常,經(jīng)過單一業(yè)務(wù)場(chǎng)景測(cè)試后,各模塊的獨(dú)立運(yùn)行基本都是正常的。但由于各業(yè)務(wù)模塊間或多或少的耦合關(guān)系,可能會(huì)在同時(shí)進(jìn)行測(cè)試時(shí),發(fā)現(xiàn)新的問題。2)盡早發(fā)現(xiàn)綜合性能問題:綜合性能問題主要指Web應(yīng)用程序整體的性能問題,綜合性能問題多在組合業(yè)務(wù)場(chǎng)景測(cè)試中被發(fā)現(xiàn)。3)模擬真實(shí)用戶負(fù)載的組合業(yè)務(wù)場(chǎng)景測(cè)試是考察服務(wù)器運(yùn)行狀況的常用方法:通常依據(jù)該測(cè)試的結(jié)果,對(duì)服務(wù)器硬件情況進(jìn)行評(píng)價(jià),評(píng)估是否需要升級(jí)硬件或使用集群。
組合業(yè)務(wù)場(chǎng)景可以包含以下兩方面的內(nèi)容:1)對(duì)有耦合的業(yè)務(wù)模塊進(jìn)行組合業(yè)務(wù)場(chǎng)景測(cè)試:主要測(cè)試在多用戶并發(fā)條件下,一些存在耦合的業(yè)務(wù)模塊是否正常運(yùn)行。2)模擬真實(shí)用戶場(chǎng)景:模擬一些典型場(chǎng)景進(jìn)行測(cè)試,需先確定各個(gè)業(yè)務(wù)模塊的訪問比例。
面向目標(biāo)場(chǎng)景的性能測(cè)試,是指一些目標(biāo)明確的,一般在需求分析階段就可以確定期望Web應(yīng)用程序能夠達(dá)到的性能指標(biāo)。針對(duì)這些指標(biāo)都要設(shè)置測(cè)試場(chǎng)景來驗(yàn)證Web應(yīng)用程序是否達(dá)到要求。面向目標(biāo)的場(chǎng)景設(shè)計(jì)的關(guān)鍵是明確需求,主要參考需求文檔,把屬于性能方面的需求提取出來。面向目標(biāo)的場(chǎng)景中的性能指標(biāo)通常有響應(yīng)時(shí)間、最大同時(shí)在線人數(shù)等,如“Web應(yīng)用程序可以支持50個(gè)并發(fā)用戶"、“系統(tǒng)響應(yīng)時(shí)間不得高于5秒”等。
總結(jié)和完善Web應(yīng)用程序性能測(cè)試模型,包括Web應(yīng)用程序訪問過程模型、Web應(yīng)用程序性能指標(biāo)和Web應(yīng)用程序性能測(cè)試場(chǎng)景設(shè)計(jì)模型。
其中, Web應(yīng)用程序訪問過程模型描述了哪請(qǐng)求生命周期,研究了訪問過程中各步驟對(duì)響應(yīng)時(shí)間的影響,創(chuàng)新地提出了普遍受忽視的客戶端腳本執(zhí)行時(shí)間對(duì)性能的影響。Web應(yīng)用程序性能指標(biāo)主要研究了響應(yīng)時(shí)間、吞吐率和資源利用率,探討了用戶負(fù)載與它們的關(guān)系,并淺析了三個(gè)指標(biāo)之間的關(guān)系。性能測(cè)試場(chǎng)景設(shè)計(jì)模型包括單一業(yè)務(wù)場(chǎng)景設(shè)計(jì)、組合業(yè)務(wù)場(chǎng)景設(shè)計(jì)和面向目標(biāo)的場(chǎng)景設(shè)計(jì)。
[1] 顧靜嫻, 許蕾, 徐寶文. 基于組件Web應(yīng)用程序的覆蓋率準(zhǔn)則和測(cè)試需求約簡(jiǎn)[J]. 東南大學(xué)學(xué)報(bào)(英文版), 2010,26(1).
[2] 劉龍霞, 吳軍華. 基于UML活動(dòng)圖的Web應(yīng)用測(cè)試用例生成[J]. 江南大學(xué)學(xué)報(bào)(自然科學(xué)版), 2011, 10(3).
[3] 徐海衛(wèi), 曾瀟. 機(jī)電一體化協(xié)同設(shè)計(jì)平臺(tái)研究[J]. 制造業(yè)自動(dòng)化, 2010, 32(11).