JMeter 源代碼解讀(一)


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 打開文件開源文件

看下源代碼結構目錄。如下:

JMeter 源代碼解讀(一)


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 - 測試相關的代碼

JMeter 源代碼解讀(一)

請核對一下idea目錄與下載的目錄是否一致。


3.3 jmeter的主要入--NewDriver.java

JMeter 源代碼解讀(一)

上圖是jemter啟動的程序入口。

那麼,如果啟動程序要做哪些事。

3.3.1 jmeter啟動之前要做環境變量檢查,如下圖

JMeter 源代碼解讀(一)

上圖紅色全中是jmeter的環境變量檢查。

3.3.2 程序初始化

JMeter 源代碼解讀(一)

上圖就是初始化

下圖是我在代碼添加了註釋,方便閱讀

JMeter 源代碼解讀(一)


3.3.3 初始化檢查通過後,開始執行啟動

JMeter 源代碼解讀(一)

上圖紅色圈中解釋如下:

這一塊涉及了 啟動的判斷

· jmeter.sh的啟動 (這裡要分操作系統,有些linux是有GUI界面的,也可以看得見,比如ubuntu,cenos 等,所以不能都認為是非GUI命令)

· jmeter.bat的啟動

· jmeter.jar的啟動

· jmeter非GUI命令啟動


然後開始進行下一步,尋找jar目錄,lib,ext等的完整性

3.3.4 主main程序

在3.3.3的步驟中,如果完整性檢查通過,則進入程序的main.

JMeter 源代碼解讀(一)


這裡的程序做了哪些事情呢?

這裡的主main需要聲明一下

· 先判斷一下EXCEPTIONS_IN_INIT 是否為空,如果不為空就表示靜態初始化有異常,直接退出進程並打印錯誤信息。

· 初始化一些基本的日誌配置

· 用剛才初始化的 classloader 加載類 org.apache.jmeter.JMeter

· 通過java 反射的方式來調用 org.apache.jmeter.JMeter 的 start 方法,正式完成 JMeter 的啟動


下圖就是反射調用啟動star

JMeter 源代碼解讀(一)


以上jmeter啟動就結束了。下圖是debug的截圖


JMeter 源代碼解讀(一)


JMeter 源代碼解讀(一)


4 總結

1. 瞭解jmeter的結構,有助於我們要對它進行第二次開發應該注意細節

2. 瞭解jmeter的啟動,閱讀代碼是理解jmeter工作的最好方式


原創內容,轉載請說明出處。


分享到:


相關文章: