jmeter 源码修改返回值中文Unicode编码问题
修改jmeter源码,可能会对其他格式的responseData有一定影响,图片或者其他
在 ListenerNotifier 类中找到 notifyListeners 方法,在其下面添加如下代码:
                 if(res.getResult().getURL()!= null) {
                     try {
                         String s2 = new String(res.getResult().getResponseData(), "UTF-8");
                         char aChar;
                         int len = s2.length();
                         StringBuffer outBuffer = new StringBuffer(len);
                         for (int x = 0; x < len; ) {
                             aChar = s2.charAt(x++);
                             if (aChar == '\\') {
                                 aChar = s2.charAt(x++);
                                 if (aChar == 'u') {
                                     int value = 0;
                                     for (int i = 0; i < 4; i++) {
                                         aChar = s2.charAt(x++);
                                         switch (aChar) {
                                             case '0':
                                             case '1':
                                             case '2':
                                             case '3':
                                             case '4':
                                             case '5':
                                             case '6':
                                             case '7':
                                             case '8':
                                             case '9':
                                                 value = (value << 4) + aChar - '0';
                                                 break;
                                             case 'a':
                                             case 'b':
                                             case 'c':
                                             case 'd':
                                             case 'e':
                                             case 'f':
                                                 value = (value << 4) + 10 + aChar - 'a';
                                                 break;
                                             case 'A':
                                             case 'B':
                                             case 'C':
                                             case 'D':
                                             case 'E':
                                             case 'F':
                                                 value = (value << 4) + 10 + aChar - 'A';
                                                 break;
                                             default:
                                                 throw new IllegalArgumentException(
                                                         "Malformed   \\uxxxx  encoding.");
                                         }
                                     }
                                     outBuffer.append((char) value);
                                 } else {
                                     if (aChar == 't')
                                         aChar = '\t';
                                     else if (aChar == 'r')
                                         aChar = '\r';
                                     else if (aChar == 'n')
                                         aChar = '\n';
                                     else if (aChar == 'f')
                                         aChar = '\f';
                                     outBuffer.append(aChar);
                                 }
                             } else
                                 outBuffer.append(aChar);
                         }
 //-----------------以上内容为转码过程---------------------------
 //将转成中文的响应结果在查看结果树中显示
                         res.getResult().setResponseData(outBuffer.toString());
                         String s3 = URLDecoder.decode(res.getResult().getURL().toString());
                         try {
                             res.getResult().setURL(new URL(s3));
                         } catch (MalformedURLException e) {
                             e.printStackTrace();
                         }
                     } catch (UnsupportedEncodingException e) {
                         e.printStackTrace();
                     }
                 }
在此处修改,保存的jtl文件、结果树展示修改为中文,后续使用jtl数据做report时正常取值即可
只有http请求需要做此处理,因此在开始判断了URL是否未NULL;
request请求中encode转码,未转码前部分显示%5B等,转码后正常显示为[""]
responseData数据Unicode编码,转码前显示/u0213,转码后正常显示中文
responseData中文转码部分为网上使用beanshell添加部分代码,由于不想每个请求都加shell,逐修改了源码,目前还未发现其他影响。
PS:
1.需修改jmeter/bin/目录下jmeter.properties文件中sampleresult.default.encoding=utf-8
2.结果树返回值中文显示"??"是乱码,即sampleresult.default.encoding参数未修改,返回值显示"/u023"这种为Unicode编码
3.快捷解决Unicode编码问题可参考添加beanshell:https://www.cnblogs.com/liuchunxiao83/p/6634524.html
jmeter 源码修改返回值中文Unicode编码问题的更多相关文章
- Mybatis源码分析--返回值ResultType和ResultMap
		
这一篇博客我们来介绍一下Mybatis执行sql语句返回的结果值的到实体对象的映射机制.首先ResultType和ResultMap的使用方式是不同的. ResultType的使用方式: result ...
 - Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮
		
前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar 在某些特殊定制的版本中要求 ...
 - Android6.0 源码修改之 Contacts应用
		
一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...
 - Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
		
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
 - eclipse编译Jmeter源码
		
1.在apache官网下载源码和安装包 http://jmeter.apache.org/ 2. 解压 解压安装包和源码包, 将安装包apache-jmeter-3.3 里lib ...
 - jmeter源码环境(IDEA)
		
jmeter源码环境(IDEA) jmeter 1. 本地环境 2. 下载源码 3. 下载依赖包 4. 导入IDEA 5. 运行 1. 本地环境 Windows7 java版本:1.8.0_191 a ...
 - Jmeter如何使用数据库返回值实践
		
Jmeter如何使用数据库返回值实践 最近使用Jmeter针对产品做性能测试,测试内容是要模拟300并发用户审批休假申请时的性能.由于每个申请人的主管不同,且会根据不同的休假类型,会有一级审批或者二级 ...
 - vue打包时,assets目录 和static目录下文件的处理区别(nodeModule中插件源码修改后,打包后的文件应放在static目录)
		
为了回答这个问题,我们首先需要了解Webpack如何处理静态资产.在 *.vue 组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL.例如 ...
 - JMeter源码导入到Intellij IDEA (八)
		
亲测:jmeter源码导入Intellij IDEA,导入,编译,运行! 一.环境:windows10操作系统,jdk1.8,Intellij IDEA 2018.3,jmeter5.0 下载jmet ...
 
随机推荐
- 1024 科学计数法 (20 分)C与Java
			
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...
 - Django框架之数据库ORM框架
			
首先,我来介绍一下什么是ORM框架: O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮 ...
 - vue根据选择的月份动态展示当前月份的每一天并展示每一天所对应的星期几
			
我们在开发过程中所遇到的所有的奇奇怪怪的交互美其名曰用(奇)户(葩)体(需)验(求),而产品所谓的良好的交互效果,在我等开发人员眼里不值一提.不屑一顾.讨厌至极! 对于这样的需求,我通常都是: 但胳膊 ...
 - JavaScript面向对象 实例与原型
			
JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new function function f () {} 这个函数 会继承 Func ...
 - python列表的 + 、* 、in 、 not  in 、 len() 、 max() 、 min()
			
+ 列表拼接 first_list = [1,2,3] + ['a',5] # + 将列表拼接 print(first_list) # [1, 2, 3, 'a', 5] * 列表与数字n相乘 : ...
 - Openstack之七:实现基于桥接的内外网络
			
一.在控制端进行配置网络 #启动实例文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/launch-instance.html# ...
 - 机器学习-特征工程-Missing value和Category encoding
			
好了,大家现在进入到机器学习中的一块核心部分了,那就是特征工程,洋文叫做Feature Engineering.实际在机器学习的应用中,真正用于算法的结构分析和部署的工作只占很少的一部分,相反,用于特 ...
 - 一个命令解决linux重启nginx就丢失pid文件问题
			
sudo nginx -c /etc/nginx/nginx.conf
 - jqGrid以setGridParam方式postData,包含历史数据的问题
			
系统在使用jqGrid时,如果某些页面的查询项是复选框,后台是数组接收的,就会出现传值不正确问题. 1.项目中某查询页面存在的复选框:待处理S1,正在处理S2,已处理S3: 使用jqGrid提交查询数 ...
 - 关于爬虫的日常复习(9)—— 实战:分析Ajax抓取今日头条接拍美图