馬莉
(中國移動(深圳)有限公司,廣東 深圳 518048)
淺談后端應(yīng)用系統(tǒng)性能測試方法
馬莉
(中國移動(深圳)有限公司,廣東深圳518048)
由于后端應(yīng)用系統(tǒng)的復(fù)雜性,業(yè)界常用的負(fù)載工具很難模擬后端系統(tǒng)的運(yùn)作。對于應(yīng)用系統(tǒng)來說,僅通過前端模擬用戶的方式來定位后端應(yīng)用系統(tǒng)的問題總會差強(qiáng)人意,因此本文提出一種針對后端應(yīng)用系統(tǒng)的性能測試方法,得出后端系統(tǒng)的最大處理能力以及擴(kuò)容的方法,進(jìn)而提高整個應(yīng)用系統(tǒng)的性能。
后端應(yīng)用系統(tǒng);性能測試;指標(biāo)值分析
隨著應(yīng)用軟件用戶負(fù)載的增加和應(yīng)用環(huán)境越趨于復(fù)雜,用戶的響應(yīng)速度、系統(tǒng)的安全運(yùn)行等性能問題,逐漸成為軟件系統(tǒng)必須考慮的指標(biāo)之一。性能測試通常通過自動化的測試工具模擬多種正常、峰值以及異常的負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試,用來檢測軟件是否達(dá)到用戶提出的性能指標(biāo),及時發(fā)現(xiàn)軟件系統(tǒng)中存在的瓶頸,升級軟件、擴(kuò)容硬件,最后起到優(yōu)化系統(tǒng)的目的。目前已經(jīng)存在的性能測試工具數(shù)量不下一百種,從單一的開放源碼的免費(fèi)工具如OpenSTA,TestMaker、Jmeter等,到商業(yè)性能測試工具QALoad、LoadRunner、Webstress等。任何性能測試工具都有其優(yōu)缺點(diǎn),可以根據(jù)實(shí)際情況挑選用最合適的工具。但是對于后臺服務(wù)器的復(fù)雜性,目前針對性的測試工具匱乏,測試方法和策略也不像前端性能測試那么明確。
性能測試需要經(jīng)過需求分析、測試準(zhǔn)備、搭建環(huán)境、測試執(zhí)行和測試結(jié)果分析等幾個重要階段,在此我們著重介紹需求分析、準(zhǔn)備階段測試環(huán)境的準(zhǔn)備,以及測試執(zhí)行階段關(guān)于后端系統(tǒng)需要重點(diǎn)關(guān)注的幾個方面。
2.1需求
后端應(yīng)用系統(tǒng)性能測試的需求來源主要是隨著前端請求數(shù)的快速增長,對系統(tǒng)進(jìn)行后端改造,需要了解改造后的系統(tǒng)性能情況。因此在測試前,需要了解系統(tǒng)目標(biāo)TPS、單個功能域的目標(biāo)處理速度、系統(tǒng)目標(biāo)承載能力等。
有了目標(biāo)后,首先要了解各個系統(tǒng)之間的通信形式,了解組網(wǎng)中各個模塊之間的通信方式、接口調(diào)用方式等信息,對于測試用例的設(shè)計以及測試環(huán)境的搭建是至關(guān)重要。其次了解系統(tǒng)進(jìn)程處理的邏輯和順序,啟動進(jìn)程時需要調(diào)用和匹配哪些數(shù)據(jù),以及數(shù)據(jù)在系統(tǒng)中被處理時的存放機(jī)制等,利用設(shè)計測試用例,精準(zhǔn)的用例可以直擊系統(tǒng)問題的本質(zhì),減少摸索的時間。
較為復(fù)雜的系統(tǒng),都會有自己的模塊組合方式。需要了解整個系統(tǒng)由幾個模塊組成,各個模塊的耦合關(guān)系是怎樣的,不僅對于功能測試中的異常測試用例的設(shè)計有很大幫助,而且對于性能測試的幫助也同樣不可小覷。如有一個性能需求是發(fā)現(xiàn)現(xiàn)網(wǎng)有一個查詢分支性能是否有問題,那么就需要很快地鎖定關(guān)鍵的模塊,瓶頸很可能存在于處理這條分支的server上。同時了解系統(tǒng)的各個模塊以及模塊之間的耦合關(guān)系,對理解性能曲線、調(diào)整測試方案同樣重要。
2.2建立業(yè)務(wù)數(shù)據(jù)模型
在了解到詳細(xì)的測試需求和系統(tǒng)架構(gòu)的基礎(chǔ)上,需要做好充足的測試準(zhǔn)備,在數(shù)據(jù)準(zhǔn)備方面,可以建立相應(yīng)的數(shù)據(jù)模型,按照模型的配比準(zhǔn)備數(shù)據(jù)。建立業(yè)務(wù)模型首先要關(guān)注的是現(xiàn)網(wǎng)運(yùn)行的業(yè)務(wù)數(shù)據(jù),并建立相應(yīng)的業(yè)務(wù)模型。以某計費(fèi)系統(tǒng)上線測試為例,計費(fèi)系統(tǒng)主要的功能模塊有計費(fèi)模塊、合帳模塊、出賬展示模塊,目的是為了在系統(tǒng)上線前需要全面掌握系統(tǒng)的性能情況。
(1)對系統(tǒng)近幾個月的業(yè)務(wù)總量進(jìn)行統(tǒng)計分析,分析得出辦理較多的交易(約占業(yè)務(wù)辦理總量的90%左右)。
(2)對業(yè)務(wù)量辦理較多的幾支交易,按天統(tǒng)計當(dāng)月的交易量。
(3)對每個月的高峰日交易量進(jìn)行分析,按小時統(tǒng)計每支交易的占比,獲取最大的小時交易量,顆粒度越小,數(shù)據(jù)越精準(zhǔn)。

