1. 程式人生 > >jmeter 源碼修改返回值中文Unicode編碼問題

jmeter 源碼修改返回值中文Unicode編碼問題

argument gif sam data class http請求 sample listen alt

修改jmeter源碼,可能會對其他格式的responseData有一定影響,圖片或者其他

在 ListenerNotifier 類中找到 notifyListeners 方法,在其下面添加如下代碼:

技術分享圖片
 1                 if(res.getResult().getURL()!= null) {
 2                     try {
 3                         String s2 = new String(res.getResult().getResponseData(), "UTF-8");
 4                         char
aChar; 5 int len = s2.length(); 6 StringBuffer outBuffer = new StringBuffer(len); 7 for (int x = 0; x < len; ) { 8 aChar = s2.charAt(x++); 9 if (aChar == ‘\\‘) { 10 aChar = s2.charAt(x++);
11 if (aChar == ‘u‘) { 12 int value = 0; 13 for (int i = 0; i < 4; i++) { 14 aChar = s2.charAt(x++); 15 switch (aChar) {
16 case ‘0‘: 17 case ‘1‘: 18 case ‘2‘: 19 case ‘3‘: 20 case ‘4‘: 21 case ‘5‘: 22 case ‘6‘: 23 case ‘7‘: 24 case ‘8‘: 25 case ‘9‘: 26 value = (value << 4) + aChar - ‘0‘; 27 break; 28 case ‘a‘: 29 case ‘b‘: 30 case ‘c‘: 31 case ‘d‘: 32 case ‘e‘: 33 case ‘f‘: 34 value = (value << 4) + 10 + aChar - ‘a‘; 35 break; 36 case ‘A‘: 37 case ‘B‘: 38 case ‘C‘: 39 case ‘D‘: 40 case ‘E‘: 41 case ‘F‘: 42 value = (value << 4) + 10 + aChar - ‘A‘; 43 break; 44 default: 45 throw new IllegalArgumentException( 46 "Malformed \\uxxxx encoding."); 47 } 48 } 49 outBuffer.append((char) value); 50 } else { 51 if (aChar == ‘t‘) 52 aChar = ‘\t‘; 53 else if (aChar == ‘r‘) 54 aChar = ‘\r‘; 55 else if (aChar == ‘n‘) 56 aChar = ‘\n‘; 57 else if (aChar == ‘f‘) 58 aChar = ‘\f‘; 59 outBuffer.append(aChar); 60 } 61 } else 62 outBuffer.append(aChar); 63 } 64 //-----------------以上內容為轉碼過程--------------------------- 65 //將轉成中文的響應結果在查看結果樹中顯示 66 67 res.getResult().setResponseData(outBuffer.toString()); 68 String s3 = URLDecoder.decode(res.getResult().getURL().toString()); 69 try { 70 res.getResult().setURL(new URL(s3)); 71 } catch (MalformedURLException e) { 72 e.printStackTrace(); 73 } 74 75 76 } catch (UnsupportedEncodingException e) { 77 e.printStackTrace(); 78 } 79 }
View Code

在此處修改,保存的jtl文件、結果樹展示修改為中文,後續使用jtl數據做report時正常取值即可

只有http請求需要做此處理,因此在開始判斷了URL是否未NULL;

request請求中encode轉碼,未轉碼前部分顯示%5B等,轉碼後正常顯示為[""]

responseData數據Unicode編碼,轉碼前顯示/u0213,轉碼後正常顯示中文

responseData中文轉碼部分為網上使用beanshell添加部分代碼,由於不想每個請求都加shell,逐修改了源碼,目前還未發現其他影響。

PS:

1.需修改jmeter/bin/目錄下jmeter.properties文件中sampleresult.default.encoding=utf-8

2.結果樹返回值中文顯示"??"是亂碼,即sampleresult.default.encoding參數未修改,返回值顯示"/u023"這種為Unicode編碼

3.快捷解決Unicode編碼問題可參考添加beanshell:https://www.cnblogs.com/liuchunxiao83/p/6634524.html

jmeter 源碼修改返回值中文Unicode編碼問題