其他测试框架 使用 IntelliJ IDEA 编译 Jmeter5.3 源码 - 基于 Gradle,解决上传附件中文名称乱码与录制脚本中文乱码问题

Tester_谜城 · 2020年06月18日 · 最后由 Michael 回复于 2025年02月08日 · 12332 次阅读

附解决乱码重新打包的 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 博客首次发布,

共收到 14 条回复 时间 点赞

謝謝大佬,今天也是從 5.1 升級到 5.3 突然矇了下,現在正在看 gradle 打包的知識,成功運行

问下:com.github.bulenkov.darcula:darcula:e208efb96f70e4be9dc362fbb46f6e181ef501dd 这个包下载不了 这边有什么好的解决方案嘛?

对 yangrm 回复

下载不了一般两个原因
1、网络不通
2、资源有问题
第一个问题的话,优化下上网方式应该可以解决
第二个问题的话 ,无解
可以将下载地址在浏览器中访问下载试试看

对 Tester_谜城 回复

请问在引入 jmeter5.3 以后,会自动 download distributionUrl=http://services.gradle.org/distributions/gradle-6.3-all.zip ,是换成最新的 gradle6.7 还是直接用的 6.3 呢 ?
我下载一直报错 Unknown host 'services.gradle.org'. Please ensure the host name is correct. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.
谢谢

对 雅婷 回复

理论上是都可以的 ,下载不下来的话可以先本地安装配置好 gradle,再在 idea 中配置试试


我直接把最新的 5.4.1 导入 intellj,自动同步依赖后报这样的错,请问大佬有什么思路吗。编译 JMeter 真的抓破头了

对 郑超超 回复

可以试下把 gradle 的仓库配置成国内镜像仓库试试

大佬 我在代码导入 idea 的时候出现了下边的错误 不知道您遇到过没


对 云衫 回复

没有遇到过 看提示应该是 gradle 环境的问题


这应该是依赖下载失败吧,我第一次配了阿里云镜像,但是 checksum 时报错,后面把镜像去了就这样,能否分享下你们 gradle 是怎么配置的

对 郑超超 回复

你解决了没 我也遇到了,求分享

对 云衫 回复

这个简单,把对应的检查注释掉就 ok 了

对 mzy 回复

这个问题解决了吗,我也是这样问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。