韋亞軍,張文文
(南京國圖信息產(chǎn)業(yè)有限公司,南京 210000)
近年來,隨著計算機網(wǎng)絡(luò)化應(yīng)用的進一步普及,大數(shù)據(jù)、云計算、區(qū)塊鏈等技術(shù)快速發(fā)展和應(yīng)用,軟件環(huán)境變得極其復(fù)雜,通常由網(wǎng)絡(luò)、數(shù)據(jù)庫、負載均衡器、應(yīng)用服務(wù)(中間件)、硬件等多個部分組成,任何一部分都有可能成為整個應(yīng)用軟件的性能瓶頸,從而導(dǎo)致軟件整體性能低下。同時,軟件業(yè)務(wù)復(fù)雜度日益提升、用戶量急劇增加、操作行為多樣化使得保證軟件性能的過程變得極為困難,而如何對軟件性能進行測試和驗證,一直以來都缺少標(biāo)準化的流程和方法[1-3]。
針對這一現(xiàn)狀,本文借助常用的性能測試工具LoadRunner,提出一種基于LoadRunner的軟件性能測試標(biāo)準化流程,并對其中關(guān)鍵技術(shù)分析研究,以對軟件性能測試過程和方法給出指導(dǎo)。同時,結(jié)合淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目對流程進行應(yīng)用和驗證,結(jié)果表明,該流程有效地剔除測試過程中的冗余步驟,提高測試效率,不僅滿足大部分企業(yè)級軟件的性能測試和驗證,還可以指導(dǎo)測試人員快速準確地定位軟件的性能瓶頸,分析存在的問題。
軟件性能測試是質(zhì)量保證過程必不可少的環(huán)節(jié),是驗證軟件是否滿足用戶期望的性能需求,發(fā)現(xiàn)軟件可能存在的性能瓶頸,分析性能問題,并提供性能優(yōu)化方案的過程。在實際測試過程中,可以根據(jù)具體的性能需求和應(yīng)用領(lǐng)域采取不同的測試方法,完成對軟件的性能需求和應(yīng)用領(lǐng)域驗證。常用的性能測試方法主要包括以下幾種[4-8]:
1)驗收性能測試:模擬實際業(yè)務(wù)量和使用場景,測試軟件性能是否滿足實際生產(chǎn)的性能要求,即在特定運行條件下驗證軟件的能力狀況,是最常見的一種性能測試方法。
2)負載測試:在一定的軟硬件環(huán)境下,利用增加虛擬用戶數(shù)實現(xiàn)對被測軟件增加負載,直到規(guī)定的性能指標(biāo)或各項資源利用率超過預(yù)期目標(biāo)。該方法可以找到軟件的最大承載能力,了解系統(tǒng)的性能容量。
3)壓力測試:在服務(wù)器CPU、內(nèi)存處于飽和狀態(tài)下,測試軟件處理會話的能力、是否會出錯等。一般通過模擬負載實現(xiàn)服務(wù)器資源達到較高水平,測試軟件的穩(wěn)定性。
4)配置測試:通過不斷對軟硬件的各項配置參數(shù)進行調(diào)整、測試、驗證,掌握軟件在不同環(huán)境中的運行效率,從而獲得最優(yōu)的參數(shù)配置。可以用于探索軟件最大的性能潛力。
5)并發(fā)測試:測試較多用戶對軟件的同一個功能、同一個接口請求進行訪問時,軟件是否能正確響應(yīng)。主要驗證軟件是否存在內(nèi)存泄露、線程鎖或資源競爭等情況。
6)可靠性測試:檢驗軟件在一定的負載壓力下,是否可以持續(xù)、穩(wěn)定的運行。測試時間2~3天,測試過程需隨時關(guān)注軟件各項性能指標(biāo)、資源使用情況是否滿足要求。
7)失效恢復(fù)測試:主要針對采用了負載均衡、集群部署、分布式軟件設(shè)計,當(dāng)其中一臺或者多臺服務(wù)發(fā)生故障時,軟件是否能正常被使用,且各項性能指標(biāo)是否都滿足要求。
LoadRunner是一款廣泛應(yīng)用于企業(yè)級軟件的性能測試工具,擁有良好的操作界面,可以通過模擬多虛擬用戶對軟件產(chǎn)生負載壓力。同時,還可以與開發(fā)工具進行持續(xù)集成,實時監(jiān)控軟件性能測試過程中各項指標(biāo)的運行情況,支持廣泛的協(xié)議和編程技術(shù),適用于多種體系架構(gòu)的軟件性能測試[9-11]。LoadRunner主要包括用戶腳本生成器、控制器和分析器三大組件[12],其工作原理如圖1所示。
1)用戶腳本生成器(Vugen,virtual user generator),用于捕捉用戶業(yè)務(wù)操作流并生成腳本。腳本記錄了用戶的操作,同時包含一系列用來監(jiān)測軟件性能的函數(shù),用戶可以對生成的腳本進行修改完善,來滿足實際性能測試工作的要求。
2)控制器(Controller),是整個軟件性能測試的控制中心,用來構(gòu)造和維護性能測試場景,管理協(xié)調(diào)虛擬用戶在系統(tǒng)上的操作行為。同時,通過控制器將任務(wù)分派給負載生成器,并收集Vuser、服務(wù)器、軟件各項性能指標(biāo)數(shù)據(jù)。
3)分析器(Analysis),將控制器收集的各項性能指標(biāo)數(shù)據(jù)以圖表的形式進行展示并生成測試報告,供測試人員分析和性能調(diào)優(yōu)。
圖1 LoadRunner工作原理
基于LoadRunner的軟件性能測試流程結(jié)合大部分軟件應(yīng)用現(xiàn)狀,將測試流程分為規(guī)劃測試工程、設(shè)計測試工程和測試結(jié)果分析3個階段,每個階段細分多個工作流程。實現(xiàn)將復(fù)雜的測試過程簡單化、流程化,降低測試難度,提高測試效率,為軟件的性能測試過程和方法提供指導(dǎo)。基于LoadRunner的軟件性能測試流程如圖2所示。
圖2 基于LoadRunner的軟件性能測試流程
軟件性能測試通常是利用工具模擬大量用戶操作來驗證軟件能夠承受的負載情況,找出潛在的性能問題,并對問題進行分析、解決,是一項復(fù)雜度高、綜合性強的工作,可以將其定義為一項測試工程,在開始階段需對工程進行規(guī)劃,主要包括收集并分析性能需求、構(gòu)建性能模型和制定測試計劃。
3.1.1 需求收集與分析
需求收集與分析主要是了解被測軟件的系統(tǒng)架構(gòu)、業(yè)務(wù)流程、用戶特征,以及軟件的運行環(huán)境,確定軟件性能測試的目的和范圍,分析哪些業(yè)務(wù)納入性能測試范圍以及用戶期望的性能指標(biāo)或測試終止標(biāo)準,形成需求收集表。同時,還需要分析用戶使用行為、業(yè)務(wù)分布、業(yè)務(wù)量統(tǒng)計,并根據(jù)分析結(jié)果估算出TPS和并發(fā)用戶數(shù)等指標(biāo)。
以淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目為例,該平臺主要是面向全市450余萬用戶提供不動產(chǎn)登記業(yè)務(wù)線上辦理服務(wù)。業(yè)務(wù)需求收集示例表格對部分業(yè)務(wù)量、未來業(yè)務(wù)量、響應(yīng)時間、事務(wù)通過率等進行了收集,如表1所示。
表1 業(yè)務(wù)需求收集示例
3.1.2 模型構(gòu)建和制定測試計劃
在軟件性能測試過程中,構(gòu)建性能模型類似編寫測試用例,主要是根據(jù)收集的性能需求和應(yīng)用軟件的相關(guān)信息完成模型的構(gòu)建,指導(dǎo)性能測試的實現(xiàn)和測試結(jié)果的輸出。軟件性能模型構(gòu)建主要包括業(yè)務(wù)模型和測試模型[13-20]。
1)業(yè)務(wù)模型(BM,business model),指經(jīng)過性能需求分析后,明確軟件的各個業(yè)務(wù)流程、業(yè)務(wù)相關(guān)功能在某個時間段內(nèi)運行的業(yè)務(wù)種類及其業(yè)務(wù)占比,即哪些業(yè)務(wù)在哪個時間段運行、運行多久、業(yè)務(wù)量多少、并發(fā)用戶多少等。業(yè)務(wù)模型是構(gòu)建測試模型的重要基礎(chǔ),是性能測試關(guān)注的重點。
2)測試模型(TM,test model),從業(yè)務(wù)模型中分析和整理出來需要進行性能測試的業(yè)務(wù),通常都是高頻業(yè)務(wù)、高資源占用的業(yè)務(wù),這些業(yè)務(wù)需要具有可測性、可驗證性。測試模型作為性能測試場景設(shè)計的依據(jù),通常會繼承業(yè)務(wù)模型的大多數(shù)業(yè)務(wù)功能,針對因特殊原因無法進行性能測試的(如第三方非開源加密程序,測試程序無法模擬),測試模型中會去掉這部分業(yè)務(wù),或者設(shè)計替代的等價方案。以淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目為例,部分測試模型如圖3所示。
圖3 測試模型示例
制定測試計劃的主要目的是用來規(guī)劃軟件性能測試工作,保證測試工作高效順利的進行,同時防范和抵御可能出現(xiàn)的各類風(fēng)險,是正式開展性能測試工作的前提。測試計劃主要包括系統(tǒng)概述、測試環(huán)境、測試策略、測試場景、進度計劃等內(nèi)容。同時還需明確人員安排、系統(tǒng)風(fēng)險,對測試過程中可能涉及的風(fēng)險加以評估,確定風(fēng)險的應(yīng)對策略,如人員風(fēng)險可以通過加強人力儲備、采用AB角色、明確各自職責(zé)等來完成。
設(shè)計性能測試工程主要是利用LoadRunner組件完成測試腳本開發(fā)、數(shù)據(jù)準備、場景設(shè)計、執(zhí)行與監(jiān)控等工作,是基于LoadRunner的軟件性能測試流程的重要環(huán)節(jié)。該階段的目標(biāo)是對測試工程的進一步實現(xiàn)和深化,同時輸出軟件各項指標(biāo)記錄和報告,為后續(xù)性能調(diào)優(yōu)提供數(shù)據(jù)基礎(chǔ)。
3.2.1 腳本開發(fā)與調(diào)試
LoadRunner提供了用戶腳本生成器(Vugen)組件,支持Web(HTTP/HTML)、Flex、SAPGUI等多種主流協(xié)議和JAVA、C語言、VB等多種編程語言進行測試腳本開發(fā),可以根據(jù)系統(tǒng)架構(gòu)設(shè)計選擇對應(yīng)的協(xié)議,參考構(gòu)建的性能模型完成腳本開發(fā)。開發(fā)完成后,需對腳本進行回放、調(diào)試,同時還可以添加集合點、參數(shù)化使腳本更加接近真實用戶操作,也可以插入事務(wù)和檢查點來判斷腳本在執(zhí)行過程中系統(tǒng)是否能正確響應(yīng)。
以用戶登入業(yè)務(wù)腳本為例,在腳本上方插入集合點lr_rendezvous(“l(fā)ogin”),可以實現(xiàn)不同虛擬用戶在同一時間點執(zhí)行登入操作,實現(xiàn)真正意義上的并發(fā)。在腳本上方添加開始事務(wù)lr_start_transaction(“PC_login”),在操作結(jié)尾添加結(jié)束事務(wù)和檢查點,根據(jù)響應(yīng)碼判斷事務(wù)成功或失敗,通過該操作可以輸出在指定壓力測試下登入操作的成功率、平均響應(yīng)時間等性能指標(biāo)。
lr_rendezvous("login");
lr_start_transaction("PC_login");
web_reg_save_param("access_token","LB="access_token":"","RB=",",LAST);
web_custom_request("newLogin",
"URL=http://localhost/estateplat-register/v2/loginModel/newLogin",
"Method=POST",
"Resource=0",
"RecContentType=application/json",
"Referer=http://localhost/estateplat-register/page/v2.1/login.html",
"Snapshot=t2.inf",
"Mode=HTML",
"EncType=application/json;charset=UTF-8",
"Body={"head":{"origin":"2","sign":"
""data":{"lxDh":"
LAST);
web_reg_find("Search=Body","SaveCount=pass_login","Text=個人中心",LAST);
web_url("new_user_index_個人中心",
"URL=http://localhost/estateplat-register/page/v2.1/new_user_index",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost/estateplat-register/page/v2.1/login",
"Snapshot=t9.inf",
"Mode=HTML",
if(web_get_int_property(HTTP_INFO_RETURN_CODE) 200){
lr_end_transaction("PC_login",LR_PASS);
}
else{
lr_end_transaction("PC_login",LR_FAIL);
}
3.2.2 數(shù)據(jù)準備
如何生成滿足軟件性能測試需要的大批量測試數(shù)據(jù)非常重要,因為在軟件的實際使用過程中,用戶可能會輸入各種各樣的數(shù)據(jù)進行操作,LoadRunner提供了多種數(shù)據(jù)生成方法,主要包括如下幾種:
1)數(shù)據(jù)生成池技術(shù)。在LoadRunner參數(shù)列表中,提供了多種數(shù)據(jù)類型生成技術(shù),包括日期型、隨機數(shù)等,在測試腳本中插入定義的參數(shù)名或函數(shù),并設(shè)置參數(shù)循環(huán)方式,在腳本回放時就可以自動從數(shù)據(jù)池取出數(shù)據(jù),完成大批量數(shù)據(jù)測試工作[21-25]。
2)自定義數(shù)據(jù)文件。用戶可以將自己定義的數(shù)據(jù)文件(*.dat格式)保存在腳本文件夾下,并對其進行參數(shù)化,添加到腳本中。在腳本回放時就可以通過參數(shù)化讀取用戶自定義數(shù)據(jù)文件中的測試數(shù)據(jù)。
3)執(zhí)行SQL腳本文件。通過LoadRunner提供的數(shù)據(jù)庫向?qū)Чδ?,編寫、?zhí)行SQL語句從指定的數(shù)據(jù)庫中批量選擇出滿足要求的測試數(shù)據(jù)并存儲在本地*.dat文件中,該方法是一種比較高效的測試數(shù)據(jù)批量生成方法。
在本文項目中,采用第三種方法生成測試數(shù)據(jù),即通過執(zhí)行SQL語句,從數(shù)據(jù)庫中獲取足夠多的且符合要求的測試數(shù)據(jù),并保存至本地*.dat文件,為測試過程做數(shù)據(jù)準備。當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)量不足以滿足性能測試要求時,可以通過執(zhí)行自動化腳本或編寫插入數(shù)據(jù)SQL等方式批量添加數(shù)據(jù),當(dāng)性能測試結(jié)束后,需對本輪測試所產(chǎn)生的數(shù)據(jù)進行清洗或重新恢復(fù)數(shù)據(jù)庫。
3.2.3 場景設(shè)計與實現(xiàn)
性能測試場景設(shè)計與實現(xiàn)是根據(jù)已構(gòu)建的軟件性能模型設(shè)計出相應(yīng)的測試場景,并利用LoadRunner控制器(Controller)組件,完成測試場景的實現(xiàn)。
1)場景設(shè)計:在構(gòu)建軟件性能模型時已經(jīng)確定了需要測試的業(yè)務(wù)種類,場景設(shè)計則是結(jié)合虛擬用戶,將這些業(yè)務(wù)種類組合到一個測試單元。以淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目為例,根據(jù)收集的需求和構(gòu)建的性能模型,設(shè)計出部分業(yè)務(wù)場景示例,如表2所示。
表2 場景設(shè)計示例
Sec_01基準測試:主要是用來驗證測試環(huán)境、測試腳本的正確性、得到軟件的性能基準,為后續(xù)的測試執(zhí)行提供參考依據(jù)?;鶞蕼y試采用單業(yè)務(wù)場景、單用戶方式來執(zhí)行,執(zhí)行時長根據(jù)響應(yīng)時間來調(diào)整,測試結(jié)果采樣樣本盡量大。如響應(yīng)時間為1 s,1 000個事務(wù)就需要運行1 000 s以上;響應(yīng)時間200 ms,運行600 s就可以完成3 000個事務(wù)的采樣。
Sec_02配置測試:幫助分析軟件相關(guān)性能配置,確保軟件配置適合于當(dāng)前性能需求,一般為綜合場景(多個業(yè)務(wù)同時執(zhí)行)。測試過程是一個反復(fù)實驗的過程,先找出不合理的配置,然后進行修改、驗證,直到配置滿足要求為止。
Sec_03負載測試:負載測試的目的是找出軟件的性能問題,并對軟件進行定容定量,分析軟件性能變化趨勢,為軟件優(yōu)化、性能調(diào)優(yōu)提供數(shù)據(jù)支撐。負載測試分為單場景和綜合場景,單場景可以排除其他業(yè)務(wù)場景的干擾,有利于分析性能問題;綜合場景更接近用戶實際使用情況,可以對軟件進行綜合的性能評估。
2)場景實現(xiàn):性能測試場景設(shè)計完成后,就可以利用Controller組件來實現(xiàn)具體場景。Controller支持手動場景(manual scenario)和面向目標(biāo)的場景(goal-oriented scenario)兩種類型,手動場景是指完全由用戶設(shè)置每個腳本的虛擬用戶、運行時間等信息;面向目標(biāo)的場景則是用戶提前設(shè)定好性能測試要達到的目標(biāo)和虛擬用戶的增長模式,場景運行后,直到達到用戶設(shè)定的目標(biāo)后停止。
以Sec_02配置測試為例,選擇手動場景,在Controller中添加測試腳本,設(shè)置每個腳本的虛擬用戶數(shù)量和行為方式,完成配置測試場景的實現(xiàn)。如圖4所示。
圖4 配置測試場景示例
3.2.4 執(zhí)行與監(jiān)控
場景設(shè)計與實現(xiàn)完成后,就可以在Controller中運行場景,對軟件進行性能測試,同時,實時監(jiān)控場景運行情況、獲取虛擬用戶的運行狀態(tài)、收集測試結(jié)果。測試結(jié)果不僅包括平均事務(wù)響應(yīng)時間、事務(wù)通過率、吞吐量等軟件性能指標(biāo),還包括數(shù)據(jù)庫性能狀態(tài)、JVM使用情況及服務(wù)器硬件性能指標(biāo),如CPU使用率、內(nèi)存利用率、磁盤空間等,如表3所示。
表3 性能監(jiān)控項目
結(jié)果分析是測試流程中的一個重要組成部分。場景運行結(jié)束后,Analysis組件會自動加載運行數(shù)據(jù)并生成各類圖表信息,包括虛擬用戶運行狀態(tài)、吞吐量、響應(yīng)時間及硬件資源等。同時,還提供了圖表合并、分解、關(guān)聯(lián)等功能,可以將多個性能指標(biāo)數(shù)據(jù)關(guān)聯(lián)后進行綜合分析,并確定測試結(jié)果是否滿足性能目標(biāo)要求、是否需要進行性能調(diào)優(yōu)等。
3.3.1 分析測試結(jié)果
性能測試結(jié)果分析是一項復(fù)雜度高且難度大的工作,需結(jié)合軟硬件環(huán)境、測試報告進行綜合分析,對測試人員綜合能力要求較高,其分析步驟主要包括如下:
1)首先查看性能測試整體運行狀況,收集運行日志信息,檢查運行過程中是否存在異常報錯,若存在,則需進一步分析并確定引起異常報錯的具體原因。
2)其次分析性能測試執(zhí)行結(jié)果,查看響應(yīng)時間、吞吐量、事務(wù)通過率、資源利用率等指標(biāo)是否滿足性能要求,如圖5所顯示的是部分業(yè)務(wù)響應(yīng)時間結(jié)果圖。若不滿足要求,則首先需對硬件環(huán)境進行排查,分析是否是硬件問題引起的性能瓶頸,硬件問題排除后,則需要對被測軟件本身進行分析,確定引起性能問題的具體原因。
圖5 平均事務(wù)響應(yīng)時間
3.3.2 性能調(diào)優(yōu)
針對不滿足性能需求的指標(biāo),需結(jié)合硬件、數(shù)據(jù)庫及被測軟件綜合分析存在的問題,提出解決方案,并進行性能調(diào)優(yōu)。通常性能調(diào)優(yōu)的方法包括空間換時間、時間換空間、并行、異步處理等,其中異步處理是指當(dāng)業(yè)務(wù)鏈路上有任務(wù)耗時較長,可以拆分業(yè)務(wù),甚至使用異步的方式減少阻塞影響,也就是常說的解耦。當(dāng)性能調(diào)優(yōu)完成后,還需對測試腳本進行更新,以滿足軟件調(diào)優(yōu)后的實際情況,同時對軟件進行性能復(fù)測。
在軟件性能測試過程中,除了制定統(tǒng)一、標(biāo)準化的測試流程外,還需對各個性能指標(biāo)的度量進行統(tǒng)一,如并發(fā)用戶數(shù)、每秒事務(wù)數(shù)、吞吐量等。同時,在工具的應(yīng)用過程中,為了使得測試結(jié)果更加準確和有效,還應(yīng)結(jié)合被測軟件實際情況采用一些增強技術(shù),如腳本參數(shù)化、腳本關(guān)聯(lián)。
并發(fā)用戶是指在軟件中操作業(yè)務(wù),并對后臺服務(wù)器產(chǎn)生壓力的用戶,在性能測試工具中通常被稱為虛擬用戶(VU,virutal user)。并發(fā)用戶數(shù)是由軟件具體的業(yè)務(wù)場景來決定,因此,在計算并發(fā)用戶數(shù)前,需首先確定典型的業(yè)務(wù)場景、具體的性能需求、業(yè)務(wù)模型等,然后再根據(jù)并發(fā)用戶計算公式計算出每個業(yè)務(wù)場景的并發(fā)用戶數(shù)[26-30]。
(1)
(2)
示例:以淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目為例,該軟件注冊用戶數(shù)為80萬,每天有1.5萬用戶訪問軟件進行各項操作,操作平均時間為0.5小時,該軟件每天對外開放時間為12小時。則根據(jù)式(1)和式(2)可以得到:
吞吐量是指單位時間內(nèi)系統(tǒng)處理客戶請求的數(shù)量,直接體現(xiàn)軟件系統(tǒng)的性能承載能力。一般情況下,以不同計量單位來表達吞吐量的方式可以表明軟件受不同層次的制約。如以Bytes/Second和Pages/Second為單位表示的吞吐量主要是受網(wǎng)絡(luò)、服務(wù)器架構(gòu)的制約;以Requests/Second為單位表示的吞吐量則主要是受應(yīng)用服務(wù)器、軟件代碼邏輯的制約。
一般情況下,在軟件未遇到性能瓶頸時,吞吐量與并發(fā)用戶數(shù)之間存在一定的關(guān)聯(lián)關(guān)系,如圖6(a)所示,可以采用式(3)計算吞吐量:
(3)
其中:Fv是指吞吐量,Vu是指并發(fā)用戶數(shù),R是指每個用戶的實際請求數(shù)量,T是指性能測試場景執(zhí)行的時長。如果軟件遇到性能瓶頸,如圖6(b)所示,吞吐量與并發(fā)用戶數(shù)之間就不再存在關(guān)聯(lián)關(guān)系,不能通過式(3)進行計算。
圖6 吞吐量-運行Vuser
參數(shù)化是軟件性能測試過程中最常用的技術(shù)之一。在腳本錄制時,只是簡單記錄了一組固定從客戶端發(fā)送到服務(wù)端的數(shù)據(jù),這并不符合實際軟件操作情況,同時也不滿足軟件性能測試大數(shù)據(jù)量的要求,因此就必須將這部分數(shù)據(jù)設(shè)為“參數(shù)”,并允許參數(shù)以某種方式和形式取值,在腳本運行時就可以通過預(yù)先設(shè)定的規(guī)則獲取不同的值。
如圖7所示,以辦件進度查詢業(yè)務(wù)為例。對腳本中slbh=2022012405262中的受理編號進行參數(shù)化,修改為slbh={slbh},同時在數(shù)據(jù)池中添加多組不同的受理編號數(shù)據(jù),并按照一定規(guī)則賦值給slbh參數(shù)。當(dāng)腳本回放時,slbh參數(shù)根據(jù)規(guī)則獲取不同的數(shù)據(jù)執(zhí)行腳本,實現(xiàn)進度查詢業(yè)務(wù)的性能測試。
圖7 參數(shù)化示例
由于很多軟件架構(gòu)都采用SessionID、SeqID等方法來標(biāo)識不同的任務(wù)和數(shù)據(jù)包,軟件在每次運行時發(fā)送的數(shù)據(jù)并不完全相同。在這種情況下,為了讓腳本能夠滿足測試的要求,就需要對腳本進行關(guān)聯(lián)處理。
如圖8所示,以用戶登入業(yè)務(wù)為例。在腳本錄制時,客戶端首先向服務(wù)端發(fā)送login請求,服務(wù)端驗證口令正確后,返回一個以某種規(guī)則生成的SessionID,客戶端將sessionID=375825QW7作為URL的一部分提交服務(wù)端,服務(wù)端返回客戶端相應(yīng)的信息。在腳本回放時,客戶端發(fā)送login請求后,服務(wù)端返回新的SessionID,而此時由于測試腳本中的SessionID是寫死的,客戶端會提交過期的SessionID,服務(wù)端驗證失敗后,返回會話失敗。
圖8 關(guān)聯(lián)示例
LoadRunner提供了手動和自動兩種關(guān)聯(lián)操作方式,并支持了一系列相關(guān)函數(shù)實現(xiàn)關(guān)聯(lián)操作。結(jié)合上文,需要對腳本進行關(guān)聯(lián)的條件是:客戶端需要獲取服務(wù)端返回的部分數(shù)據(jù),并將這部分數(shù)據(jù)作為下一次請求的一部分發(fā)出。一般操作步驟如下:
1)從服務(wù)端返回的數(shù)據(jù)中選取需要進行關(guān)聯(lián)的數(shù)據(jù);
2)將該數(shù)據(jù)存入腳本的一個參數(shù)中;
3)將腳本中需要使用到該參數(shù)的地方用參數(shù)來替代。
依據(jù)該流程對淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺項目進行性能測試。以負載測試場景為例,對用戶登入業(yè)務(wù)分別按照200、400、600并發(fā)用戶進行負載測試,測試時間為30 min,部分測試結(jié)果如表4所示。
表4 負載測試用戶登入業(yè)務(wù)部分測試結(jié)果
測試結(jié)果分析顯示,針對該業(yè)務(wù),隨著并發(fā)用戶的逐步增加,平均響應(yīng)時間和事務(wù)通過率未發(fā)生明顯的變化,且均滿足目標(biāo)要求。同時,系統(tǒng)吞吐量呈倍數(shù)遞增趨勢,表明系統(tǒng)在單位時間內(nèi)處理客戶請求的能力表現(xiàn)良好,且存在進一步提升的空間。在該場景下,應(yīng)用服務(wù)器的CPU使用率、內(nèi)存利用率均在閾值范圍內(nèi),滿足用戶指標(biāo)要求,如圖9所示。
圖9 用戶登入資源監(jiān)控
在本項目中,利用該流程成功完成對淮安市“互聯(lián)網(wǎng)+不動產(chǎn)登記”一體化平臺的性能測試工作,包括基準性能測試、穩(wěn)定性測試、可靠性測試及失效恢復(fù)性測試四部分,并出具多份規(guī)范性測試報告。本次項目實際應(yīng)用的結(jié)果,不僅獲得用戶一致認可,也進一步確定了該流程方法的可行性和正確性。
本文結(jié)合目前軟件性能測試現(xiàn)狀,借助常用的軟件性能測試工具LoadRunner,提出了一種標(biāo)準化的軟件性能測試流程。該流程將測試過程分為規(guī)劃測試工程、設(shè)計測試工程和結(jié)果分析3個階段,每個階段對應(yīng)不同的工作模塊,如需求收集與分析、性能模型設(shè)計、場景設(shè)計與實現(xiàn)等。通過該流程,可以將復(fù)雜的測試過程簡單化、標(biāo)準化,有效地降低了測試難度,提高了測試效率。同時,本文還在實際項目中應(yīng)用該流程,解決了過去在軟件性能測試過程中存在較多冗余步驟、測試不規(guī)范等問題。最后,對流程中的關(guān)鍵難點分析研究,確定了并發(fā)用戶數(shù)、吞吐量等常用性能指標(biāo)的計算方法。
目前,該流程已廣泛應(yīng)用于不動產(chǎn)統(tǒng)一登記、自然資源一體化審批等相關(guān)軟件的性能測試中,反響良好。未來將不斷增加試點項目,優(yōu)化流程設(shè)計,為各類企業(yè)的軟件性能測試提供更多參考。