2020-10-23 JMeter乱码处理及Unicode转换

一、乱码处理

  1. 在对应测试计划中,添加后置处理器,添加 BeanShell PostProcessor


  2. 在Script中添加代码

//处理乱码
prev.setDataEncoding("utf-8");

二、Unicode转换中文显示


  1. 在对应测试计划中,添加后置处理器,添加 BeanShell PostProcessor,同上
  2. 在Script中添加代码
//获取响应代码Unicode编码的
String s = new String(prev.getResponseData(), "UTF-8");

//---------------以下步骤为转码过程---------------
char aChar;
int len = s.length();
StringBuffer outBuffer = new StringBuffer(len);
for(int x = 0; x < len;)
{
    aChar = s.charAt(x++);
    if(aChar == '\\')
    {
        aChar = s.charAt(x++);
        if(aChar == 'u')
        {
            int value = 0;
            for(int i = 0; i < 4; i++)
            {
                aChar = s.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());

3. 原理:通过BeanShell内置变量prev,获得响应数据,经过java程序编码,将Unicode转换为中文,最后再将查看结果树中响应数据的对应内容替换为转换结果

4. 备注
4.1. 在性能测试前,请把这个后置处理器删除,不然会大量消耗本机的内存和CPU,影响性能的结果
4.2. JMeter3.0版本对Integer.parseint()方法不能很好支持,运行可能报错
4.3. 关于获取响应结果的变量值prev,具体API查看:
http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。