1. 程式人生 > 實用技巧 >LoadRunner字元編碼轉換

LoadRunner字元編碼轉換

LoadRunner進行指令碼開發時,經常會出現請求中包含中文或特殊符號(+、=等)導致請求失敗,或者響應報文中包含中文,輸出響應報文亂碼的情況,出現類似情況,可通過LR字串編碼轉換函式lr_convert_string_encoding,將字串轉換為需要的編碼方式;下面介紹LR字元轉編碼轉換函式和長江的編碼轉換處理;

1、LR編碼轉換函式lr_convert_string_encoding

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"

2、url編碼

在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}"));