作者:vivo 網際網路伺服器團隊- Liu Yanjiang
月光寶盒是一個基於流量錄製回放的自動化測試平臺,通過錄制回放取代編寫指令碼進行自動化迴歸,提升測試效率和覆蓋率。因為其解決方案具有很強的通用性,所以我們把這它開源出來,希望能幫助到有需要的使用者。
Moonbox(月光寶盒)是 JVM-Sandbox 生態下的一款流量錄製回放產品。所謂流量錄製回放是伺服器端通過掛載agent探針自動註冊到伺服器端,攔截伺服器端呼叫,將所有外部呼叫依賴的內容(如資料庫、分散式快取、外部服務響應等)進行完整記錄形成錄製流量。其核心價值是通過錄制流量資料,將流量資料轉化成可複用、可執行的自動化用例,快速在測試環境中進行回放比對介面返回值和外部呼叫依引數(見下圖)。Moonbox(月光寶盒)提供了大量的常用外掛,能夠對常見的中間呼叫進行錄製回放,同時也提供了非常可靠、高效能的資料儲存、計算能力。
正如開頭所說月光寶盒是一款面向測試、研發工程師使用的低門檻、高效能、更易於使用的自動化測試工具。這款產品已經在vivo執行了2年多了,經過我們持續優化、打磨擁有很多實用、易用功能。它的優點主要體現在下面幾方面:
(1)基於任務、介面維度的流量管理能力
(2)詳細的流量展示細節(請求、響應、子呼叫)
(3)基於任務、介面維度的回放資料管理,疊加各種維度統計、查詢能力
(4)易於人工分析的回放比對結果和差異展示
月光寶盒支援非常多元件錄製和回放能力,基本上能滿足絕大多數人訴求。
Docker:這種方式簡單、可靠,讓您可以摒棄複雜的環境設定和安裝,快速在本地體驗我們專案。
常規方式:這種方式複雜、步驟繁瑣,需要按照步驟建立ES和MySQL資料庫,初始化資料表,更新好應用設定,安裝好前端node服務。
此外月光寶盒是前後端分離專案,當您使用該專案需要分別部署前端、後端,非常有助於您後續將專案部署到生產環境。
平臺對效能進行了長期優化,在vivo內部歷經多個高並行系統驗證。我們對agent端錄製流量進行了一系列安全防護,例如對相同介面同時只能有一個進入取樣中,限制並行錄製介面數量。伺服器端使用了ES儲存流量,有效提升了資料儲存規模。
月光寶盒平臺分為2個部分,分別為moonbox-agent 和 moonbox-server(整體架構如下圖所示)
moonbox-agent
moonbox-server
Agent端使用介面,提供設定查詢、錄製流量儲存、流量查詢、回放結果儲存等服務
錄製任務/回放任務的設定,agent任務遠端管理能力和管理後臺操作介面(前後端分離部署)
流量錄製
核心邏輯是將agent分發到使用者填寫的機器上(本地、遠端機器),然後將agent attach到使用者填寫應用所對應的正確程序上去。然後通過JVM-Sandbox的BEFORE、RETRUN、THROW事件機制攔截關鍵呼叫位置獲取流量入參、出參。整體流程見下圖整體流程見下圖:
流量回放
核心邏輯是將agent分發到使用者填寫的機器上(本地、遠端機器),然後將agent attach到使用者填寫應用所對應的正確程序上去,agent啟動後從伺服器端不斷拉取流量去分發到對應介面做回放,整體流程見下圖:
心跳管理
Agent啟動後會單獨開啟執行緒固定間隔時間通過http請求給伺服器端上報心跳
執行指令碼將sandbox agent attach到目標java程序上,sandbox 啟動jetty服務,載入moonbox module,然後從伺服器端拉取moonbox設定,載入流量錄製和回放外掛。
Moonbox是基於jvm-sandbox-repeater重新開發的一款流量回放平臺產品。在jvm-sandbox-repeater基礎上重寫了很多模組,並提供了更加豐富功能,同時便於線上部署和使用,和jvm-sandbox-repeater差異如下:
流量錄製回放技術複雜,挑戰較高,開源社群雖然有很多類似產品但是在易用性方面都有一些欠缺,我們希望通過開源月光寶盒幫助對該方向有興趣的開發者快速構建自己的自動化工具,同時可以基於我們這款產品制定個性化訴求。此外,月光寶盒本身也借鑑了jvm-sandbox-repeater設計和方案,是開源的受益方,現在我們將自己思考和探索回饋給開源社群,豐富流量回放開源技術生態。除此之外通過社群中開發者的使用,也可以幫助我們更好的改進我們的工具,獲得更多的需求場景輸入,也能讓該工具獲得更加長遠的發展。
月光寶盒已經完成V1.0.0版本開源,初步完成了各項重要功能開源,後續我們會持續性的完成平臺效能、體驗優化工作,同時積極收集社群使用反饋的功能需求,將一些好的需求納入我們版本計劃裡面。2023年我們規劃了一些迭代版本,如下圖所示:
今天月光寶盒的開源只是我們邁出的一小步,後續我們會持續按照計劃向社群貢獻版本和特性。如果您對月光寶盒有興趣,歡迎體驗我們開源產品。如果您有問題或者更好的方案,歡迎向我們開源專案貢獻反饋ISSUE和貢獻PR,這將是我們莫大的榮幸。
GItHub專案地址:https://github.com/vivo/MoonBox