问题:使用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,影响性能的结果
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
文档获取方式:
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取