0
点赞
收藏
分享

微信扫一扫

Jmeter解决上传附件中文名乱码问题

Jonescy 2022-02-10 阅读 165

1.问题描述

在编写jmeter接口脚本时,上传的附件名称,如果有中文名,附件名称会显示乱码。因为是国外开源代码嘛,对中文有时确实不太友好。我尝试了很多方法都失败了,比如说:

买了c**n会员,下载尝试了别人修改后的多个ApacheJMeter_http.jar,替换到apache-jmeter-5.4.3\lib\ext路径下;

在http请求中把Content encoding设置成UTF-8;

勾选“对POST使用multipart / form-data” 和 “与浏览器兼容的头”选项;apache-jmeter-5.4.3\bin下的jmeter.properties,设置sampleresult.default.encoding=UTF-8;

网上改源码地方全部都是HTTPHC4Impl类中添加对字符编码设置成UTF-8,multipartEntityBuilder.setCharset(charset);

以上方法通通都失败了,上传的附件名依然还是有乱码。改HTTPHC4Impl类源码打了log,发现上传附件的接口根本没有执行HTTPHC4Impl类,没有日志输出。网上的各种方法都尝试过了全失败了,上传附件中文名还是乱码。啊~ 有点累而不爱了~

所以我准备下载jmeter全部源码,对jmeter源码进行debug,找到问题所在,进行二次开发。妥妥的~ 

2.下载jmeter 源码

 我用的jmeter版本是5.4.3,所以在官网https://jmeter.apache.org/download_jmeter.cgi 下载5.4.3版本的源码。Windows环境下,下载.zip的。下载到本地后进行解压。

3.将源码导入idea

 解压源码后,在idea中File→Open,打开已经解压的源码项目。

   因为5.4.3版本的源码构建环境集成了Gradle,所以open源码项目后,需要等一会,Gradle会自动去build,我大概等了30分钟左右。build完成。

4.运行jmeter源码

网上说,运行developement下的 runGui,我真的找了好久runGui? 第一次用Gradle构建。近在眼前,idea的右边,Jmeter→developement→runGui,双击运行runGui弹出jmeter界面后,运行成功。

 

5.Debug源码,修改乱码问题

      起初按照网上说的,上传附件名中文乱码是修改HTTPHC4Impl.java,在下图中位置加上设置编码为utf-8的代码。但是debug发现,运行上传文件的接口,根本没有走HTTPHC4Impl.java的代码,所以完全没有用。

 在runGui后的jmeter界面中,编写上传的接口脚本,通过jmeter日志,定位到相关代码,打断点,点击debug按钮去追踪。

点击运行按钮,执行上传附件接口,通过Debug去追踪。  通过Debug发现,org.apache.jmeter.protocol.http.sampler下PostWriter.java类中setHeaders方法里,这一步取到的附件名称中文没有乱码。

但是以后的出现的附件中文名就是乱码了。 

 

啊,离真相越来越近了,原来是在拼装http的header时候,对附件文件名进行了解码,解码呢,用的是ISO-8859-1编码,那文件名是中文的话,那肯定是乱码咯。

 

将解码用ISO改成UTF-8。out.write(value.getBytes(ENCODING));这句代码改成:out.write(value.getBytes(StandardCharsets.UTF_8.name())); 如下图所示:

PS:注意在http请求体中,Content encoding需要设置成UTF-8

 

重新执行runGui,编译代码,运行上传附件接口看下效果。 

 

 附件中文名终于不是乱码了,ok,问题解决~  接下来就是讲编译好的jar包,替换到jmeter的lib\ext路径下。

6.编译jar包,放到Jmeter路径下

 运行developement下的 runGui后,会自动编译代码,打jar包放在lib下。我们改了org.apache.jmeter.protocol.http.sampler下PostWriter.java类代码,编译到ApacheJMeter_http.jar中。复制源码工程的apache-jmeter-5.4.3\lib\ext下的ApacheJMeter_http.jar。

把复制后的jar包ApacheJMeter_http.jar ,放在jmeter的安装路径apache-jmeter-5.4.3\lib\ext下。替换原有的ApacheJMeter_http.jar。重启jmeter后,看下效果。 

PS:注意在http请求体中,Content encoding需要设置成UTF-8 

 

 

替换了jar包后,附件中文名称乱码问题解决了~ oh~ 撒花,bye~

 

举报

相关推荐

0 条评论