Web系統(tǒng)性能測(cè)試的研究
Web系統(tǒng)是以Internet為基礎(chǔ),是提供萬維網(wǎng)服務(wù)的各種組件的集合,包括瀏覽器、服務(wù)器、應(yīng)用程序和各種相關(guān)協(xié)議與標(biāo)準(zhǔn),其三層基本架構(gòu)為:客戶端、應(yīng)用處理層和數(shù)據(jù)處理層。Web系統(tǒng)的一個(gè)主要特點(diǎn)是用戶量十分龐大,需要有處理事務(wù)并發(fā)的能力。
目前,Web系統(tǒng)的性能測(cè)試類型主要有壓力測(cè)試、負(fù)載測(cè)試和容量測(cè)試等。
壓力測(cè)試,即模擬實(shí)際應(yīng)用的軟硬件環(huán)境,對(duì)系統(tǒng)不斷施加壓力來確定系統(tǒng)能提供的最大服務(wù)級(jí)別的測(cè)試,其主要目的是測(cè)試硬件系統(tǒng)能否達(dá)到項(xiàng)目需求文檔中的指標(biāo)。
負(fù)載測(cè)試,即通過驗(yàn)證軟件系統(tǒng)的性能來發(fā)現(xiàn)系統(tǒng)的負(fù)載能力,如:一定時(shí)間內(nèi)最大支持的并發(fā)用戶數(shù)、軟件請(qǐng)求出錯(cuò)率等。
容量測(cè)試,即通過測(cè)試反映出系統(tǒng)中某個(gè)指標(biāo)的極限值,如:數(shù)據(jù)庫記錄數(shù)。若Web系統(tǒng)的實(shí)際容量不能滿足實(shí)際需求,那么應(yīng)當(dāng)尋找新的解決方案。
單元測(cè)試,即模塊測(cè)試,完成對(duì)模塊的驗(yàn)證工作。其目標(biāo)在于分別完成每個(gè)單元的測(cè)試任務(wù),以確保每個(gè)模塊能正常運(yùn)行。單元測(cè)試主要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例,多采用白盒測(cè)試技術(shù),多個(gè)模塊可以平行地進(jìn)行單元測(cè)試。
集成測(cè)試是通過測(cè)試發(fā)現(xiàn)和接口有關(guān)的問題來構(gòu)造程序結(jié)構(gòu)的系統(tǒng)化技術(shù),它的目的在于查找模塊間接口的錯(cuò)誤。通常把模塊組裝成系統(tǒng)的方式有兩種:一次性組裝方式和增殖式組裝方式。前者的特點(diǎn)在于可以并行調(diào)試所有模塊,后者的優(yōu)點(diǎn)在于把可能出現(xiàn)的差錯(cuò)分散暴露出來,便于找出問題和修改。
軟件確認(rèn)通過一系列證明軟件和需求一致的黑盒測(cè)試來完成,即檢驗(yàn)開發(fā)的軟件能否按顧客提出的要求來運(yùn)行。其中,確認(rèn)測(cè)試中一個(gè)重要元素就是配置復(fù)審,目的是為了保證軟件配置的所有成分都齊全,軟件配置復(fù)查的主要內(nèi)容是文件資料的完整性和正確性。
Web網(wǎng)站在遇到訪問高峰時(shí),容易發(fā)生服務(wù)器響應(yīng)速度變慢等情況,因此需要一種能模擬大量用戶的訪問Web系統(tǒng)的性能測(cè)試工具來進(jìn)行壓力測(cè)試。目前,市場(chǎng)上較為流行的性能測(cè)試工具有LoadRunner,該款軟件能模擬成千上萬的用戶進(jìn)行負(fù)載測(cè)試,最大限度地縮短測(cè)試時(shí)間、優(yōu)化系統(tǒng)的性能。然而LoadRunner價(jià)格昂貴,支持底層協(xié)議差,錯(cuò)誤提示方面不夠細(xì)致。筆者在這里推薦另一種性能測(cè)試工具——Apache Jmeter,它是一個(gè)100%純Java的桌面應(yīng)用。Jmeter是Apache公司組織開發(fā)的開源代碼項(xiàng)目,主要用于對(duì)軟件做壓力測(cè)試,既能測(cè)試靜態(tài)資源又能測(cè)試動(dòng)態(tài)資源,如:Java程序、Perl腳本、數(shù)據(jù)庫和查詢、FTP服務(wù)器等。由于Jmeter的完全可移植性以及多線程框架,Jmeter在性能測(cè)試領(lǐng)域已越來越受歡迎。
一個(gè)完整的Web系統(tǒng)的性能測(cè)試過程應(yīng)包括以下幾個(gè)步驟:明確性能測(cè)試需求、設(shè)計(jì)性能測(cè)試用例、執(zhí)行性能測(cè)試和性能測(cè)試評(píng)估。進(jìn)行性能測(cè)試前必須要了解系統(tǒng)的構(gòu)成和測(cè)試需求。認(rèn)真分析系統(tǒng)的需求說明書,掌握主要業(yè)務(wù)的需求,如Web測(cè)試中必須明確有多少用戶訪問網(wǎng)站等。根據(jù)詳細(xì)的需求說明可以設(shè)計(jì)出相應(yīng)的測(cè)試用例。常見測(cè)試用例的編寫方法有:等價(jià)類劃分法、邊界值法、場(chǎng)景法、因果圖和判定表法等。測(cè)試用例設(shè)計(jì)的原則為單個(gè)用例覆蓋最小化,即一個(gè)測(cè)試用例盡可能地覆蓋多個(gè)測(cè)試要素。因?yàn)樾阅軠y(cè)試的特殊性,測(cè)試用例應(yīng)當(dāng)設(shè)計(jì)的盡可能復(fù)雜,以發(fā)現(xiàn)更多的性能瓶頸。在執(zhí)行性能測(cè)試時(shí)需要注意的是,單一環(huán)境下的性能測(cè)試得到的結(jié)果是不準(zhǔn)確的,測(cè)試過程應(yīng)在不同的測(cè)試環(huán)境中進(jìn)行。最后則是對(duì)測(cè)試結(jié)果進(jìn)行數(shù)據(jù)統(tǒng)計(jì)分析,收集相關(guān)信息,找到性能瓶頸。針對(duì)Web系統(tǒng),主要分析網(wǎng)絡(luò)帶寬以及流量對(duì)用戶操作的影響。Web的性能指標(biāo)包括吞吐率、每秒點(diǎn)擊次數(shù)、每秒HTTP響應(yīng)數(shù)、每秒下載頁面數(shù)、重復(fù)次數(shù)概要等。
打開Jmeter,首先在測(cè)試計(jì)劃中添加線程組,在線程組中添加邏輯控制器和錄制控制器,然后在工作臺(tái)中添加非測(cè)試元件——HTTP代理服務(wù)器。點(diǎn)擊HTTP代理服務(wù)器界面后設(shè)置端口號(hào),即代理服務(wù)器的監(jiān)聽端口,此處設(shè)為8080,同時(shí)將目標(biāo)控制器設(shè)為:測(cè)試計(jì)劃>線程組。此外,我們還需在HTTP代理服務(wù)器中添加高斯隨機(jī)定時(shí)器,定時(shí)器將會(huì)使相應(yīng)的取樣器被延遲。延遲的規(guī)則是:在上一個(gè)訪問請(qǐng)求被響應(yīng)并延時(shí)了指定的時(shí)間后,下一個(gè)被定時(shí)器影響的取樣訪問請(qǐng)求才能被發(fā)出去。代理服務(wù)器配置好后,打開瀏覽器,將局域網(wǎng)中的代理服務(wù)器設(shè)為localhost,端口號(hào)8080,然后在瀏覽器的地址欄中輸入地址進(jìn)行錄制。
為了方便實(shí)用Jmeter測(cè)試工具,筆者選擇了用Badboy錄制測(cè)試腳本,從而避免了在Jmeter中繁瑣的設(shè)置。Badboy是一個(gè)基于Web的自動(dòng)化測(cè)試工具,不僅文件小、安裝簡(jiǎn)單,而且不受安裝環(huán)境的限制,測(cè)試人員無需編寫復(fù)雜的代碼即可進(jìn)行測(cè)試。用Badboy錄制測(cè)試腳本的步驟非常簡(jiǎn)單,在官網(wǎng)上下載Badboy后并安裝,打開Badboy后新建腳本,默認(rèn)添加一個(gè)錄制步驟,在界面的地址欄中輸入要錄制的IP地址,本例中地址為:http://www.52testing.com/。點(diǎn)擊開始錄制按鈕,我們可以直接在Badboy內(nèi)嵌的瀏覽器中對(duì)被測(cè)的應(yīng)用進(jìn)行操作,所有的操作都會(huì)被記錄在Badboy左側(cè)的編輯窗口中。完成錄制后只需點(diǎn)擊工具欄中停止錄制的按鈕即可。完成腳本的錄制后,通過File中的Export to Jmeter功能我們可以將錄制好的腳本導(dǎo)出為Jmeter腳本格式,即后綴名為.jmx。啟動(dòng)Jmeter,打開剛剛生成的測(cè)試腳本即可用Jmeter進(jìn)行測(cè)試。
用Jmeter打開Badboy導(dǎo)出的腳本文件51test.jmx,在線程組上添加監(jiān)聽器以及聚合報(bào)告,開始進(jìn)行測(cè)試,測(cè)試結(jié)束后可以在聚合報(bào)告中看到測(cè)試結(jié)果。聚合報(bào)告中包含的具體屬性有:請(qǐng)求個(gè)數(shù)、平均相應(yīng)時(shí)間、中位數(shù)、90%用戶響應(yīng)的時(shí)間、最小響應(yīng)時(shí)間、最大響應(yīng)時(shí)間、錯(cuò)誤率、吞吐量以及每秒從服務(wù)器端接收到的數(shù)據(jù)量。通過分析聚合報(bào)告可以了解該Web系統(tǒng)的性能,以便后續(xù)過程對(duì)系統(tǒng)的進(jìn)一步優(yōu)化。
隨著Web系統(tǒng)的復(fù)雜性不斷增強(qiáng),系統(tǒng)性能的需求也越來越高。性能測(cè)試是Web系統(tǒng)測(cè)試中的一個(gè)重點(diǎn),掌握基本的測(cè)試知識(shí)以及自動(dòng)化測(cè)試方法,及時(shí)地開展性能測(cè)試能夠保障Web系統(tǒng)的質(zhì)量。
(西南科技大學(xué)程秋美)