LoadRunner進行腳本開發時,經常會出現請求中包含中文或特殊符號(+、=等)導致請求失敗,或者響應報文中包含中文,輸出響應報文亂碼的情況,出現類似情況,可通過LR字符串編碼轉換函數lr_convert_string_encoding,將字符串轉換為需要的編碼方式;下面介紹LR字符轉編碼轉換函數和長江的編碼轉換處理;
lr_convert_string_encoding( const char *sourceString, const char *fromEncoding,const char *toEncoding, const char *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}"));