一、乱码处理
-
在对应测试计划中,添加后置处理器,添加 BeanShell PostProcessor
在Script中添加代码
//处理乱码
prev.setDataEncoding("utf-8");

二、Unicode转换中文显示

- 在对应测试计划中,添加后置处理器,添加 BeanShell PostProcessor,同上
- 在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
