由于个人在JMeter 3.0的实际应用中,脚本中的Test Plan/Sampler等元件命名都没有使用中文,所以在之前介绍Dashboard Report特性的博客(原文戳这里))成文时,没有提到关于中文的问题。之后有朋友反馈,Sampler名称为中文时,生成的报告中展示为乱码,自己测试,确实如此。
  如图,脚本包含两个命名为中文的Sampler:
  执行测试后,生成的Dashboard Report图表中文乱码:
  于是通过查看官方文档和源码,找到原因并进行了解决,原打算直接追加到之前那篇文章,但考虑到篇幅过长,于是决定新成一文,然后在之前的文章中补充链接。
  二. 解决方案
  先上解决方案:修改JMeter report模块读取数据源码中的字符集设置为UTF-8,编译后替换到 JMETER_HOME\lib\ext\ApacheJMeter_core.jar 内,这里会分享一个我处理好的一个jar包,但建议自己亲自动手:
  基础方案
  1、在官网 下载页面 下载 apache-jmeter-3.0_src.zip
  2、相关源码位置:
  apache-jmeter-3.0/src/core/org/apache/jmeter/report/core/CsvSampleReader.java
  3、将 CsvSampleReader 的 CHARST 赋值为 UTF-8
  private static final String CHARSET = StandardCharsets.UTF_8.displayName();
  4、编译该文件,用得到的 .class 文件替换 JMETER_HOME\lib\ext\ApacheJMeter_core.jar 内的原文件。当然也可以直接对源码重新编译打包,但会比较费时。
  效果如图:
推荐方案
  关于设置字符编码,一个更推荐的方案是设置默认字符编码为UTF-8,同时支持.properties配置项。JMeter读写结果文件(xml/csv)的字符编码配置项是 ./bin/saveservice.properties 文件内的 _file_encoding ,由 org.apache.jmeter.save.SaveService.getFileEncoding(String dflt) 读取,当没有在配置相中指定时,将使用方法的入参作为默认编码,这里我们传入UFT-8作为默认格式,因此将基础方案中的步骤3做如下变更:
  private static final String CHARSET = SaveService.getFileEncoding(StandardCharsets.UTF_8.displayName());
  编译后替换即可。saveservice.properties文件的_file_encoding默认已配置为UTF-8,多数情况下,我们不需要修改。
  文件分享
  分享的文件和jar包是使用推荐方案进行处理。可以取用class文件自己替换进本地的ApacheJMeter_core.jar,也可以直接下载分享的jar包替换本地对应jar包。
  · 单独的CsvSampleReader.class文件: https://pan.baidu.com/s/1bo10QnX ,提取码 ee68
  · 处理完毕的ApacheJMeter_core.jar: https://pan.baidu.com/s/1mhKLwgw ,提取码 id7h
  注:github上可以看到jmeter的trunk分支已经将dashboard report的默认字符编码更改为UFT-8,本文的推荐方案即是官方更新中的实现方式。只是目前官方还没有发布更新,所以自己动手。
  三. 成因分析
  Dashboard Report特性生成HTML图表,使用JMeter记录测试结果数据的文件 (命令行执行时 -l 指定的文件,也可在图形界面的监听器中指定,作为基础知识不在这里展开) 作为数据源,Apache FreeMarker作为模板引擎,默认的模板位于JMETER_HOME\bin\report-template。
  · 查看官方说明,确认没有关于HTML报告字符编码的配置项。
  · 查看数据源文件,确定文件格式为UTF-8,文件中的中文正常可读,排除数据源存在问题的可能。
  · 查看生成的结果文件,主要数据在 指定路径/content/js/graph.js ,任选一个图表数据,查看其标签的值(“label”:” * “),显示为乱码,排除js解析成乱码的可能。
  · 此时首先想到Java文件读取过程问题,从官方发布的源码包查看源码 src/core/org/apache/jmeter/report/core/CsvSampleReader ,发现代码中字符编码指定为ISO8859-1:
