品牌名稱
JMeter
企業(yè)規(guī)模
11-50人

MeterSphere案例分享丨基于JMeter的性能測(cè)試方案演進(jìn)之路

831次閱讀
undefined

 

目前,我在公司的測(cè)試團(tuán)隊(duì)中擔(dān)任Leader,團(tuán)隊(duì)成員11人,以外包居多。外包同事在工作中遇到最多的問題是權(quán)限受限的問題。我們每次在完成SIT(System Integration Testing,系統(tǒng)集成測(cè)試)后,都需要按照集團(tuán)要求對(duì)所測(cè)系統(tǒng)的一些接口進(jìn)行性能測(cè)試,并且將報(bào)告給到集團(tuán)驗(yàn)收。

我們使用的性能測(cè)試工具是JMeter。“Best practices state that you shouldn’t run a load test from the GUI mode at all.”——按照J(rèn)Meter的最佳實(shí)踐,我們準(zhǔn)備了不少壓力機(jī)供測(cè)試人員到上面執(zhí)行命令(-n -t -l),下載JTL文件生成報(bào)告。

但是我們的外包同事居然沒有壓力機(jī)登錄權(quán)限,這樣我們只能一遍遍地上去幫助他們進(jìn)行上傳、執(zhí)行和下載操作,并且發(fā)給他們結(jié)果。我們還需要負(fù)責(zé)調(diào)整腳本的項(xiàng)目結(jié)構(gòu),操心執(zhí)行完后去取文件的時(shí)機(jī)。這樣就導(dǎo)致我們的工作時(shí)間被嚴(yán)重碎片化,工作效率也被降低了。

如果我們向外包人員開放賬號(hào),也面臨著新問題。操作的人太多,壓力機(jī)里目錄變得一片狼藉。簡單來說就是一切有權(quán)限的目錄,都會(huì)有各式的文件和文件夾,慢慢壓力機(jī)磁盤也爆了,無人清理。

MeterSphere能夠幫助我們做什么?

面對(duì)這樣一個(gè)簡單的問題,業(yè)界有很多的解決方案,我們也有自己的辦法。


 

undefined

 

圖1 內(nèi)部實(shí)現(xiàn)的壓測(cè)平臺(tái)

我們做了一個(gè)簡單的Web程序,把一個(gè)個(gè)小項(xiàng)目的性能測(cè)試腳本文件夾打包上傳,拷貝到做了分布式配置的壓力機(jī)上。外包同事在Web頁面點(diǎn)擊便可執(zhí)行,這時(shí)配置好的控制機(jī)就會(huì)執(zhí)行一個(gè)事先準(zhǔn)備好的Shell腳本去跑這些傳上去的JMX,每一條上傳記錄執(zhí)行后都會(huì)有JTL的ZIP包下載鏈接。這樣一來,上述的基礎(chǔ)問題便解決了。磁盤的清理加個(gè)定時(shí)任務(wù)應(yīng)該也不是難事,但我們還是遇到了新問題。

每更換一次虛擬用戶數(shù),就需要將腳本下載下來修改一次。調(diào)試時(shí)我們習(xí)慣將虛擬用戶數(shù)和循環(huán)次數(shù)都設(shè)置成1,這樣操作很容易帶入壓測(cè)環(huán)境。這也帶來了很多“下載-修改-打包-上傳”的反復(fù)操作,真的令人抓狂的!我們需要讓W(xué)eb程序能夠在線修改上傳的JMeter腳本。

但是一波未平,一波又起。我們的性能測(cè)試除了出報(bào)告,也是需要配合開發(fā)調(diào)優(yōu),我們需要讓開發(fā)看到實(shí)時(shí)變動(dòng)。既然我們一直都在用Non GUI執(zhí)行,就不必再使用JMeter的GUI去實(shí)時(shí)呈現(xiàn)了,這樣不僅有性能損耗,也不太好和現(xiàn)有的Web程序相集成。

“Backend Listener+Grafana+InfluxDB”很香嗎?實(shí)踐下來也不盡然。為每一次壓測(cè)生成對(duì)應(yīng)的Grafana展示模板并作為URL分享并不是一件容易的事。再看我們這個(gè)簡單的性能腳本分發(fā)器,還缺乏項(xiàng)目組織、定時(shí)設(shè)置、日志查看等功能。如果持續(xù)投入時(shí)間去完善它,哪還有時(shí)間寫代碼呢?是時(shí)候找一個(gè)開源產(chǎn)品了。

選擇開源產(chǎn)品的套路很多人都懂,比如開源許可協(xié)議、活躍度、開發(fā)語言等等。常年混跡于GitHub,我們發(fā)現(xiàn),GitHub里開發(fā)框架和業(yè)務(wù)項(xiàng)目居多,優(yōu)秀的國內(nèi)開源測(cè)試平臺(tái)卻鳳毛菱角。

2020年5月之前,Java系的看的下去的貌似只有“LF”,阿里也有一款基于AI的用例膨脹的工具。國外的Taurus項(xiàng)目解決了我們根據(jù)場景修改JMeter腳本的痛點(diǎn),但如何讓它自身圖形化、且變得易用又成為了一個(gè)新的課題。BlazeMeter似乎是集大成者,但是我司網(wǎng)絡(luò)訪問真的好卡,而且開源版不直接在企業(yè)環(huán)境內(nèi)部署。

