【摘要】? ? 針對基于JMETER原始的性能測試結(jié)果文件,不包含各個(gè)服務(wù)器的資源消耗性能數(shù)據(jù),性能測試結(jié)果數(shù)據(jù)不完整,后期還需要通過人工的方式去整理所有的測試結(jié)果數(shù)據(jù)手工編寫報(bào)告,消耗大量的人力和時(shí)間成本的問題。為此,本文提出了一種性能測試結(jié)果大數(shù)據(jù)智能分析系統(tǒng),首先,采用了PANDAS+PYSPARK技術(shù)框架,通過多進(jìn)程機(jī)制和分塊并行處理,解決了10G+超大性能結(jié)果文件JTL的解析入庫問題,速度快,效率高。其次,利用INFLUXDB時(shí)序數(shù)據(jù)庫和ECHART可視化庫,一鍵式自動(dòng)生成和編排性能測試的過程曲線截圖和測試結(jié)果表格,提升了性能測試的效率。
【關(guān)鍵詞】? ? PANDAS? ? INFLUXDB? ? 大數(shù)據(jù)? ? 性能報(bào)告
引言:
目前,在互聯(lián)網(wǎng)時(shí)代,線上的交易量越來越大,對系統(tǒng)的性能要求越來越高,在實(shí)際的性能測試中,會(huì)產(chǎn)生的測試數(shù)據(jù)文件都是10G+,測試結(jié)束后對該文件的處理方法有限。
另外,基于JMETER原始的性能測試結(jié)果,不包含各個(gè)服務(wù)器的資源消耗性能數(shù)據(jù),性能測試結(jié)果數(shù)據(jù)不完整,后期還需要通過人工的方式去整理所有的測試結(jié)果數(shù)據(jù)手工編寫報(bào)告,消耗大量的人力和時(shí)間成本。
本論文針對上述問題,提出了一種性能測試結(jié)果大數(shù)據(jù)智能分析系統(tǒng)。
一、智能分析系統(tǒng)
(一) 總體思路
本系統(tǒng)包含數(shù)據(jù)解析、數(shù)據(jù)入庫、數(shù)據(jù)檢測、數(shù)據(jù)展示,主要思路是基于PANDAS的矩陣運(yùn)算,同時(shí)結(jié)合PYSPARK的分布式計(jì)算機(jī)制,充分利用多核CPU的性能,提高計(jì)算速度,解決了超大性能測試結(jié)果文件無法解析的問題;解析成功后的業(yè)務(wù)端性能測試數(shù)據(jù)保存到時(shí)序數(shù)據(jù)庫INFLUXDB中,性能測試數(shù)據(jù)永久保存,可以隨時(shí)進(jìn)行回溯查看和基線對比。另外通過SHELL腳本,收集各個(gè)被測服務(wù)器的系統(tǒng)資源性能指標(biāo)數(shù)據(jù);然后,采用了基于自適應(yīng)滑動(dòng)窗口的方法,智能檢測時(shí)序數(shù)據(jù)的異常波動(dòng)點(diǎn),并做好標(biāo)注,便于進(jìn)一步問題定位;最后,利用ECHART可視化庫生成每個(gè)測試腳本對應(yīng)測試結(jié)果的業(yè)務(wù)性能曲線圖形和服務(wù)器資源消耗曲線圖形,并利用HTML2CANVAS.JS和JSPDF.JS技術(shù)按照特定模版一鍵式自動(dòng)編排,生成性能測試報(bào)告,大大縮短了人工整理截圖和測試數(shù)據(jù)的時(shí)間成本,提升性能測試結(jié)果分析效率。
(二)設(shè)計(jì)方案
從步驟S101到步驟S110,詳細(xì)闡述了設(shè)計(jì)方案到過程,具體如下。
S101:基于JMETER的性能測試會(huì)產(chǎn)生JTL的結(jié)果文件,文件內(nèi)存儲(chǔ)了每個(gè)請求的時(shí)間戳、標(biāo)簽、響應(yīng)時(shí)間、錯(cuò)誤內(nèi)容、狀態(tài)碼等業(yè)務(wù)端性能數(shù)據(jù)信息。
S102: 在做7*24小時(shí)穩(wěn)定性測試的時(shí)候,大部分情況下生成的JTL文件大小都是10G+的,通過把大文件拆分成多個(gè)小文件,便于并行處理和過濾。
S103: 每個(gè)文件,利用PANDAS分塊讀取,通過預(yù)設(shè)一些正則表達(dá)式規(guī)則過濾掉不需要的字段內(nèi)容,可以大大減小內(nèi)存占用,和提升讀取速度,避免內(nèi)存溢出的錯(cuò)誤。
S104: 為了進(jìn)一步提高運(yùn)算速度,采用了PYSPARK的分布式技術(shù)框架,結(jié)合多進(jìn)程機(jī)制,充分利用每個(gè)CPU核的計(jì)算能力,解析出每個(gè)成功請求需要的信息,和過濾出錯(cuò)誤內(nèi)容進(jìn)行額外分析。
S105: 對JTL文件中過濾出來的錯(cuò)誤內(nèi)容,進(jìn)一步解析,分類匯總,按照錯(cuò)誤類別統(tǒng)計(jì)出TOP5的錯(cuò)誤信息,便于重點(diǎn)問題重點(diǎn)跟蹤處理。
S106: 對JTL文件中解析出成功請求的業(yè)務(wù)性能指標(biāo)數(shù)據(jù),存入INFLUXDB時(shí)序數(shù)據(jù)庫中,一方面,可以永久的存儲(chǔ),可以隨時(shí)進(jìn)行回溯查看和基線對比;另一方面可以結(jié)合ECHART可視化圖形展示,更加直觀觀察性能測試過程異常情況;另外,和該業(yè)務(wù)性能指標(biāo)數(shù)據(jù)對應(yīng)的服務(wù)器性能指標(biāo)數(shù)據(jù)也存入相關(guān)聯(lián)的庫中,完善了性能測試數(shù)據(jù)結(jié)果的完整性。
S107: 對于壓測過程中,需要同時(shí)監(jiān)控各個(gè)中間件所在服務(wù)器的系統(tǒng)資源情況,以便發(fā)現(xiàn)問題,采用SHELL腳本,自動(dòng)收集各臺(tái)服務(wù)器的CPU、內(nèi)存、連接數(shù)等核心服務(wù)端性能指標(biāo)數(shù)據(jù),保存到INFLUXDB時(shí)序數(shù)據(jù)庫中。
S108: 采用ECHART框架,獲取INFLUXDB時(shí)序數(shù)據(jù)庫中的數(shù)據(jù),經(jīng)過重采樣后,自動(dòng)生成可視化的性能測試結(jié)果過程曲線圖;另外,本發(fā)明對收集到的多臺(tái)服務(wù)器的數(shù)據(jù)進(jìn)行提取歸類,把同一類別的資源使用情況在同一張曲線圖中利用不同顏色的曲線區(qū)別顯示,一方面,大大減少了展示的圖片數(shù)目,另一方面,也更加清晰明了的對比和發(fā)現(xiàn)哪臺(tái)服務(wù)器資源使用有問題。
S109:智能檢測,采用均值閾值方式,在穩(wěn)定性測試中進(jìn)行異常數(shù)據(jù)檢測,發(fā)掘性能隱藏問題,便于后續(xù)追蹤。
S110: 在性能測試結(jié)束后,整理性能測試報(bào)告是個(gè)費(fèi)時(shí)費(fèi)力的工作,每個(gè)測試腳本,涉及的業(yè)務(wù)端性能指標(biāo)有TPS,95%響應(yīng)時(shí)間,成功率等,還有各臺(tái)服務(wù)器的服務(wù)端性能指標(biāo)CPU、內(nèi)存、連接數(shù)等,不僅要整理成表格,還要截取圖表,重復(fù)性工作量大。利用HTML2CANVAS.JS和JSPDF.JS技術(shù),按照預(yù)設(shè)的特定模版一鍵式自動(dòng)編排之前生成的各個(gè)腳本對應(yīng)的圖表,生成性能測試報(bào)告,大大縮短了人工整理截圖和測試數(shù)據(jù)的時(shí)間成本。
二、結(jié)束語
本論文首先充分利用PANDAS的分布式計(jì)算和矩陣運(yùn)算的能力,提高了處理超大性能測試結(jié)果文件的速度,并采用離線解析,更加靈活便捷;另外,采用均值閾值方法,在穩(wěn)定性測試中結(jié)果數(shù)據(jù)的異常波動(dòng)點(diǎn)的檢測中剔除異常數(shù)據(jù);最后一鍵式自動(dòng)生成性能測試報(bào)告,每個(gè)測試腳本對應(yīng)的業(yè)務(wù)端性能曲線圖和服務(wù)器資源端性能曲線圖都能自動(dòng)生成,并按照預(yù)設(shè)的特定模版自動(dòng)編排生成圖表相結(jié)合的性能測試報(bào)告,大大縮短了編寫整理性能測試報(bào)告的時(shí)間。
作者單位:胡通? ? 中移(杭州)信息技術(shù)有限公司
參? 考? 文? 獻(xiàn)
[1] 馬玉超.基于機(jī)器學(xué)習(xí)的動(dòng)態(tài)基線性能時(shí)序數(shù)據(jù)異常檢測研究與應(yīng)用[J].中國金融電腦,2020(06):51-59.
[2] 張晉桂,王綿金,鄭海濤,范耀明.基于接口的性能測試數(shù)據(jù)自動(dòng)化處理[J].無線互聯(lián)科技,2016(04):85-86+89.