原因分析
在使用Jmeter做接口测试过程中看结果树时发现里面的response响应,有不同环境或项目测试过程时有乱码现象发生,在出现这类问题进不必紧张,有果必有因,经调查了解出现此类问题原因由于Jmeter的结果处理编码与被测试对象的编码不一致导致:
- Jmeter的sampler请求结果的默认编码方式为:ISO-8859-1(不支持中文);
- 被测对象的结果编码可能是gbk、UTF-8;
解决方法一-使用后置控制器"BeanShell PostProcessor"
使用后置控制器"BeanShell PostProcessor"来动态修改结果处理编码,使之与被测对象保持一致;
- 优点:灵活,随时修改;
- 缺点:要根据不同的对象设置不同的编码,
- 适用范围:测试不同的公司项目,有些公司喜欢GBK,有些事UTF-8。
- 操作方法:
- 右键点击所测试的线程组,点“添加”->"后置处理器"->"BeanShell PostProcessor",
- 在BeanShell PostProcessor Script(variables:ctx vars props prev data log)框中输入以下内容:
prev.setDataEncoding("utf-8")
- 点保存,重新发请求,看响应结果已经解决乱码问题,如下图所示:
解决方法二-修改Jmeter的默认编码
通过修改改jmeter配置文件Jmeter.properties下sampleresult.default.encoding值
- 优点:一次修改,长久使用;
- 缺点:如果要测试不同的公司项目,需要多次修改,较麻烦;
- 使用范围:测试本公司的项目,毕竟同一个公司的项目基本上都是使用同一个编码的;
- 操作方法:
- 进入%JmeterHome%/bin,找到Jmeter.properties, 搜索“sampleresult”,找到sampler的编码设置代码;
- 修改编码为“UTF-8”,去掉“#”(注释符号),保存设置,并重启Jmeter;
- 验证是否解决,如下图(无BeanShell PostProcessor),已成功处理;