MeterSphere 案例分享丨恆大智慧科技基於 JMeter 的效能測試方案演進之路
恆大智慧科技有限公司(以下簡稱為恆大智慧科技)是恆大高科技集團的全資子公司,定位於網際網路智慧城市生態運營商。
目前,我在恆大智慧科技的測試團隊中擔任Leader,團隊成員11人,以外包居多。外包同事在工作中遇到最多的問題是許可權受限的問題。我們每次在完成SIT(System Integration Testing,系統整合測試)後,都需要按照集團要求對所測系統的一些介面進行效能測試,並且將報告給到集團驗收。
我們使用的效能測試工具是JMeter。“Best practices state that you shouldn’t run a load test from the GUI mode at all.”——按照JMeter的最佳實踐,我們準備了不少壓力機供測試人員到上面執行命令(-n -t -l),下載JTL檔案生成報告。
但是我們的外包同事居然沒有壓力機登入許可權,這樣我們只能一遍遍地上去幫助他們進行上傳、執行和下載操作,並且發給他們結果。我們還需要負責調整指令碼的專案結構,操心執行完後去取檔案的時機。這樣就導致我們的工作時間被嚴重碎片化,工作效率也被降低了。
如果我們向外包人員開放賬號,也面臨著新問題。操作的人太多,壓力機裡目錄變得一片狼藉。簡單來說就是一切有許可權的目錄,都會有各式的檔案和資料夾,慢慢壓力機磁碟也爆了,無人清理。
MeterSphere能夠幫助我們做什麼?
面對這樣一個簡單的問題,業界有很多的解決方案,我們也有自己的辦法。
圖1 內部實現的壓測平臺
我們做了一個簡單的Web程式,把一個個小專案的效能測試指令碼資料夾打包上傳,拷貝到做了分散式配置的壓力機上。外包同事在Web頁面點選便可執行,這時配置好的控制機就會執行一個事先準備好的Shell指令碼去跑這些傳上去的JMX,每一條上傳記錄執行後都會有JTL的ZIP包下載連結。這樣一來,上述的基礎問題便解決了。磁碟的清理加個定時任務應該也不是難事,但我們還是遇到了新問題。
每更換一次虛擬使用者數,就需要將指令碼下載下來修改一次。除錯時我們習慣將虛擬使用者數和迴圈次數都設定成1,這樣操作很容易帶入壓測環境。這也帶來了很多“下載-修改-打包-上傳”的反覆操作,真的令人抓狂的!我們需要讓Web程式能夠線上修改上傳的JMeter指令碼。
但是一波未平,一波又起。我們的效能測試除了出報告,也是需要配合開發調優,我們需要讓開發看到實時變動。既然我們一直都在用Non GUI執行,就不必再使用JMeter的GUI去實時呈現了,這樣不僅有效能損耗,也不太好和現有的Web程式相整合。
“Backend Listener+Grafana+InfluxDB”很香嗎?實踐下來也不盡然。為每一次壓測生成對應的Grafana展示模板並作為URL分享並不是一件容易的事。再看我們這個簡單的效能指令碼分發器,還缺乏專案組織、定時設定、日誌檢視等功能。如果持續投入時間去完善它,哪還有時間寫程式碼呢?是時候找一個開源產品了。
選擇開源產品的套路很多人都懂,比如開源許可協議、活躍度、開發語言等等。常年混跡於GitHub,我們發現,GitHub裡開發框架和業務專案居多,優秀的國內開源測試平臺卻鳳毛菱角。
2020年5月之前,Java系的看的下去的貌似只有“LF”,阿里也有一款基於AI的用例膨脹的工具。國外的Taurus專案解決了我們根據場景修改JMeter指令碼的痛點,但如何讓它自身圖形化、且變得易用又成為了一個新的課題。BlazeMeter似乎是集大成者,但是我司網路訪問真的好卡,而且開源版不直接在企業環境內部署。
我們希望能找到一款目前能解決我們大部分痛點,遇到新的痛點我們能在此基礎上自行解決,發生問題我們能自行定位處理的開源測試平臺。MeterSphere開源持續測試平臺正是我們所需要的。
從2020年6月MeterSphere釋出的第一個版本,我們就開始試用,並閱讀了其程式碼。MeterSphere使用的是當下主流的開發框架(Vue.js+Spring Boot+Docker),建立在著名開源介面、效能測試工具JMeter之上,沒有絲毫地“藏私”,系統裡的每一個元件都能找到原始碼,包括它們使用到的Dockerfile。
MeterSphere的使用感受
MeterSphere專案的第一個版本釋出後,我們完成了對它調研。GPL v2.0開源許可協議賦予了這個開源專案充分的使用和修改自由,短時間內,這個專案在Github上的Star數量已經突破了2500個,專案團隊也在持續展開規律性的迭代,每個月你都能收穫一系列想要的功能。如果你是Java系,MeterSphere專案採用的技術非常主流,程式碼也比較工整,你可以上手修改。
第一次搭建部署我們就遇到了問題,主要的原因是我們沒有太多使用Docker Compose的經驗。我們的風格是要完全掌控我們所使用工具的每一個細節,為此我們放棄了MeterSphere一鍵安裝的部署方式,單獨編譯每個元件,並使用公司已有的中介軟體(Nginx、ZooKeeper、Kafka、MySQL)來部署MeterSphere,並且把我們一直使用的JMeter做成Docker映象供MeterSphere進行排程。
這樣每個元件的日誌,以及執行方式我們都能瞭如指掌,出現問題也能快速定位,以確保平臺一直可用。遇到搞不定的問題,也能在微信交流群中提供更精準的資訊請MeterSphere研發團隊的同學幫忙解決。
圖2 MeterSphere平臺架構
在我們使用第一版MeterSphere之前,我們做了簡單的改造,遮蔽了用例管理和Bug跟蹤功能。這樣做是考慮到上線了就會有人使用,遮蔽暫不使用功能是為了降低運維成本和解釋成本。我們將執行時間從分鐘改為了秒,也修改了一些Bug(這些Bug在MeterSphere後續的版本中已經修復)。我們就這樣愉快地開啟了開源持續效能測試之旅,它完美解決了我之前所提到的種種問題。
伴隨著MeterSphere專案的持續演進,我們基本上是MeterSphere每釋出一個新版本都會進行升級。因為MeterSphere的介面測試功能幾乎每個版本都在完善(從Dubbo到TCP,再到SQL),這對我們很有意義。我們的介面自動化測試用例都是以JMeter指令碼的形式維護在SVN中,每次需要再次執行時都需要花費時間去除錯。很多指令碼都不知道是從何時開始就已經不可用,用這種維護方式做持續整合測試並不如人意,報告也需要額外處理。
MeterSphere集中化、介面化、場景化介面測試用例的方式其實更為主流。而且MeterSphere一系列介面配置操作後內部其實還是一個個JMeter檔案去跑介面測試(使用JS生成的JMX),你從JMeter介面測試到MeterSphere介面測試的過渡從原理與機制上是順滑的。而且在後面的版本,MeterSphere還計劃推出JMeter直接上傳為MeterSphere介面測試用例的新功能。目前,MeterSphere已經支援了Postman的遷移功能。總的來說,持續發展的專案更值得我們花時間去適應,也會引導我們走更為主流的技術道路。
期待與建議
MeterSphere的每個版本都有驚喜,易用性也在不斷加強。我總在期待卻不知道如何建議,如果非要說點什麼,那麼我簡單想到了以下兩點:
- 報告與圖表不如BlazeMeter精細、豐富;
- 日誌類的檔案存到了MySQL中,不適合查詢。下載是需要先讀mysql,檔案大時非常卡,感覺Elastic Search和InfluxDB更合適一些。
我們還需要與MeterSphere開源持續測試平臺不斷磨合並深入使用。MeterSphere專案成長得很快,我們還有很多東西沒有來得及使用和學習,我們要加快腳步!
注:本文作者為恆大智慧科技高階測試工程師李生。
相關文章
- MeterSphere 案例分享丨易盛資訊 MeterSphere 介面測試使用經驗
- 基於jmeter的效能全流程測試JMeter
- MeterSphere 案例分享丨我們為什麼要從 HTTPRunner 轉向 MeterSphereHTTP
- jmeter 效能測試入門手冊分享JMeter
- JMeter效能測試JMeter
- Jmeter介面測試+效能測試JMeter
- 使用 MeterSphere 進行 Dubbo 介面測試
- 效能測試乾貨分享:JMeter如何使用Bean Shell進行引數化?JMeterBean
- jmeter之效能測試JMeter
- jmeter做效能測試JMeter
- 一條Jmeter效能測試精通之路影片(52集乾貨)JMeter
- 好程式設計師Java教程分享Jmeter效能測試程式設計師JavaJMeter
- 實用測試技能分享:jmeter+Jenkins效能測試自動化搭建JMeterJenkins
- Jmeter效能測試實戰JMeter
- jmeter之效能測試(16.1)JMeter
- Jmeter測試工具的實際專案測試案例JMeter
- 漫談前端自動化測試演進之路及測試工具分析前端
- Jmeter效能測試:高併發分散式效能測試JMeter分散式
- 使用 jMeter 對 SAP Spartacus 進行併發效能測試JMeter
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- 使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試JMeterRESTAPI
- Jmeter效能測試 —— 壓力模式JMeter模式
- Jmeter效能測試簡單使用JMeter
- Jenkins+Jmeter 整合效能測試JenkinsJMeter
- Jmeter TCP協議效能測試JMeterTCP協議
- JMeter:效能測試利器全解析JMeter
- 『動善時』JMeter基礎 — 59、進行JMeter分散式測試遇到的坑JMeter分散式
- 經緯恆潤基於INTEWORK-TAE的OTA自動化測試解決方案
- 測試開發之效能篇-JMeter介面測試JMeter
- Locust1.4.3版本效能測試工具案例分享
- JMeter——非同步請求效能測試JMeter非同步
- 效能測試 —— Jmeter 命令列詳細JMeter命令列
- JMeter效能測試工具使用入門JMeter
- 效能壓力測試JMeter替代:LoadjitsuJMeter
- 效能測試--JMeter 主要元件介紹JMeter元件
- 軟體效能測試基礎知識分享
- 分享 | 滴滴分散式NoSQL資料庫Fusion的演進之路分散式SQL資料庫
- 測試實戰分享:關於詞根字典使用者測試的案例研究