问题:使用jmeter测试接口,返回响应数据汉字显示为Unicode
解决结果:
解决过程:
1.修改jmeter配置文件中的默认编码
在Jmeter的安装路径下打开bin文件夹下的jmeter.properties文件,搜索关键词default.encoding定位到语句【#sampleresult.default.encoding=ISO-8859-1】。
将注释#删掉,并改成utf-8编码,如下:
2.添加后置处理器BeanShellPostProcessor和转码代码
添加后置处理器BeanShellPostProcessor,在Script中附上转码代码
转码代码如下:
-
复制
-
//获取响应代码Unicode编码的
-
String s2=new String(prev.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);}
-
prev.setResponseData(outBuffer.toString());
PS:
1.原理:通过BeanShell内置变量prev,获得响应数据,经过java程序编码,把Unicode代码转成中文,最后修改查看结果树中响应数据为转换完毕的中文
2.在性能试前,请把这个后置处理器删除,不然会大量消耗本机的内存和CPU,影响性能的结果
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。