首先,文章涉及到 JMETER 的部分參考了 https://blog.csdn.net/weixin_40686603/article/details/114589428 這是原文鏈接,作者是我的同事,為同事打個廣告。
那么我們開始進入正文。
JMeter 是應用最廣泛的測試工具沒有之一,即便是各個開源的平台,很大程度也是以 JMeter 作為 executor 來實現這種功能的,開源的 JMeter 源碼需要閱讀,因為計划要做流量回放平台,流量的錄制基於 APISIX,所以我來做流量回放的部分。
流量回放,顧名思義,就是把生產上的流量錄制下來,在任意地方回放,關於為什么做流量回放很多文章已經說得非常清楚了,此處不再贅述。
當前總結出流量回放平台比較出名的平台有滴滴的 sharingan(很重要,最后的設計思路也是參考了 sharingan),aliyun的 doom,去哪兒的 ARES,文章比較多的工具是 go-replay,tcpplay 等。為什么不直接使用工具回放,而是調研平台,有幾個原因:
一,公司正在通過統一框架,將公司內的業務服務生態統一起來,自己開發的好處是定制程度高,可以隨時修改;
二,人員成本可控.
基於這兩點原因,參考了 sharingan 來實現我們自己的流量回放平台。不直接使用 sharingan 的理由是,我們公司是 java 技術棧,而 sharingan 是基於 go 開發的,有定制版 GOROOT,故放棄了。
所以,流量回放平台如何設計?
重畫了一次設計圖,避開了其他一些生態相關的事情。
所以我們的重點是,如何在代碼層面實現流量回放?也就是根據日志,重新構造http請求再發出去。因為當前的平台 executor 使用的是 jmeter,所以我們要學習如何在代碼層面構造 jmeter的 測試計划。
HashTree 是 JMeter 腳本的數據接口,所有通過 GUI 構造出來的 JMX 腳本最終被解析接 HashTree 上的一個個節點來順序執行。
這是哈希樹的介紹 https://zh.wikipedia.org/zh-hans/%E5%93%88%E5%B8%8C%E6%A0%91
所有的 JMeter 的組件,都被視為哈希樹的一個節點,我們要做的事情是把流量及其他操作,配置好以后,插入 hashtree,並調用 jmeter engine 執行它 。