Jmeter乱码问题解决方法
一、背景
在使用Jmeter做性能测试、接口自动化测试时,经常会碰到接口乱码的问题,乱码问题一般分为参数化时编码格式不统一问题,还有就是服务器响应编码的问题,如图所示。
二、接口响应内容编码问题
对于接口响应内容乱码导致的问题,一般可以通过修改Jmeter配置文件,或者对响应内容进行编码解决乱码问题,具体方法如下所示:
方法1、修改Jmeter配置文件
这种方法是修改Jmeter的配置文件,修改其默认编码,可以有效的解决乱码问题,但是不足之处是每次遇到都需要进行修改。
首先,找到Jmeter的安装目录(比如,C:\apache-jmeter-5.3\bin),再找到bin目录下的jmeter.properties
然后,右键点击编辑jmeter.properties
,搜索default.encoding
,把默认编码修改为项目所用编码,去掉“#”然后保存。
#sampleresult.default.encoding=ISO-8859-1
改为:
sampleresult.default.encoding=UTF-8
最好,再重启Jmeter。
方法2、修改接口响应编码
除了修改配置文件编码,还可以根据接口文档,配置接口编码的方式。
首先,在线程组中添加 BeanShell PostProcessor
后置处理器,如图所示:
然后,在 Script 中填写 prev.setDataEncoding("utf-8");
prev.setDataEncoding("utf-8");
注意:
1、具体编码以接口文档为准;
2、脚本编码符号需是英文符号;
最终,可以看到编码问题已解决。
注意:其实还存在某些接口,postman请求时,响应是正常,但是用jmeter请求,响应中文就会乱码,这可能是jmeter编码是根据操作系统编码导致。在国内中文windows系统的字符集编码是gbk(CP936),mac系统中文编码是utf-8。
三、接口请求参数编码问题
方法3、请求接口参数问题
对于接口参数包含中文内容,导致乱码的问题,一般在接口请求时,设置编码方式可以解决乱码问题,具体方法如下所示:
比如百度搜索时,参数中包含中文
请求接口参数显示乱码
然后,指定编码方式为utf-8
最终,请求参数显示为中文
方法4、CSV文件编码格式问题
由于参数化时,引入的csv文件中,csv文件编码方式与JMeter不一致时,会造导致中文乱码问题,此时需要修改配置文件。
找到Jmeter的安装目录(比如,C:\apache-jmeter-5.3\bin),再找到bin目录下的jmeter.properties
,找到 csvdataset.file.encoding_list
,在最新版本的jmeter中,默认已经打开并修改。
csvdataset.file.encoding_list=UTF-8|UTF-16|ISO-8859-15|US-ASCII
注意:
- 性能测试时,并不推荐采用csv进行参数化,推荐用txt,因为txt的性能更好,不容易出现乱码问题。由于txt文件默认编码是utf-8,而csv文件默认编码不是utf-8,这就导致使用csv时,容易出现乱码。
- 如果在工作中,出现jmeter读取csv文件内容时乱码,那很可能是csv文件编码格式与系统不一致,此时,用记事本打开csv文件,选择编码为utf-8保存。
四、参考
1、天气接口:http://www.weather.com.cn/data/sk/101010100.html
2、天气接口:https://www.cnblogs.com/wangjingblogs/p/3192953.html
3、unicode编码问题:https://www.lmlphp.com/user/56/article/item/11853/