天天看點

LR傳參中文亂碼問題解決方法

  在錄制,增強,整合LoadRunner腳本時,遇到了中文亂碼問題。在此記錄一下中文亂碼問題的解決辦法。

  一、錄制回放中文亂碼

  我錄制登陸的腳本,使用者名中出現中文,回放的時候總是提示登陸失敗。如下圖:

LR傳參中文亂碼問題解決方法

  

圖1 LR回放中文亂碼

  解決中文亂碼可以在錄制的時候在Virtual User Gen的 Tools->Recoding Options -> Advanced -> Support charset -> UTF-8。重新錄制後中文亂碼問題得到解決。

  二、整合腳本中文亂碼

  錄制增強(參數化,關聯,檢查點,事務)腳本後決定将幾個腳本整合在一起。于是建立了一個空的腳本,将登陸退出公用操作分别放在vuser_init和vuser_end中,其他操作放在各自的Action中。整理完成回放後又出現中文亂碼。為解決這個問題,最關鍵的是要把本地GBK編碼的漢字轉換成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:轉換後的目标字元串。

  實踐一:

  lr_convert_string_encoding("登陸賬号",LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "Account");

  web_submit_data("login.quick",

  ……

  "Name=account", "Value={Account}", ENDITEM,

  ……

  LAST);

  回放腳本的時候依然報錯。檢視lr_convert_string_encoding的解釋,它會在其轉換的字元串末尾加上\x00。在C語言中\X00是一個字元串的結束,而正是這個\x00的存在導緻了腳本回放失敗。

 

     實踐二:

char tmp[100];

lr_convert_string_encoding("登陸賬号",LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "Account");

strcpy(tmp,lr_eval_string("{Account}"));

lr_save_string(tmp,"Account");

web_submit_data("login.quick",

……

"Name=account", "Value={Account}", ENDITEM,

……

LAST);

 

通過strcpy和lr_save_string的處理屏蔽\x00的影響,測試結果正常

列印亂碼為中文:

LR傳參中文亂碼問題解決方法

Action()

{

     lr_convert_string_encoding(

  lr_eval_string("涓夌淮绌洪棿"),

  LR_ENC_UTF8,

  LR_ENC_SYSTEM_LOCALE,

  "strcn" );

 lr_log_message("亂碼對應的中文是 %s",lr_eval_string("{strcn}"));

return 0;

}

繼續閱讀