本文爲轉載微信公衆號文章,如做者發現後不肯意,請聯繫我進行刪除 html
原文連接:http://mp.weixin.qq.com/s?__biz=MjM5OTI2MTQ3OA==&mid=2652178311&idx=1&sn=9ac05bc08e688018b9df1681d17fdc43&chksm=bcdf83ce8ba80ad8177307c44f74d4acc5d5e247af69894986b2d3c72e1847cebee6117c4d4e&scene=0#rdjava
在jmeter工具的使用中,無論是測試接口仍是調試性能時,查看結果樹必不可少,然而在查看響應數據時,其中的中文常常以Unicode的編碼形式顯示,如圖1。這樣不能直接查看到對應的中文是否爲指望的結果,很不方便。apache
我找到一個曲線救國的方法,供你們參考。獲得結果,如圖2。api
在對應請求上添加後置處理器BeanShellPostProcessor,如圖3.微信
獲得頁面,圖4。微信開發
圖4app
在後置處理器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代碼轉成中文,最後修改查看結果樹中響應數據爲轉換完畢的中文數據。
一、 在性能測試前,請把這個後置處理器刪除,否則會大量消耗本機的內存和CPU,影響性能的結果
二、 以上代碼中的轉碼過程能夠更改成更適合的代碼,但要注意的是Jmeter3.0這個版本依舊對Integer.parseint()方法不能很好支持,運行會報錯。
三、 關於獲取響應結果的變量值prev,具體API查看:
http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html