表1 分別按月、按天、按時段交易量統(tǒng)計
(4)對小時交易量進(jìn)行分析,獲取各支交易的占比,該業(yè)務(wù)占比的比例關(guān)系,也是在測試執(zhí)行過程中,并發(fā)用戶數(shù)的配比關(guān)系。

表2 高峰時段交易量占比統(tǒng)計
2.3測試環(huán)境的準(zhǔn)備
測試環(huán)境的搭建往往要根據(jù)測試用例的設(shè)計而確定。對于初次進(jìn)行性能測試的系統(tǒng),目標(biāo)是盡可能和現(xiàn)網(wǎng)一致。考慮到測試環(huán)境成本問題,可搭建縮小版的測試環(huán)境,但需要注意測試環(huán)境與現(xiàn)網(wǎng)系統(tǒng)架構(gòu)必須相同,使用的操作系統(tǒng)、各軟件版本、參數(shù)配置必須相同,硬件型號、配置需與現(xiàn)網(wǎng)相同等等。
(1)測試數(shù)據(jù)準(zhǔn)確性
大數(shù)據(jù)量以及數(shù)據(jù)的多樣性往往是模擬的難點(diǎn),數(shù)據(jù)量配比可以按照業(yè)務(wù)數(shù)據(jù)模型占比準(zhǔn)備,數(shù)據(jù)準(zhǔn)備通常有三種方法:
1)大數(shù)據(jù)量需要自己寫腳本將數(shù)據(jù)庫填充到一定的程度。
2)如對數(shù)據(jù)的一致性要求高的話,可以采用從現(xiàn)網(wǎng)對數(shù)據(jù)做攔截、備份、導(dǎo)入的方法。
3)會話消息類型的數(shù)據(jù)可以采用模擬器生成的方式,生成所需要的會話類型,采集部分歷史數(shù)據(jù)進(jìn)行數(shù)據(jù)特性分析,包括數(shù)據(jù)封裝規(guī)則、數(shù)據(jù)大小范圍、數(shù)據(jù)大小波動方差、時長范圍、時長波動方差等,通過模擬器配置控制數(shù)據(jù)的樣式、數(shù)據(jù)大小、時長,以及隨機(jī)抖動的程度,這種方法可實(shí)現(xiàn)數(shù)據(jù)多維度多樣性,達(dá)到模擬的效果。
(2)測試環(huán)境網(wǎng)絡(luò)時延
網(wǎng)絡(luò)時延和IDC機(jī)器管理有著密切聯(lián)系。但是卻常常被測試人員忽略,測試機(jī)器也和運(yùn)營機(jī)器一樣,分布在不同的IDC,在挑選機(jī)器部署時,需要先了解一下現(xiàn)網(wǎng)運(yùn)營機(jī)器之間的網(wǎng)絡(luò)時延。
(3)測試環(huán)境配置
日志級別的配置、線程或進(jìn)程的個數(shù)配比需要與現(xiàn)網(wǎng)盡可能一致,在診斷問題時可以將日志級別降低,以便發(fā)現(xiàn)定位問題。
(4)測試工具準(zhǔn)備
直接針對后端性能測試的工具較少,往往在統(tǒng)計測試結(jié)果時需要大量的人為操作,對于后端服務(wù)系統(tǒng)來說,這就需要提前準(zhǔn)備的數(shù)據(jù)統(tǒng)計的方法、腳本等分別從數(shù)據(jù)庫和日志中計算出系統(tǒng)的處理能力。
2.4TPS模型配比
后端系統(tǒng)改造往往沒有歷史的性能情況,這種情況下,可以采用目標(biāo)TPS的方式壓測,即業(yè)務(wù)模型的比例是由總的目標(biāo)TPS得出各業(yè)務(wù)之間的目標(biāo)TPS的比例,再反向推出并發(fā)用戶數(shù)的配比。
步驟一,需要知道每種業(yè)務(wù)在單個并發(fā)情況下對系統(tǒng)資源消耗的情況,即將2.2章節(jié)中的業(yè)務(wù)模型所涉及的所有業(yè)務(wù),單用戶執(zhí)行多次,獲取該業(yè)務(wù)單TPS值和響應(yīng)時間time。
步驟二,根據(jù)最終要達(dá)到的整個系統(tǒng)的目標(biāo)TPS_all以及2.2章節(jié)中該業(yè)務(wù)A的占比,計算該業(yè)務(wù)需要應(yīng)達(dá)到的目標(biāo)TPS_every=TPS_all*業(yè)務(wù)A占比;
步驟三,根據(jù)基準(zhǔn)TPS_all和目標(biāo)TPS_every,計算虛擬用戶數(shù),即Vuser_every=TPS_all/TPS_every,得到的Vuser_every值往往不是整數(shù),在設(shè)定并發(fā)時需要對Vuser_every取整;
步驟四,根據(jù)Vuser_every和目標(biāo)TPS_all,反推出單個用戶的TPS_every1,TPS_every1=TPS_all/Vuser;
步驟五,計算各業(yè)務(wù)之間的延遲時間,延遲時間為實(shí)際的響應(yīng)時間time和計算得出響應(yīng)時間time1的差值。根據(jù)TPS_every1,計算出各業(yè)務(wù)單個用戶響應(yīng)時間time1,響應(yīng)時間與TPS成反比,即time1=1/TPS_every1,延遲時間=time1-time;
綜上,得出的并發(fā)用戶數(shù)量和延遲時間,就可以應(yīng)用在后續(xù)的測試執(zhí)行中。
2.5測試執(zhí)行與數(shù)據(jù)統(tǒng)計
性能測試執(zhí)行流程如圖1所示。傳統(tǒng)的性能測試方法都是按照業(yè)務(wù)模型各業(yè)務(wù)間的比例設(shè)置并發(fā)用戶數(shù),或是基于TPS的模型的負(fù)載配置方法,使應(yīng)用系統(tǒng)的測試結(jié)果符合業(yè)務(wù)模型的預(yù)期。而后端的壓測方法和網(wǎng)站等形式的系統(tǒng)差異較大:
(1)準(zhǔn)備充足的業(yè)務(wù)數(shù)據(jù),根據(jù)2.4章節(jié)得到的并發(fā)用戶數(shù)量和延遲時間,準(zhǔn)備相應(yīng)的業(yè)務(wù)數(shù)據(jù),用擋板技術(shù)使其停留在系統(tǒng)前端,等待處理;
(2)配比處理該業(yè)務(wù)進(jìn)程(或服務(wù))的個數(shù),以及個業(yè)務(wù)進(jìn)程之間的比例;
(3)首輪壓測的進(jìn)程個數(shù)不易太多,假設(shè)業(yè)務(wù)A部署N個進(jìn)程、業(yè)務(wù)B部署M個進(jìn)程,進(jìn)程啟動后,放開前端準(zhǔn)備好的測試數(shù)據(jù),待系統(tǒng)穩(wěn)定運(yùn)行后,記錄進(jìn)程(或服務(wù))個數(shù),以及此時測試的時間和后端服務(wù)器的消耗(CPU、內(nèi)存等);
(4)增加進(jìn)程(或服務(wù))的配置個數(shù),等比例增長,并記錄當(dāng)前測試時間和后端服務(wù)器的消耗(CPU、內(nèi)存等);
(5)重復(fù)步驟4,直至系統(tǒng)資源消耗達(dá)到預(yù)期(一般CPU達(dá)到70%以上即認(rèn)為已達(dá)到系統(tǒng)最大承載能力)、某臺服務(wù)器發(fā)出告警或是報錯,停止增加進(jìn)程(或服務(wù))。
(6)整個壓測過程中,每輪測試的起止時間是關(guān)鍵,測試結(jié)束后,根據(jù)測試時間統(tǒng)計后端服務(wù)器處理業(yè)務(wù)的速率,大致可分為兩種情況:一種是可落地直接寫進(jìn)物理庫的數(shù)據(jù),直接按照梯度增加進(jìn)程的每個時間段,統(tǒng)計處理業(yè)務(wù)的筆數(shù);另外一種是中間進(jìn)程(或服務(wù))處理,存儲在文件系統(tǒng)中的數(shù)據(jù),根據(jù)情況需要從處理日志中統(tǒng)計業(yè)務(wù)處理的筆數(shù)。

