LoadRunner字元編碼轉換
LoadRunner進行指令碼開發時,經常會出現請求中包含中文或特殊符號(+、=等)導致請求失敗,或者響應報文中包含中文,輸出響應報文亂碼的情況,出現類似情況,可通過LR字串編碼轉換函式lr_convert_string_encoding,將字串轉換為需要的編碼方式;下面介紹LR字元轉編碼轉換函式和長江的編碼轉換處理;
lr_convert_string_encoding( const char *sourceString, const char *fromEncoding,const char *toEncoding, constchar *paramName); #sourceString:被轉換的源字串。 #fromEncoding:轉換前的字元編碼。 #toEncoding:要轉換成為的字元編碼。 #paramName:轉換後的目標字串。
字元編碼方式:
編碼方式 | 編碼值 |
---|---|
LR_ENC_SYSTEM_LOCALE | NULL |
LR_ENC_UTF8 | "utf-8" |
UR_ENC_UNICODE | "ucs-2" |
在url請求訊息中,請求引數包含中文或特殊符號,不能被正確識別,需要進行url編碼;
url編碼前,請求url內容:http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile=yzk7kd+fsjj==
url編碼後,請求url內容:http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile=yzk7kd%2Bfsjj%3D%3D
將特殊符號+號和=號進行了編碼處理;
url編碼操作包含3步:
1)呼叫lr_convert_string_encoding函式,將mobile引數內容由LR本身的無編碼格式轉換為UTF-8編碼格式;該引數包含的字串有字串結束識別符號NULL;
2)呼叫lr_save_string函式,將轉換後字串的NULL識別符號去掉;
3)呼叫web_convert_param函式,將引數編碼型別由PLAIN型別轉換為URL型別;
程式碼如下:
//將包含中文或特殊字元的字串儲存到引數mobile中,然後將mobile引數編碼轉換為UTF8,儲存到name1引數中 lr_convert_string_encoding(lr_eval_string("{mobile}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"name1"); //將name1引數字串結尾識別符號去掉,儲存到變數param1中 lr_save_string(lr_eval_string("{name1}"),"param1"); //將param1編碼型別由PLAIN轉換為URL型別 web_convert_param("param1","SourceEncoding=PLAIN","TargetEncoding=URL",LAST); //通過{param1}呼叫編碼後的引數 web_customer_request("request", "URL=http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile={param1}", "Method=POST", "Body=", LAST);
3、響應報文亂碼轉碼
http請求報錯,響應報文中中文顯示亂碼,為了方便定位問題,需要將響應報文中文進行轉碼,使其能夠正常顯示;
響應報文亂碼轉碼分為2步:
1)呼叫web_reg_save_param函式,將響應報文儲存到引數中;
2)呼叫lr_convert_string_encoding函式,將引數由UTF-8編碼轉換為LR編碼(LR_ENC_SYSTEM_LOCALE);
程式碼如下:
//獲取響應報文 web_reg_save_param("response", "LB=", "RB=", LAST); //呼叫http請求 web_customer_request("request", "URL=http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile={param1}", "Method=POST", "Body=", LAST); //響應報文中文轉碼(UTF8轉換為LR本地編碼LR_ENC_SYSTEM_LOCAL) lr_convert_string_encoding(lr_eval_string("{response}"), "LR_ENC_UTF8", "LR_ENC_SYSTEM_LOCALE", "str"); //輸出轉換後的響應內容 lr_error_message("response:%s",lr_eval_string("{str}"));