使用 IntelliJ IDEA 編譯 Jmeter5.3 原始碼-基於 Gradle,解決上傳附件中文名稱亂碼與錄製指令碼中文亂碼問題

Tester_謎城發表於2020-06-18

編寫Jmeter指令碼時,總是遇到上傳附件中文亂碼問題與錄製指令碼中文亂碼問題,網上查詢了各種辦法

比如:
jmeter.properties檔案中設定sampleresult.default.encoding=UTF-8;
HTTP請求中設定內容編碼(content encoding)為UTF-8;
勾選“對POST使用multipart / form-data”和“與瀏覽器相容的頭”等

然而,並沒有什麼用,該亂碼還是亂碼,四處搜尋查詢,發現被此問題困擾的小夥伴很多,但似乎都沒有得到有效解決。

於是想到從原始碼解決問題,百度一下,美滋滋,很多編譯原始碼的教程。

BUT !!!仔細一看,全是對3.X、4.X版本的,基於ant的版本,而Jmeter5.3是使用的Gradle,網上找到的教程全然無用,一下從天堂到地獄有木有。

但是問題還是要解決的,經過一天的不懈努力,終於讓Jmeter5.3版本的原始碼在IDEA上順利的執行起來了,中途踩坑無數,掉髮數十根,本著為廣大同胞朋友的髮際線考慮的原則,特發帖記錄,以下進入正題。

1 下載原始碼

下載地址:https://jmeter.apache.org/download_jmeter.cgi
在這裡插入圖片描述

原始碼下載完成後,解壓到指定目錄,解壓後目錄結構如下,注意,沒有網上很多教程中說的兩個eclipse檔案,也沒有ant的build.xml,5.3是基於Gradle的
在這裡插入圖片描述

2 匯入原始碼到IntelliJ IDEA

解壓完成後,開啟IDEA,然後File--》Open開啟解壓的原始碼,選擇bin目錄的上級目錄開啟
在這裡插入圖片描述

開啟後會在右下角彈出找到Gradle build script,此時,點選Import Gradle Project,IDEA會自動根據配置檔案去下載所需要的jar以及Gradle等支援軟體,由於一開始基於Gradle的環境都沒有以及網速等原因,在這裡我經歷了差不多一個半小時的漫長等待,等得想放棄的時候終於各種依賴下載並配置完成了。
在這裡插入圖片描述

3 執行原始碼

依賴自動下載完成後,興致勃勃的build了一下專案,由於一開始使用的JDK 13的緣故,專案編譯報錯了,又是一番折騰查資料,最後換成JDK8問題解決,build成功。

於是開始第一次嘗試從Jmeter的啟動類 NewDriver類中啟動Jmeter,結果報錯了,問題如下
在這裡插入圖片描述

仔細一看,Jmeter home的路徑不對,目錄路徑少了一層,經過排查發現tmpDir路徑取錯了,需要將
tmpDir = userDir.getAbsoluteFile().getParent(); 改為 tmpDir = userDir.getAbsolutePath();
在這裡插入圖片描述

改完之後,開始嘗試第二次從啟動類 NewDriver類中啟動Jmeter,結果美滋滋,又報錯了

在這裡插入圖片描述
java.lang.ClassNotFoundException: org.apache.jmeter.JMeter,缺少ApacheJMeter.jar以及lib目錄中啟動Jmeter必須的jar,這些包在我們使用的Jmeter的bin目錄、lib下是有的,但原始碼中需要自己生成,以前的ant版本中執行build.xml即可,這Gradle的要咋整呢,此時lib目錄如下,啥也沒有,一貧如洗。

在這裡插入圖片描述

百思不得其解,為解決此問題又一次掉髮數百根,四處查閱資料,還是沒什麼結果,於是開始針對Gradle做一次次嘗試,終於在頭髮掉光之前,找到了解決方案,執行developement下的 runGui,執行完成後就看到我們熟悉的Jmeter主頁面了,關閉執行的Jmeter頁面,檢查一下lib目錄,各種依賴jar已經自動生成,至此,可以愉快的開始原始碼改造之旅了。

在這裡插入圖片描述

在這裡插入圖片描述

4 修改編碼方式,解決上傳、錄製指令碼中文亂碼問題

找到RequestViewHTTP類,此類位於org.apache.jmeter.protocol.http.visualizers包下,打包後在ApacheJMeter_http.jar中,修改編碼方式為UTF_8
在這裡插入圖片描述

找到SampleResult類,此類位於org.apache.jmeter.samplers包中,打包後在ApacheJMeter_core.jar中,修改編碼方式為UTF_8
在這裡插入圖片描述
至此,錄製中文亂碼的問題已經得到解決,但上傳檔案檔名中文亂碼的問題依舊會存在,要解決上傳檔案檔名中文亂碼的問題,需要找到HTTPHC4Impl類,此類位於org.apache.jmeter.protocol.http.sampler包下,打包後在ApacheJMeter_http.jar中,在以下位置新增

if (haveContentEncoding){
multipartEntityBuilder.setCharset(Charset.forName(contentEncoding));
}
在這裡插入圖片描述
至此,上傳檔案檔名中文亂碼與錄製指令碼中文亂碼問題全部解決,將修改後的檔案編譯打包,替換原本的lib\ext目錄下的
ApacheJMeter_http.jar 和 ApacheJMeter_core.jar 兩個檔案後,就可以正常使用啦,從此告別亂碼煩惱

注:此文在本人CSDN部落格首次釋出,
附解決亂碼重新打包的jar包下載地址:
https://download.csdn.net/download/qq_18298049/12530927

相關文章