王立群
【摘 要】網(wǎng)絡(luò)倉(cāng)庫(kù)管理系統(tǒng)由于其數(shù)據(jù)量巨大,平臺(tái)的性能需要良好的測(cè)試。根據(jù)系統(tǒng)的特點(diǎn)和性能需求,制定詳細(xì)的性能測(cè)試計(jì)劃,借助自動(dòng)化測(cè)試工具LoadRunner對(duì)系統(tǒng)進(jìn)行測(cè)試并找出問(wèn)題所在,提出改進(jìn)和優(yōu)化方法并實(shí)施,使系統(tǒng)性能得到提高,滿足用戶需求。
【關(guān)鍵詞】網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng);性能測(cè)試;LoadRunner;每秒事務(wù)處理數(shù)
網(wǎng)絡(luò)倉(cāng)庫(kù)是一個(gè)借助先進(jìn)通信設(shè)備可以隨時(shí)調(diào)動(dòng)所需物資的若干倉(cāng)庫(kù)的總和。它改變了傳統(tǒng)的倉(cāng)儲(chǔ)觀念,可以覆蓋很大的地域,使用網(wǎng)絡(luò),根據(jù)訂貨的數(shù)量和距離,在最短的時(shí)間內(nèi)選擇一個(gè)距離最近并且有足額庫(kù)存的倉(cāng)庫(kù)完成發(fā)貨。網(wǎng)絡(luò)倉(cāng)庫(kù)是現(xiàn)代信息技術(shù)的產(chǎn)物,它迎合了經(jīng)濟(jì)發(fā)展的需求,通過(guò)統(tǒng)籌資源,節(jié)省了時(shí)間和費(fèi)用,提高了效率。在網(wǎng)購(gòu)高峰期,單量劇增,為了確保物流單的順利快速流轉(zhuǎn),需要對(duì)各個(gè)系統(tǒng)接口進(jìn)行測(cè)試,找出網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)的性能瓶頸并進(jìn)行調(diào)優(yōu),因此對(duì)網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)的性能測(cè)試意義重大。本文介紹如何使用自動(dòng)化測(cè)試工具LoadRunner對(duì)某公司的網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)進(jìn)行性能測(cè)試和性能調(diào)優(yōu),使其滿足性能需求。
1.網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)性能測(cè)試概述
1.1 性能測(cè)試工具LoadRunner簡(jiǎn)介
性能測(cè)試是使用自動(dòng)化測(cè)試工具模擬多種正常、峰值以及異常負(fù)載條件對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試,而LoadRunner作為常用的自動(dòng)化測(cè)試工具,可以模擬上千萬(wàn)用戶實(shí)施并發(fā)負(fù)載及實(shí)時(shí)性能監(jiān)測(cè)的方式來(lái)確認(rèn)和查找問(wèn)題,優(yōu)化性能。同時(shí),它能支持廣泛的協(xié)議和技術(shù),為客戶的特殊環(huán)境提供特殊的解決方案,確保系統(tǒng)獲得良好的體驗(yàn)[1]。LoadRunner性能測(cè)試的流程如下。
1.1.1 制定測(cè)試計(jì)劃 根據(jù)系統(tǒng)的需求規(guī)格說(shuō)明書(shū),制訂測(cè)試的具體計(jì)劃,列出測(cè)試指標(biāo),如系統(tǒng)的吞吐量、每秒事務(wù)處理數(shù)TPS(Transaction Per Second)、響應(yīng)時(shí)間RT(Response Time)、并發(fā)用戶數(shù)等,并寫(xiě)出相應(yīng)的性能測(cè)試報(bào)告。
1.1.2 錄制并完善測(cè)試腳本 根據(jù)用戶性能測(cè)試需求,錄制測(cè)試腳本,將用戶的實(shí)際操作加入到測(cè)試腳本中,進(jìn)行錄制,當(dāng)錄制完一個(gè)基本的用戶腳本后,在正式使用前還需要完善測(cè)試腳本,增強(qiáng)腳本的靈活性。常用的完善測(cè)試腳本的方法有:插入事務(wù)、插入結(jié)合點(diǎn)、插入注解、參數(shù)化輸入和關(guān)聯(lián)化等技術(shù),保證腳本回放,以保證測(cè)試結(jié)果的真實(shí)性和精確性[2]。
1.1.3 實(shí)施測(cè)試 首先選擇腳本,創(chuàng)建虛擬用戶,設(shè)置測(cè)試場(chǎng)景,添加windows資源監(jiān)視窗口和windows性能計(jì)數(shù)器,其次按照前面的測(cè)試用例和場(chǎng)景設(shè)置進(jìn)行場(chǎng)景執(zhí)行,結(jié)合大量的測(cè)試數(shù)據(jù)執(zhí)行測(cè)試腳本,并記錄測(cè)試結(jié)果。
1.1.4 分析測(cè)試結(jié)果 測(cè)試人員通過(guò)測(cè)試結(jié)果和制定的測(cè)試計(jì)劃比較判斷系統(tǒng)性能是否達(dá)到預(yù)期目標(biāo),如果測(cè)試結(jié)果不滿足性能需求,那么就需要測(cè)試人員找出系統(tǒng)性能瓶頸,提出優(yōu)化方案,然后再進(jìn)行回歸測(cè)試,直至系統(tǒng)性能滿足需求。
LoadRunner通過(guò)用戶執(zhí)行被測(cè)程序客戶端,在VuGen中錄制被測(cè)系統(tǒng)的客戶端和服務(wù)器的協(xié)議交互,生成腳本,然后在Controller中控制Load Generator,按照?qǐng)鼍澳M用戶,對(duì)服務(wù)器產(chǎn)生壓力,同時(shí)對(duì)被測(cè)系統(tǒng)涉及的操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件等資源進(jìn)行監(jiān)控,收集壓力情況下的資源信息,測(cè)試結(jié)束后形成測(cè)試結(jié)果和監(jiān)控?cái)?shù)據(jù),在結(jié)果分析器Analysis中進(jìn)行分析,最后生成測(cè)試結(jié)果報(bào)告[3]。
1.2 網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)性能測(cè)試及優(yōu)化
1.2.1 網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)架構(gòu) 網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)的壓測(cè)環(huán)境部署在一臺(tái)機(jī)器上,由一個(gè)Nginx做負(fù)載,兩個(gè)Tomcat運(yùn)行業(yè)務(wù)程序,數(shù)據(jù)庫(kù)使用Oracle。
1.2.2 系統(tǒng)測(cè)試過(guò)程中出現(xiàn)TPS不穩(wěn)定,呈現(xiàn)周期性的劇烈抖動(dòng)現(xiàn)象,見(jiàn)圖1。
首先檢查測(cè)試腳本本身的代碼是否存在問(wèn)題。如報(bào)文數(shù)據(jù)的組裝、HSF服務(wù)的調(diào)用等。進(jìn)而測(cè)試以下方面并進(jìn)行相應(yīng)的優(yōu)化:①檢查HSF服務(wù)和MetaQ環(huán)境:通過(guò)檢查HSF服務(wù)沒(méi)有問(wèn)題,MetaQ的環(huán)境也正常,通過(guò)排查發(fā)現(xiàn)是用于監(jiān)控?cái)?shù)據(jù)的Hbase服務(wù)出現(xiàn)問(wèn)題。②檢查負(fù)載Nginx和應(yīng)用服務(wù)器Tomcat,配置Nginx與Tomcat之間的長(zhǎng)連接,以提升性能。③優(yōu)化應(yīng)用程序:首先將業(yè)務(wù)處理分離為兩部分:接收訂單部分和處理訂單部分。其中接收訂單部分只接收訂單,然后入庫(kù),然后就返回響應(yīng);訂單處理部分就是跑后臺(tái)任務(wù),去查詢接收到的訂單表,然后最后續(xù)的業(yè)務(wù)操作。其次設(shè)置ID鎖:為了產(chǎn)生全局唯一的ID,java代碼里面使用了synchronized來(lái)加鎖產(chǎn)生ID,在并發(fā)量大時(shí),這會(huì)阻塞程序的運(yùn)行的,可以改用oracle的sequence來(lái)產(chǎn)生唯一ID,去掉java代碼中的鎖程序。最后配置連接池:對(duì)應(yīng)用程序的連接池的大小進(jìn)行合理的配置,并且保證應(yīng)用程序所有的數(shù)據(jù)庫(kù)操作的連接都從連接池中取,且需要保證從連接池中取的連接使用完成后都要在finally代碼塊中進(jìn)行close。④優(yōu)化數(shù)據(jù)庫(kù):首先對(duì)數(shù)據(jù)庫(kù)的連接數(shù)、緩存大小等進(jìn)行配置,保證有足夠的連接數(shù)可用,提升數(shù)據(jù)庫(kù)的效率。其次讀寫(xiě)分離:使用主庫(kù)與備庫(kù)的架構(gòu),寫(xiě)操作在主庫(kù)上執(zhí)行,讀操作在備庫(kù)上操作,數(shù)據(jù)有主庫(kù)同步到備庫(kù)(mysql基于binlog來(lái)同步,oracle使用redolog來(lái)同步)。再次設(shè)置報(bào)表,把報(bào)表放在備庫(kù)上進(jìn)行,且并發(fā)的高峰期,需要暫時(shí)停止報(bào)表服務(wù)。最后使用索引,保證表有索引,提升查詢效率。
經(jīng)過(guò)優(yōu)化和反復(fù)壓測(cè)比較,在不增加機(jī)器、不改變現(xiàn)有架構(gòu)的條件下,250的并發(fā)用戶數(shù),得到了平均445的TPS,RT平均為70 ms。具體見(jiàn)圖2。
3.結(jié)束語(yǔ)
在軟件性能測(cè)試及優(yōu)化過(guò)程中,測(cè)試環(huán)節(jié)中的細(xì)節(jié)往往很重要,本文通過(guò)理論并借助實(shí)際的網(wǎng)絡(luò)倉(cāng)庫(kù)系統(tǒng)作為測(cè)試對(duì)象,根據(jù)需求制定測(cè)試計(jì)劃,使用LoadRunner實(shí)施性能測(cè)試,并對(duì)測(cè)試結(jié)果進(jìn)行分析,針對(duì)發(fā)現(xiàn)的問(wèn)題提出了改進(jìn)優(yōu)化的方法,使系統(tǒng)的性能得到了提高。
參考文獻(xiàn):
[1] 戴曉婧,張寧.基于LoadRunner的數(shù)據(jù)分析平臺(tái)的性能測(cè)試及優(yōu)化[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(7):202-206,210.
[2] 段念.軟件性能測(cè)試過(guò)程詳解與案例剖析[M].北京:清華大學(xué)出版社,2006.
[3] 溫艷東.軟件性能測(cè)試需求的獲取方法綜述[J].軟件工程師,2010(2):124-127.