我們希望能找到一款目前能解決我們大部分痛點(diǎn),遇到新的痛點(diǎn)我們能在此基礎(chǔ)上自行解決,發(fā)生問題我們能自行定位處理的開源測(cè)試平臺(tái)。MeterSphere開源持續(xù)測(cè)試平臺(tái)正是我們所需要的。

從2020年6月MeterSphere發(fā)布的第一個(gè)版本,我們就開始試用,并閱讀了其代碼。MeterSphere使用的是當(dāng)下主流的開發(fā)框架(Vue.js+Spring Boot+Docker),建立在著名開源接口、性能測(cè)試工具JMeter之上,沒有絲毫地“藏私”,系統(tǒng)里的每一個(gè)組件都能找到源代碼,包括它們使用到的Dockerfile。

MeterSphere的使用感受

MeterSphere項(xiàng)目的第一個(gè)版本發(fā)布后,我們完成了對(duì)它調(diào)研。GPL v2.0開源許可協(xié)議賦予了這個(gè)開源項(xiàng)目充分的使用和修改自由,短時(shí)間內(nèi),這個(gè)項(xiàng)目在Github上的Star數(shù)量已經(jīng)突破了2500個(gè),項(xiàng)目團(tuán)隊(duì)也在持續(xù)展開規(guī)律性的迭代,每個(gè)月你都能收獲一系列想要的功能。如果你是Java系,MeterSphere項(xiàng)目采用的技術(shù)非常主流,代碼也比較工整,你可以上手修改。

第一次搭建部署我們就遇到了問題,主要的原因是我們沒有太多使用Docker Compose的經(jīng)驗(yàn)。我們的風(fēng)格是要完全掌控我們所使用工具的每一個(gè)細(xì)節(jié),為此我們放棄了MeterSphere一鍵安裝的部署方式,單獨(dú)編譯每個(gè)組件,并使用公司已有的中間件(Nginx、ZooKeeper、Kafka、MySQL)來部署MeterSphere,并且把我們一直使用的JMeter做成Docker鏡像供MeterSphere進(jìn)行調(diào)度。

這樣每個(gè)組件的日志,以及運(yùn)行方式我們都能了如指掌,出現(xiàn)問題也能快速定位,以確保平臺(tái)一直可用。遇到搞不定的問題,也能在微信交流群中提供更精準(zhǔn)的信息請(qǐng)MeterSphere研發(fā)團(tuán)隊(duì)的同學(xué)幫忙解決。

 

undefined

 

圖2 MeterSphere平臺(tái)架構(gòu)

在我們使用第一版MeterSphere之前,我們做了簡單的改造,屏蔽了用例管理和Bug跟蹤功能。這樣做是考慮到上線了就會(huì)有人使用,屏蔽暫不使用功能是為了降低運(yùn)維成本和解釋成本。我們將執(zhí)行時(shí)間從分鐘改為了秒,也修改了一些Bug(這些Bug在MeterSphere后續(xù)的版本中已經(jīng)修復(fù))。我們就這樣愉快地開啟了開源持續(xù)性能測(cè)試之旅,它完美解決了我之前所提到的種種問題。

伴隨著MeterSphere項(xiàng)目的持續(xù)演進(jìn),我們基本上是MeterSphere每發(fā)布一個(gè)新版本都會(huì)進(jìn)行升級(jí)。因?yàn)镸eterSphere的接口測(cè)試功能幾乎每個(gè)版本都在完善(從Dubbo到TCP,再到SQL),這對(duì)我們很有意義。我們的接口自動(dòng)化測(cè)試用例都是以JMeter腳本的形式維護(hù)在SVN中,每次需要再次執(zhí)行時(shí)都需要花費(fèi)時(shí)間去調(diào)試。很多腳本都不知道是從何時(shí)開始就已經(jīng)不可用,用這種維護(hù)方式做持續(xù)集成測(cè)試并不如人意,報(bào)告也需要額外處理。

MeterSphere集中化、界面化、場景化接口測(cè)試用例的方式其實(shí)更為主流。而且MeterSphere一系列界面配置操作后內(nèi)部其實(shí)還是一個(gè)個(gè)JMeter文件去跑接口測(cè)試(使用JS生成的JMX),你從JMeter接口測(cè)試到MeterSphere接口測(cè)試的過渡從原理與機(jī)制上是順滑的。而且在后面的版本,MeterSphere還計(jì)劃推出JMeter直接上傳為MeterSphere接口測(cè)試用例的新功能。目前,MeterSphere已經(jīng)支持了Postman的遷移功能。總的來說,持續(xù)發(fā)展的項(xiàng)目更值得我們花時(shí)間去適應(yīng),也會(huì)引導(dǎo)我們走更為主流的技術(shù)道路。

期待與建議

MeterSphere的每個(gè)版本都有驚喜,易用性也在不斷加強(qiáng)。我總在期待卻不知道如何建議,如果非要說點(diǎn)什么,那么我簡單想到了以下兩點(diǎn):

■ 報(bào)告與圖表不如BlazeMeter精細(xì)、豐富;

■ 日志類的文件存到了MySQL中,不適合查詢。下載是需要先讀mysql,文件大時(shí)非常卡,感覺Elastic Search和InfluxDB更合適一些。

我們還需要與MeterSphere開源持續(xù)測(cè)試平臺(tái)不斷磨合并深入使用。MeterSphere項(xiàng)目成長得很快,我們還有很多東西沒有來得及使用和學(xué)習(xí),我們要加快腳步!