圖1 性能測試執(zhí)行流程圖
系統(tǒng)的性能指標(biāo)可以分為兩大類,系統(tǒng)指標(biāo)和資源指標(biāo)。典型的系統(tǒng)指標(biāo)有在線用戶數(shù)、吞吐量、響應(yīng)時間等,系統(tǒng)指標(biāo)有CPU、內(nèi)存分配和使用、文件、網(wǎng)絡(luò)IO操作、數(shù)據(jù)庫連接數(shù)操作等。近幾年隨著后端系統(tǒng)的出現(xiàn),對于大型服務(wù)器來說,硬件資源不足已經(jīng)不再是系統(tǒng)性能的瓶頸了,大型后端系統(tǒng)往往資源都十分充足,那么在評價后端系統(tǒng)性能時可以將關(guān)注重點(diǎn)放到系統(tǒng)吞吐量的波動情況、系資源使用的波動情況等,可以用數(shù)學(xué)理論統(tǒng)計、指標(biāo)值變化的情況,利用方差的概率建立波動模型。得出抖動率越小說明數(shù)據(jù)的振幅越小,系統(tǒng)越穩(wěn)定。
設(shè)指標(biāo)值為xi,i=1-n

由于后端服務(wù)器的復(fù)雜性,測試統(tǒng)計出的指標(biāo)值很難是一條直線,那么指標(biāo)值波動的程度決定了系統(tǒng)的情況,如有明顯的波動(有規(guī)律、無規(guī)律),表示系統(tǒng)不穩(wěn)定,常見瓶頸在于系統(tǒng)軟件、軟負(fù)載不均衡。小量的波動在一定程度上是可以容忍的,因此這時就需要建立一套指標(biāo)值的波動范圍,建立的依據(jù)可以通過對歷史數(shù)據(jù)的統(tǒng)計分析得出。
本文針對后端應(yīng)用系統(tǒng)提出性能測試方法,和前端WEB系統(tǒng)的性能測試的數(shù)據(jù)準(zhǔn)備、測試方法、結(jié)果采集、結(jié)果分析等多個層面差異較大,后端應(yīng)用系統(tǒng)的處理能力直接影響前端頁面處理能力,因此對于后臺服務(wù)器的性能瓶頸診斷和優(yōu)化才是整個應(yīng)用系統(tǒng)的關(guān)鍵。
[1]李少杰.面向移動智能終端應(yīng)用性能測試平臺的研究[M].廣東:華南理工大學(xué)出版社,2014.
[2]黃文高.深入性能測試[M].北京:中國水利水電出版社,2013.
[3]馮艷紅.軟件性能測試實(shí)施過程研究[J].軟件導(dǎo)刊,2011,10 (2):3-4.
[4]陳能技.軟件測試技術(shù)大全[M].北京:人民郵電出版社,2015.
Discussion on the Performance Testing Method for Back-endApplication System
Ma Li
(China Mobile(Shenzhen)Limited Company,Shenzhen 518048,Guangdong)
The complexity of the back-end application systems makes it difficult to be simulated by the common load tools.For the application system,it is barely satisfactory that only using the front-end user simulation mod to solve the problems of back-end application system.This paper presents a performance testing method for back-end application system,obtaining the maximum processing capacity and capacity expansion method,and improving the performance of the whole application system.
back-end application system;performance testing;index value analysis
TP311.52
A
1008-6609(2016)06-0062-03
馬莉,女,廣東人,碩士研究生,研究方向:軟件測試技術(shù)。