package org.apache.jmeter.report.core;
//次要内容略...
public class CsvSampleReader implements Closeable{
//次要内容略...
private static final String CHARSET = "ISO8859-1";
//次要内容略...
private CsvSampleReader(File inputFile, SampleMetadata metadata, char separator, boolean useSaveSampleCfg) {
if (!(inputFile.isFile() && inputFile.canRead())) {
throw new IllegalArgumentException(inputFile.getAbsolutePath()
+ " does not exist or is not readable");
}
this.file = inputFile;
try {
this.reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), CHARSET), BUF_SIZE);
} catch (FileNotFoundException | UnsupportedEncodingException ex) {
throw new SampleException("Could not create file reader !", ex);
}
}
}
  至此,问题原因得以确定。
 

【转载】JMeter3.0图形化HTML报告中文乱码问题处理的更多相关文章

  1. JMeter3.0(三十八)图形化HTML报告中文乱码问题处理(转载)

    转载自 http://www.cnblogs.com/yangxia-test 由于个人在JMeter 3.0的实际应用中,脚本中的Test Plan/Sampler等元件命名都没有使用中文,所以在之 ...

  2. 【原创】jmeter3.0在beanshell中输入中文乱码以及字体大小的更改

    我使用的是最新的jmeter3.0版本,新建一个beanshell sampler,在里面输入中文,发现显示的是乱码,而且字体非常小,看着吃力,调研了一下,可以在bin/jmeter.properti ...

  3. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  4. 生成图形化html报告

    生成图形化html报告: 1.从cmd 进入执行测试文件 2.执行该命令:jmeter -n -t <test JMX file> -l <test log file> -e ...

  5. JMeter3.2生成图形化HTML报告

    JMeter3.0引入了Dashboard Report,用于生成HTML页面格式图形化报告的扩展模块. 该模块支持通过两种方式生成多维度图形化测试报告: 在JMeter性能测试结束时,自动生成本次测 ...

  6. 接口测试框架开发(二):extentreports报告中文乱码问题

    转载:http://www.cnblogs.com/lin-123/p/7146935.html 问题:中文乱码 问题解决:eclipse设置编码为utf-8 结果:

  7. [转载] linux下打开windows txt文件中文乱码问题

    原文链接 在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操作系统的中文压缩方式不同,在win ...

  8. jmeter+ant+jenkins+mac 报告优化(三) 使用命令行执行jmeter方式生成多维度的图形化HTML报告

    1.在构建中填写如下命令: 2.start.sh文件的内容 cd /Applications/apache-jmeter-3.0/bin/ CURTIME=`date +%Y%m%d%H%M` ./j ...

  9. Solr6.6.0 用 SimplePostTool索引文件 中文乱码

    在用SimplePostTool工具导入CSV文件,文件内容如下: 启动solr ,利用命令导入:java -Dtype=text/csv -Dc=solr_test -jar post.jar .. ...

随机推荐

  1. MongoDB的导入导出(7)

    导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项: -h host   主机 --port port    端口 -u username 用户名 -p pas ...

  2. error C2144: 语法错误:“int”的前面应有“;”

    百度网上都说是中文输入的问题. 但我的错误是函数声明时后面忘了加 :真是要死......

  3. android 无限循环的viewpager

    思路 例如存在 A -B -C 需要在viewpager滑动时无限循环 1.我们可以设计 C' A B C A'  C'与C相同,A'与A相同 2.滑动到A'时,则index回到1 3.滑动到C'时, ...

  4. 浅谈SQLiteOpenHelper之onCreate例子

    哈喽大家好!如果你感觉SQLiteOpenHelper不懂的可以看一下.  onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法 ...

  5. 四则运算appNABCD模型

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  6. 1.0 iOS中的事件

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”   在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: UIK ...

  7. jQuery 一些神奇的选择器写法

    ======================================================================== =========================== ...

  8. phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识

    16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结  一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...

  9. 进制转换( C++字符数组 )

    注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...

  10. 【新手学Python】一、基础篇

    由于以前处理数据用Matlab和C,最近要处理大量文本文件,用C写实在是太繁琐,鉴于Python的强大文本处理能力,以及其在Deep Learning上有着很大优势,本人打算从即日起学习Python, ...