JMeter 源代碼解讀(一)
jmeter是如何啟動的
1 背景
隨著公司業務急劇擴展,呈現爆發式的增長,當前測試工具已經無法更好,更全面的覆蓋所有的業務以及協議,不同事業部之間也存在不同的加密方式,jmeter工具已經不適用於當前業務需求。考慮到涉及到性能測試,單方面的jar包以及beanshell已經嚴重製約性能結果的準確率,故而在此分析jmeter的開源代碼。解決當前問題,對項目定製化工具需求。
2 解讀源代碼目的
· 瞭解jmeter的結構
· 瞭解jmeter的啟動工作原理
3 IDEA編譯jmeter
3.1 jmeter源代碼下載
· 下載地址: http://jmeter.apache.org/download_jmeter.cgi
下載完成後,解壓zip文件。
PS:這裡要注意,5.2版本後已經切換工具維護,不再是ant構建,而是採用Gradle構建,不再需要修改文件。
3.2 打開文件開源文件
看下源代碼結構目錄。如下:
3.2.1 頂層目錄
· bin - 包含.bat 和 . sh 這些文件用於啟動JMeter。同時也包含了ApacheJmeter.jar 和 相關的配置文件
· build - build 腳本創建的目錄,存放一些build過程生成的文件
· dist - build 腳本創建餓目錄,存放最後輸出的文件
· docs - JMeter 相關目錄
· extras - ant 相關的其他文件
· lib - 包含JMeter 依賴的相關文件
· src - 子目錄包含支持的協議和相關組件代碼
· test - 單元測試目錄
· xdocs - 用於生成文檔的xml文件,JMeter用xml來生成文檔(主要核心思想,後期主要的代碼講解點)
3.2.2 lib目錄結構
· ext - 包含 JMeter 核心和協議相關的 jar 文件。把這些 jar 文件獨立出來原因是如果都放在lib/目錄裡啟動速度會變慢
· opt - 一些可選的 jar 用於 JMeter 的一些可選的功能。這些 jar 只有在build 和 運行的時候才會被引入。用戶可以自己下來可選的 jar 放到整個目錄裡
3.2.3 src目錄結構
· Core - JMeter 核心功能和接口的代碼目錄,分析的重點
· components - 和協議無關的一些類,例如協議, GUI 組件等
· examples - 一些sampler的例子
· functions - 一些其他組件會使用的標準函數
· jorphan - 公共方法類
· protocol - 不同的協議支持代碼
· junit - 測試相關的代碼
請核對一下idea目錄與下載的目錄是否一致。
3.3 jmeter的主要入--NewDriver.java
上圖是jemter啟動的程序入口。
那麼,如果啟動程序要做哪些事。
3.3.1 jmeter啟動之前要做環境變量檢查,如下圖
上圖紅色全中是jmeter的環境變量檢查。
3.3.2 程序初始化
上圖就是初始化
下圖是我在代碼添加了註釋,方便閱讀
3.3.3 初始化檢查通過後,開始執行啟動
上圖紅色圈中解釋如下:
這一塊涉及了 啟動的判斷
· jmeter.sh的啟動 (這裡要分操作系統,有些linux是有GUI界面的,也可以看得見,比如ubuntu,cenos 等,所以不能都認為是非GUI命令)
· jmeter.bat的啟動
· jmeter.jar的啟動
· jmeter非GUI命令啟動
然後開始進行下一步,尋找jar目錄,lib,ext等的完整性
3.3.4 主main程序
在3.3.3的步驟中,如果完整性檢查通過,則進入程序的main.
這裡的程序做了哪些事情呢?
這裡的主main需要聲明一下
· 先判斷一下EXCEPTIONS_IN_INIT 是否為空,如果不為空就表示靜態初始化有異常,直接退出進程並打印錯誤信息。
· 初始化一些基本的日誌配置
· 用剛才初始化的 classloader 加載類 org.apache.jmeter.JMeter
· 通過java 反射的方式來調用 org.apache.jmeter.JMeter 的 start 方法,正式完成 JMeter 的啟動
下圖就是反射調用啟動star
以上jmeter啟動就結束了。下圖是debug的截圖
4 總結
1. 瞭解jmeter的結構,有助於我們要對它進行第二次開發應該注意細節
2. 瞭解jmeter的啟動,閱讀代碼是理解jmeter工作的最好方式
原創內容,轉載請說明出處。