本文為轉載微信公眾號文章,如作者發現后不願意,請聯系我進行刪除
原文鏈接:http://mp.weixin.qq.com/s?__biz=MjM5OTI2MTQ3OA==&mid=2652178311&idx=1&sn=9ac05bc08e688018b9df1681d17fdc43&chksm=bcdf83ce8ba80ad8177307c44f74d4acc5d5e247af69894986b2d3c72e1847cebee6117c4d4e&scene=0#rd
在jmeter工具的使用中,不管是測試接口還是調試性能時,查看結果樹必不可少,然而在查看響應數據時,其中的中文經常以Unicode的編碼形式顯示,如圖1。這樣不能直接查看到對應的中文是否為期望的結果,很不方便。

我找到一個曲線救國的方法,供大家參考。得到結果,如圖2。

操作步驟
第一步
在對應請求上添加后置處理器BeanShellPostProcessor,如圖3.


得到頁面,圖4。

圖4
第二步
在后置處理器BeanShellPostProcessor的script中貼入Unicode的轉中文的編碼,如圖5。

代碼如下:
//獲取響應代碼Unicode編碼的
String s2=newString(prev.getResponseData(),"UTF-8");
//---------------一下步驟為轉碼過程---------------
charaChar;
intlen= s2.length();
StringBufferoutBuffer=newStringBuffer(len);
for(int x =0; x <len;){
aChar= s2.charAt(x++);
if(aChar=='\\'){
aChar= s2.charAt(x++);
if(aChar=='u'){
int value =0;
for(inti=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:
thrownewIllegalArgumentException(
"Malformed \\uxxxx encoding.");}}
outBuffer.append((char) value);}else{
if(aChar=='t')
aChar='\t';
elseif(aChar=='r')
aChar='\r';
elseif(aChar=='n')
aChar='\n';
elseif(aChar=='f')
aChar='\f';
outBuffer.append(aChar);}}else
outBuffer.append(aChar);}
//-----------------以上內容為轉碼過程---------------------------
//將轉成中文的響應結果在查看結果樹中顯示
prev.setResponseData(outBuffer.toString());
第三步
正常調試並查看結果樹,發現之前的Unicode的編碼的中文,已經轉碼完畢。
<End>
原理
通過BeanShell內置變量prev,獲得響應數據,經過java程序編碼,把Unicode代碼轉成中文,最后修改查看結果樹中響應數據為轉換完畢的中文數據。
備注
1、 在性能測試前,請把這個后置處理器刪除,不然會大量消耗本機的內存和CPU,影響性能的結果
2、 以上代碼中的轉碼過程可以更改為更適合的代碼,但要注意的是Jmeter3.0這個版本依舊對Integer.parseint()方法不能很好支持,運行會報錯。
3、 關於獲取響應結果的變量值prev,具體API查看:
http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
