使用 IntelliJ IDEA 編譯 Jmeter5.3 原始碼-基於 Gradle,解決上傳附件中文名稱亂碼與錄製指令碼中文亂碼問題
編寫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
相關文章
- LoadRunner錄製指令碼亂碼問題指令碼
- Gradle 編譯警告亂碼問題Gradle編譯
- shell指令碼中文註釋亂碼問題(解決)指令碼
- Javamail 中附件中文名字亂碼祥解 (轉)JavaAI
- IntelliJ IDEA 12.1.4 解決中文亂碼IntelliJIdea
- 解決中文亂碼問題
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- Java 解決中文亂碼問題Java
- RDSSQLSERVER解決中文亂碼問題SQLServer
- 解決MySQL中文亂碼問題MySql
- Spring MVC 中文編碼亂碼解決SpringMVC
- 解決plsql中中文亂碼問題SQL
- springmvc 解決中文亂碼問題SpringMVC
- js解決url中文亂碼問題JS
- 解決Intellij IDEA中執行緩慢的問題,tomcat控制檯列印亂碼問題,國際化亂碼配置檔案亂碼解決IntelliJIdeaTomcat
- js解決url傳引數中文亂碼問題JS
- ajax使用url傳遞中文引數亂碼問題解決
- HttpClient多檔案上傳程式碼及普通引數中文亂碼問題解決HTTPclient
- maven下載原始碼,解決中文註釋為亂碼的問題Maven原始碼
- Struts2 URL 傳參,中文亂碼問題解決
- java中解決request中文亂碼問題Java
- SpringMvc解決Restful中文亂碼問題SpringMVCREST
- python 中文亂碼問題解決方案Python
- 讀mysql中文亂碼問題解決方法MySql
- DES加密中文亂碼問題的解決加密
- Jenkins Git 中文亂碼問題解決JenkinsGit
- CentOS中文亂碼問題的解決方法CentOS
- idea控制檯中文亂碼的問題Idea
- confluence上傳檔案附件預覽亂碼問題
- JSP中文亂碼問題終極解決方案(上)JS
- mysql5.7.22設定中文編碼-解決亂碼問題LinuxMySqlLinux
- EasyUI 中文亂碼問題UI
- MSSQL中文亂碼問題SQL
- Java 中文 亂碼問題Java
- 解決SSH亂碼問題
- 解決使用Git Bash亂碼問題Git
- RHEL中文亂碼解決