張輝
摘要: 為保證網(wǎng)絡(luò)服務(wù)質(zhì)量,對Web系統(tǒng)進(jìn)行性能測試,成為企業(yè)在軟件測試工作中重要的環(huán)節(jié)。從Web體系的架構(gòu)及特點出發(fā),對Web系統(tǒng)性能測試的要求、場景、指標(biāo)、流程、策略以及測試用例設(shè)計等內(nèi)容進(jìn)行分析,研究性能測試的方法,采用測試工具JMeter進(jìn)行了Web系統(tǒng)的性能測試。結(jié)果表明,對Web系統(tǒng)進(jìn)行性能測試有助于找出系統(tǒng)中存在的問題,為系統(tǒng)進(jìn)一步優(yōu)化提供依據(jù)。
關(guān)鍵詞: 性能測試; Web系統(tǒng); 軟件測試; JMeter
中圖分類號:TP3? ? ? ? ? 文獻(xiàn)標(biāo)識碼:A? ? ?文章編號:1006-8228(2021)10-28-04
Research on performance testing technology of Web system
Zhang Hui
(Gaobo School of software, Nanning University, Nanning, Guangxi 530001, China)
Absrtact: In order to ensure the quality of network service, the performance test of Web system has become an important part in the software testing work of enterprises. Starting from the architecture and characteristics of the Web system, this paper analyzes the requirements, scenarios, indicators, processes, strategies and test case design etc. of the Web system performance test, studies the testing methods, and carries on the performance testing to Web system by using the test tool JMeter. The results show that the performance test of web system is helpful to find out the problems existed in the system and provides a basis for further optimization of the system.
Key words: performance test; Web system; software testing; JMeter
0 引言
隨著Web服務(wù)的發(fā)展,網(wǎng)絡(luò)用戶數(shù)量日漸增多,用戶與系統(tǒng)產(chǎn)生的交互場景及軟件產(chǎn)生的數(shù)據(jù)量也日益增加,Web服務(wù)器必須能夠快速響應(yīng)用戶請求。為了及時解決Web系統(tǒng)所面臨的問題,利用性能測試技術(shù)對系統(tǒng)進(jìn)行有效測試,以分析系統(tǒng)是否滿足用戶對軟件在功能和性能上的需求,驗證系統(tǒng)的各項性能指標(biāo)是否達(dá)到用戶的目標(biāo),以便于發(fā)現(xiàn)系統(tǒng)存在的瓶頸。
1 Web體系架構(gòu)
由于Web系統(tǒng)是分布式系統(tǒng),采用并發(fā)、多用戶結(jié)構(gòu),Web系統(tǒng)使用的用戶數(shù)量更高,受眾群體更廣。Web系統(tǒng)采用多層體系構(gòu)架,系統(tǒng)只需根據(jù)計算機瀏覽器,就可以實現(xiàn)軟件的功能。Web系統(tǒng)主要采用表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層三層架構(gòu)。三層架構(gòu)的操作界面主要由計算機瀏覽器來實現(xiàn)完成,一部分事務(wù)管理邏輯在前端完成,關(guān)鍵事務(wù)管理邏輯性則在服務(wù)端完成。
三層架構(gòu)執(zhí)行嚴(yán)格的分層方式,數(shù)據(jù)訪問層只有被業(yè)務(wù)邏輯層訪問,業(yè)務(wù)邏輯層只有被網(wǎng)頁顯示層訪問,用戶根據(jù)表示層將信息傳輸給業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層進(jìn)行處理有關(guān)業(yè)務(wù)流程標(biāo)準(zhǔn),并根據(jù)數(shù)據(jù)訪問層訪問數(shù)據(jù)庫查詢得到數(shù)據(jù)信息,然后將反饋回來的數(shù)據(jù)在頁面顯示層進(jìn)行顯示輸出[1]。三層設(shè)計目的是實現(xiàn)高內(nèi)聚和低耦合。
2 Web性能測試
2.1 性能測試定義
Web性能測試是指在一定的軟硬件網(wǎng)絡(luò)環(huán)境下,通過模擬特定的網(wǎng)絡(luò)環(huán)境,對Web系統(tǒng)進(jìn)行針對性測試,在服務(wù)器正常響應(yīng)時間內(nèi),設(shè)置不同的負(fù)載壓力,查看系統(tǒng)可以承擔(dān)的并發(fā)用戶的數(shù)量,檢測進(jìn)行實務(wù)處理的效率,觀察系統(tǒng)指標(biāo)和空間資源是否達(dá)到預(yù)期標(biāo)準(zhǔn),判斷系統(tǒng)瓶頸可能發(fā)生的位置,如果Web系統(tǒng)測試未達(dá)到預(yù)期,需對結(jié)果指標(biāo)進(jìn)行分析,為軟件調(diào)優(yōu)提供解決方案。
2.2 性能測試模擬場景
性能測試模擬場景主要有以下三個方面。
⑴ 基于網(wǎng)絡(luò)的分布式架構(gòu):基于網(wǎng)絡(luò)協(xié)議去模擬用戶發(fā)送請求。
⑵ 多線程:模擬多線程操作,多用戶同時操作,模擬大負(fù)載量。
⑶ 模擬真實場景:在真實的網(wǎng)絡(luò)環(huán)境,得出的數(shù)據(jù)才是準(zhǔn)確的。如果場景設(shè)置不符合實際情況,測試數(shù)據(jù)也不一定可用。
2.3 性能測試的要求
⑴ 測試Web系統(tǒng)的最佳用戶數(shù)。隨著用戶數(shù)量的增多系統(tǒng)的響應(yīng)時間并沒有受到影響,但是直到達(dá)到某個用戶數(shù)量時,響應(yīng)時間開始明顯增長。
⑵ 測試系統(tǒng)的最大用戶數(shù)。隨著用戶數(shù)量的增多,系統(tǒng)的響應(yīng)時間開始延遲,直到用戶的數(shù)量達(dá)到某一數(shù)值,系統(tǒng)開始響應(yīng)失敗或崩潰。
⑶ 找到目前系統(tǒng)的性能瓶頸。依次測試系統(tǒng)的數(shù)據(jù)庫和服務(wù)層各個接口,分析找到系統(tǒng)的瓶頸。
⑷ 測試系統(tǒng)的穩(wěn)定性。系統(tǒng)保持較高的用戶數(shù)量及較高負(fù)載持續(xù)訪問的時間長度內(nèi),系統(tǒng)一直能有效響應(yīng),并沒有明顯的響應(yīng)時長起伏或死機。
2.4 性能測試類別
⑴ 負(fù)載測試:在系統(tǒng)能承受的壓力極限范圍內(nèi)持續(xù)運行,以測試系統(tǒng)的穩(wěn)定性。主要用于掌握系統(tǒng)的性能,為提升系統(tǒng)性能提供基礎(chǔ)依據(jù)。
⑵ 壓力測試:指持續(xù)提升Web系統(tǒng)的工作壓力,直到被測系統(tǒng)無法正常運行,以測試系統(tǒng)能承受的工作壓力,由此得到系統(tǒng)性能的最大服務(wù)質(zhì)量。
⑶ 并發(fā)測試:在一定的軟硬件網(wǎng)絡(luò)環(huán)境下,并發(fā)測試多種業(yè)務(wù)場景,在同一個負(fù)載壓力下,構(gòu)造相同的測試數(shù)據(jù),目的是為了測試系統(tǒng)是否能正常運行。
⑷ 穩(wěn)定測試:在一定負(fù)載的情況下,給予外界或內(nèi)部非正常的干擾,檢測系統(tǒng)是否能提供穩(wěn)定服務(wù),目的主要是為了驗證正常情況下,系統(tǒng)是否能滿足性能指標(biāo)要求。
⑸ 容量測試:通常是獲取數(shù)據(jù)庫的最佳容量能力,又稱為容量預(yù)估。在一定的并發(fā)用戶,不同的數(shù)據(jù)量訪問下,觀察數(shù)據(jù)庫的處理能力,獲取數(shù)據(jù)庫的各項性能指標(biāo)。
2.5 性能測試指標(biāo)
⑴ 響應(yīng)時間:是指系統(tǒng)對請求作出響應(yīng)的時間,不同的功能的響應(yīng)時間也不盡相同。通常指該系統(tǒng)所有功能的平均響應(yīng)時間或者所有功能的最大響應(yīng)時間[2]。
⑵ 吞吐量:吞吐量是指單位時間內(nèi)服務(wù)器處理的字節(jié)數(shù)。在一定時間內(nèi),用戶數(shù)量持續(xù)增加,而吞吐量趨于平衡甚至有略微減少不見遞增,說明該用戶數(shù)量即為當(dāng)前系統(tǒng)所能承受的最大用戶數(shù)量,系統(tǒng)處理能力已經(jīng)達(dá)到瓶頸。
⑶ TPS:是指服務(wù)器每秒處理的事務(wù)數(shù),TPS值越大,系統(tǒng)處理能力越強。
⑷ 并發(fā)用戶數(shù):模擬多個用戶在同一時間訪問服務(wù)器,并發(fā)用戶數(shù)指的就是在線用戶數(shù)量。
2.6 性能測試的流程
⑴ 對測試需求進(jìn)行分析,劃定性能測試的范圍,了解系統(tǒng)的性能指標(biāo),把業(yè)務(wù)模型映射成測試模型,進(jìn)行工作評估,制定測試計劃。
⑵ 錄制測試腳本,調(diào)試測試腳本,設(shè)計測試場景,根據(jù)測試模型來準(zhǔn)備被測系統(tǒng)的主數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù),測試數(shù)據(jù)[3]。
⑶ 運行、監(jiān)控場景,收集性能數(shù)據(jù),對性能測試過程中發(fā)現(xiàn)的缺陷進(jìn)行管理。
⑷ 分析性能測試結(jié)果,編寫測試報告,性能測試人員與開發(fā)人員一起來解決性能問題,提供系統(tǒng)優(yōu)化方案。
2.7 測試用例設(shè)計
⑴ 基于場景的測試用例設(shè)計。
① 單業(yè)務(wù)功能場景:運行測試期間,所有虛擬用戶只執(zhí)行同一種業(yè)務(wù)功能的某個操作。
② 混合業(yè)務(wù)功能場景:運行測試期間,部分虛擬用戶執(zhí)行某種業(yè)務(wù)的某個環(huán)節(jié)操作,部分虛擬用戶執(zhí)行該業(yè)務(wù)功能的其他環(huán)節(jié)?;蛘卟糠痔摂M用戶執(zhí)行某種業(yè)務(wù)功能,部分虛擬用戶執(zhí)行其他業(yè)務(wù)功能。
⑵ 事務(wù)定義。根據(jù)合理的定義事務(wù),方便分析系統(tǒng)瓶頸,尤其在混合業(yè)務(wù)功能場景測試中。比如,購買商品,可以把下訂單定義為一個事務(wù),把支付也定義為一個事務(wù)。
⑶ 場景監(jiān)控對象。針對每條用例,明確可能的壓力點,比如數(shù)據(jù)庫、Web服務(wù)器等。同時需要監(jiān)控不同的對象,比如tps,耗時,CPU,內(nèi)存,I/O等。
2.8 測試策略
⑴ 先做混合業(yè)務(wù)功能場景的測試,然后做單業(yè)務(wù)功能場景的測試。
⑵ 在進(jìn)行性能測試的過程中,常規(guī)的測試次序為負(fù)載測試、壓力測試、穩(wěn)定性測試、 強度測試[4]。
⑶ 逐步加壓。例如前3分鐘,測試15個用戶,接著每隔3分鐘,增加15個用戶,以此類推。不僅比較真實的模擬現(xiàn)實環(huán)境,而且在性能指標(biāo)比較模糊且不知道服務(wù)器處理能力的情況下,可以確定出一個大致基準(zhǔn),通過分析可以能得出服務(wù)器大致處理能力,供后續(xù)測試參考。
⑷ 單點并發(fā)。如使用集合點,單獨針對某個環(huán)節(jié)的并發(fā)測試,通常是針對某個環(huán)節(jié)的性能調(diào)優(yōu)時使用。
2.9 測試執(zhí)行
⑴ 創(chuàng)建測試自然環(huán)境。在進(jìn)行測試用例以后,就逐漸構(gòu)建測試環(huán)境。創(chuàng)建測試環(huán)境包含硬件配置、系統(tǒng)軟件環(huán)境的構(gòu)建,系統(tǒng)配置主要參數(shù)的調(diào)節(jié)等內(nèi)容[5]。
⑵ 制作測試腳本和情景。制作測試腳本和情景活動主要根據(jù)自動化測試專用工具來完成。
⑶ 實行測試和結(jié)果記錄。在自動化測試專用工具的協(xié)助下,執(zhí)行測試,獲取相關(guān)性能測試參數(shù)。
2.10 性能測試分析
性能測試分析用于分析測試結(jié)果,根據(jù)結(jié)果給出測試結(jié)論。常用的分析方法如下。
⑴ 不同的測試環(huán)境下,分析硬件設(shè)備的性能指標(biāo)與預(yù)期的性能指標(biāo),確定是否達(dá)到了我們需要的結(jié)果。針對沒有達(dá)到預(yù)期的指標(biāo),分析具體的瓶頸點,系統(tǒng)性能拐點,系統(tǒng)在可接受的性能指標(biāo)下最大的處理能力,系統(tǒng)在不同配置下的性能表。
⑵ 不同的測試環(huán)境下,分析應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器、中間件等組件的性能指標(biāo)。在性能測試執(zhí)行過程中,可能會發(fā)現(xiàn)某些功能上的不足或存在的缺陷,根據(jù)確定的問題進(jìn)行具體詳細(xì)的分析出現(xiàn)問題的原因,分析需要優(yōu)化的地方。
3 性能測試實踐
3.1 性能測試工具
JMeter是一個開源的自動化性能測試工具,主要用于測試B/S架構(gòu)的系統(tǒng)性能。本次采用jmeter作為測試工具,通過jmeter代理服務(wù)器錄制腳本生成http請求腳本,并由http協(xié)議通過get方式發(fā)送訪問請求,收集服務(wù)器吞吐能力、響應(yīng)時間等性能指標(biāo)的情況。
3.2 測試場景設(shè)計
被測的商業(yè)網(wǎng)站系統(tǒng)采用B/S架構(gòu),測試頁面是購物的搶購場景。搶購活動時會有優(yōu)惠券產(chǎn)生,客戶拿到優(yōu)惠券后才能參加搶購。首先客戶不停的刷搶購活動,一直刷出一個正在進(jìn)行有優(yōu)惠券的搶購活動,然后馬上請求使用優(yōu)惠券。無論是否成功,客戶會稍后查詢已經(jīng)擁有的優(yōu)惠券是否已經(jīng)出現(xiàn)在賬號里。
假設(shè)測試場景為200客戶,每隔一秒啟動一個新客戶;系統(tǒng)每隔10秒發(fā)出一個搶購活動,一共發(fā)布160次,每個搶購活動包含50張優(yōu)惠券,即一共投放8000張優(yōu)惠券。整個測試持續(xù)半個小時。
3.3 測試結(jié)果分析
⑴ 吞吐能力
從圖1可以看到查詢活躍的搶購活動事務(wù)處理量最高,穩(wěn)定在4000左右。其他因為業(yè)務(wù)比例的原因較低,去掉查詢活躍的搶購活動事務(wù)后如圖2。
拼單和優(yōu)惠券查詢之間的差值是由于存在搶購失敗造成的,測試所設(shè)置用戶行為場景是無論拼單成功與否都會進(jìn)行一次優(yōu)惠券查詢。
⑵ 響應(yīng)時間
根據(jù)測試結(jié)果,平時響應(yīng)時間和事務(wù)處理時間如圖3、圖4。
在測試過程中,70%的事務(wù)處理時間都是在15ms以內(nèi),整體平均響應(yīng)時間處于50ms內(nèi)。
3.4 結(jié)果分析
依據(jù)測試過程中對于測試資源的觀察,Web服務(wù)器CPU使用率低于20%,其他資源使用率很低,服務(wù)器表現(xiàn)出良好的性能,系統(tǒng)的吞吐能力和響應(yīng)時間基本滿足需求。
3.5 優(yōu)化方案
根據(jù)測試的結(jié)果的分析,可以適當(dāng)對Web系統(tǒng)做出一些優(yōu)化調(diào)整。
⑴ 調(diào)整網(wǎng)頁布局,合理使用框架集框架頁。
⑵ 刪除代碼中所有不相關(guān)的頁面元素,以及不影響頁面顯示和功能的字符集。
⑶ 刪除不必要的框架文件。
⑷ 減少代碼中對數(shù)據(jù)庫的訪問次數(shù),優(yōu)化查詢邏輯。
3.6 測試小結(jié)
使用JMeter可以靈活有效地模擬多用戶并發(fā)場景,實現(xiàn)Web性能測試,準(zhǔn)確統(tǒng)計響應(yīng)時間、吞吐量、錯誤率等性能指標(biāo),為分析系統(tǒng)性能和系統(tǒng)調(diào)優(yōu)提供了參考。由于測試環(huán)境與生產(chǎn)環(huán)境存在差異,網(wǎng)絡(luò)環(huán)境復(fù)雜,根據(jù)JMeter的性能測試結(jié)果,系統(tǒng)開發(fā)人員需要進(jìn)一步探索,找出系統(tǒng)性能缺陷。
4 結(jié)束語
Web性能測試是軟件測試的重要環(huán)節(jié),提高系統(tǒng)性能以及解決系統(tǒng)在實際運行中出現(xiàn)的問題,是性能測試的根本目標(biāo)。在性能測試過程中,按照實際性能測試需求為準(zhǔn)則,設(shè)計合理的性能測試場景,盡量模擬用戶的實際行為,使測試用例更接近用戶實際使用情況,才能提高性能測試的效率。在充分了解了性能測試目標(biāo)的情況下,制定更加合理的性能測試方案,監(jiān)控性能測試流程,做出更加充分的軟件測試,才能找出瓶頸,為軟件調(diào)優(yōu)提供依據(jù)。
參考文獻(xiàn)(References):
[1] 黃智,宋楊.在ASP.NET中實現(xiàn)三層B/S結(jié)構(gòu)開發(fā)探索[J].科技信息(學(xué)術(shù)研究),2008.30:225-228
[2] 唐濤.性能測試在電力信息管理系統(tǒng)中的應(yīng)用[J].計算機光盤軟件與應(yīng)用,2012.15(16):26-27
[3] 陳佐,張懷相,方景龍.嵌入式軟件自動化測試技術(shù)[J].計算機工程與設(shè)計,2018.39(10):3125-3131
[4] 劉紅.基于Web軟件的性能測試研究[C].中國教育發(fā)展戰(zhàn)略學(xué)會教育教學(xué)創(chuàng)新專業(yè)委員會.2019全國教育教學(xué)創(chuàng)新與發(fā)展高端論壇論文集(卷六).中國教育發(fā)展戰(zhàn)略學(xué)會教育教學(xué)創(chuàng)新專業(yè)委員會:中國教育發(fā)展戰(zhàn)略學(xué)會教育教學(xué)創(chuàng)新專業(yè)委員會,2019:70-71
[5] 張秋鳳.Web應(yīng)用系統(tǒng)性能測試研究與實踐[J].中國新通信,2016.18(14):117-118