附解决乱码重新打包的 jar 包下载地址:
适用版本 5.3,2020-11-12 更新
https://download.csdn.net/download/qq_18298049/13107126
适用版本 5.4,2020-12-07 更新
https://download.csdn.net/download/qq_18298049/13460330

近期有少数小伙伴反应覆盖 jar 包后依然乱码的问题,经过调试发现由于未知原因导致 Jmeter 本身的业务逻辑未正确执行(怀疑环境兼容问题),修改了一版后解决了部分小伙伴的乱码问题(此版本会修改 Jmeter 原本的实现逻辑,暂不公开),若存在使用上面下载的包无法解决乱码问题,且有需要的请联系企鹅号 1005731757 获取新包

编写 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
在这里插入图片描述

此时录制中文乱码的问题已经得到解决,但上传文件文件名中文乱码的问题依旧会存在。
要解决上传文件文件名中文乱码的问题,需要找到 HTTPHC4Impl 类,此类位于 org.apache.jmeter.protocol.http.sampler 包下,打包后在 ApacheJMeter_http.jar 中,在以下位置添加

multipartEntityBuilder.setCharset(charset);
在这里插入图片描述

上传文件文件名中文乱码与录制脚本中文乱码问题全部解决,将修改后的文件编译打包(runGui 执行一下,然后源码 lib\ext 路径下自动打包生成 jar),替换原本的 lib\ext 目录下的 ApacheJMeter_http.jar 文件,上传文件时,需要勾选 “对 POST 使用 multipart / form-data” 和 “与浏览器兼容的头” 选项,并设置编码方式

在这里插入图片描述
注:此文在本人 CSDN 博客首次发布,


↙↙↙阅读原文可查看相关链接,并与作者交流