web_custom_request("CALL-H001I",
"EncType=text/xml; charset=UTF-8", 通過以上的兩點試驗,說明直接參數化的方法是行不通的,我們必須另找辦法。在LoadRunner中,為我們提供了一個字符串編碼轉換的函數lr_convert_string_encoding,用法如下:
int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
該函數有4個參數,含義如下:
sourceString:被轉換的源字符串。
fromEncoding:轉換前的字符編碼。
toEncoding:要轉換成為的字符編碼。
paramName:轉換后的目標字符串。
在本例中可以看到,我們需要把字符編碼轉換為UTF-8格式,因此用法如下:
lr_convert_string_encoding("汽車",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
這樣一來,就成功地完成了字符串的編碼轉換。此時我們就可以對"汽車"這個參數進行參數化,參數化的方法很簡單,地球人都知道!于是最終的腳本編碼看起來像這樣:
lr_convert_string_encoding("lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
完整的示例代碼如下: char string[5000]; char tmp[10]; lr_convert_string_encoding(lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str"); strcpy(tmp,lr_eval_string("{str}")); sprintf(string,"BodyBinary=CALL H001I 1 04 0 %s 01 鏆傛棤鍙風爜 1 1 1000000 1000000.00 A110102641122043#1 闇嶈景榫""x99 1 0 0 01 鍘﹂棬 100 A1 442000050 031 "r"n",tmp); web_custom_request("CALL-H001I", "EncType=text/xml; charset=UTF-8", string, LAST);
"BodyBinary=CALL H001I 1 04 0 浣忔埧 01 鏆傛棤鍙風爜 antorgan>1 1 1000000 1000000.00 A110102641122043#1 闇嶈景榫""""x99" " 1 0 0 01 鍘﹂棬 100 A1 442000050 031 "r"n" "", LAST);
從上面腳本的黑體部分可以看出,LoadRunner向服務器提交的請求body部分,輸入的中文字段被變成了諸如“浣忔埧”這樣的亂碼。遇到這樣的情況,相信大多數人和我最開始一樣,只能不加理會,直接點擊回放,然后我們很高興地發現,腳本回放成功了!這些亂碼是可以被LR識別的,而且到應用系統中查看運行的結果,也沒有問題,顯示的是正確的中文。但是且慢!先不要高興得太早,我們很快就會意識到:如果這個字段我們是需要進行參數化的怎么辦?我們應該如何造出這種亂碼的字呢?
首先,我們直接用正常的字去參數化,這里只舉其中的一個例子來說明,比如這個字段,我們用參數值“汽車”直接在腳本中替換“浣忔埧”,腳本回放失敗。然后就想到會不會是所有的中文字段都需要用才行呢?于是把所有的亂碼都用簡體字替換,腳本回放還是失敗。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/