Action() { //演示需要的一些變量,提前聲明 char *name = "yezi_zh"; char *age = "30"; char *work = "engin"; char *cuntry = "中國"; char my_param[1000]; // 數組的大小根據自己拼接的字符串長度來定義,否則會出現內存錯誤 /**************************** * 需要的參數串為一下格式,這里只對漢字進行URL編碼,英文字符不轉為url編碼, * name=yezi&age=30&work=engin&china=%e4%b8%ad%e5%9b%bd * *************************/ //漢字編碼轉換為url編碼 EncodePlainToURL(cuntry,cuntry_urlencode); // 使用 srpintf 格式化需要傳遞的字符串 sprintf(my_param,"name=%s&age=%s&work=%s&cuntry=%s",name,age,work,cuntry_urlencode); //打印看看格式化的是否是需要的 lr_message(my_param); // 將已經存好變量的字符串轉換成loadrunner使用的參數 lr_save_string(my_param,"loadrunner_param"); //調用參數,和普通參數使用沒區別 web_url("function","url=http://ip:port/function?{loadrunner_param}",LAST); return 0; } //定義一個轉換url字符的函數 void EncodePlainToURL(char *input_param, const char * output_param) { //將字符串編碼轉為UTF-8 lr_convert_string_encoding(input_param, LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "strUTF8"); //去掉C數組后面的null終止符 lr_save_string(lr_eval_string("{strUTF8}"), output_param); //將UTF-8字符串URL encode web_convert_param(output_param, "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST); }
回放腳本
Virtual User Script started at : 2017/6/30 10:19:53 Starting action vuser_init. Web Turbo Replay of LoadRunner 12.0.0 for Windows 8; build 1362 (Feb 2 2014 23:20:03) [MsgId: MMSG-27143] Run mode: HTML [MsgId: MMSG-26993] Run-Time Settings file: "D:\zyh\VuGen\UrlEncoding\\default.cfg" [MsgId: MMSG-27141] Ending action vuser_init. Running Vuser... Starting iteration 1. Maximum number of concurrent connections per server: 2 [MsgId: MMSG-26000] Starting action Action. Action.c(34): Notify: Saving Parameter "strUTF8 = 涓浗\x00". Action.c(36): Notify: Parameter Substitution: parameter "strUTF8" = "涓浗\x00" Action.c(36): Notify: Saving Parameter "cuntry_urlencode = 涓浗". Action.c(38): web_convert_param started [MsgId: MMSG-26355] Action.c(38): Notify: Saving Parameter "cuntry_urlencode = %E4%B8%AD%E5%9B%BD". Action.c(38): web_convert_param was successful [MsgId: MMSG-26392] Action.c(16): Notify: Parameter Substitution: parameter "cuntry_urlencode" = "%E4%B8%AD%E5%9B%BD" name=yezi_zh&age=30&work=engin&cuntry=1.559239E-2714B80X1.138D80P-767D1.293305E-2315BBD Action.c(20): Notify: Saving Parameter "loadrunner_param = name=yezi_zh&age=30&work=engin&cuntry=%E4%B8%AD%E5%9B%BD". The param is name=yezi_zh&age=30&work=engin&cuntry=%E4%B8%AD%E5%9B%BD Action.c(26): Notify: Parameter Substitution: parameter "loadrunner_param" = "name=yezi_zh&age=30&work=engin&cuntry=%E4%B8%AD%E5%9B%BD" The param is name=yezi_zh&age=30&work=engin&cuntry=%E4%B8%AD%E5%9B%BD Ending action Action. Ending iteration 1. Ending Vuser... Starting action vuser_end. Ending action vuser_end. Vuser Terminated.
注:本案例需要一些c語言基礎與loadrunner基礎。
如果需要所有的字符串轉化為url編碼,需要調整代碼的執行順序。
Action() { //演示需要的一些變量,提前聲明 char *name = "yezi_zh"; char *age = "30"; char *work = "engin"; char *cuntry = "中國"; char my_param[1000]; // 數組的大小根據自己拼接的字符串長度來定義,否則會出現內存錯誤 /**************************** * 需要的參數串為一下格式 *name%3dyezi_zh%26age%3d30%26work%3dengin%26cuntry%3d%e4%b8%ad%e5%9b%bd * *************************/ // 使用 srpintf 格式化需要傳遞的字符串 sprintf(my_param,"name=%s&age=%s&work=%s&cuntry=%s",name,age,work,cuntry); //打印看看格式化的是否是需要的 lr_message(my_param); //參數轉換為url編碼 EncodePlainToURL(my_param,"loadrunner_urlencode"); //調用參數,和普通參數使用沒區別 web_url("function","url=http://ip:port/function?{loadrunner_urlencode}",LAST); lr_message("The param is %s",my_param); lr_message("The param is %s",lr_eval_string("{loadrunner_urlencode}")); return 0; }
回訪腳本
Virtual User Script started at : 2017/6/30 10:34:29 Starting action vuser_init. Web Turbo Replay of LoadRunner 12.0.0 for Windows 8; build 1362 (Feb 2 2014 23:20:03) [MsgId: MMSG-27143] Run mode: HTML [MsgId: MMSG-26993] Run-Time Settings file: "D:\zyh\VuGen\UrlEncoding\\default.cfg" [MsgId: MMSG-27141] Ending action vuser_init. Running Vuser... Starting iteration 1. Maximum number of concurrent connections per server: 2 [MsgId: MMSG-26000] Starting action Action. name=yezi_zh&age=30&work=engin&cuntry=中國 Action.c(36): Notify: Saving Parameter "strUTF8 = name=yezi_zh&age=30&work=engin&cuntry=涓浗\x00". Action.c(38): Notify: Parameter Substitution: parameter "strUTF8" = "name=yezi_zh&age=30&work=engin&cuntry=涓浗\x00" Action.c(38): Notify: Saving Parameter "loadrunner_urlencode = name=yezi_zh&age=30&work=engin&cuntry=涓浗". Action.c(40): web_convert_param started [MsgId: MMSG-26355] Action.c(40): Notify: Saving Parameter "loadrunner_urlencode = name%3Dyezi_zh%26age%3D30%26work%3Dengin%26cuntry%3D%E4%B8%AD%E5%9B%BD". Action.c(40): web_convert_param was successful [MsgId: MMSG-26392] The param is name=yezi_zh&age=30&work=engin&cuntry=中國 Action.c(28): Notify: Parameter Substitution: parameter "loadrunner_urlencode" = "name%3Dyezi_zh%26age%3D30%26work%3Dengin%26cuntry%3D%E4%B8%AD%E5%9B%BD" The param is name%3Dyezi_zh%26age%3D30%26work%3Dengin%26cuntry%3D%E4%B8%AD%E5%9B%BD Ending action Action. Ending iteration 1. Ending Vuser... Starting action vuser_end. Ending action vuser_end. Vuser Terminated.
代碼只說明原理,具體使用根據數據來源來替換。
文中的變量在實際使用場景中多是關聯獲取的動態參數,結合參數的使用來使用本代碼.
本文沒寫結合實際場景的參數使用,具有一定項目經驗的學習者可以提升工具的使用熟練度。
建議:對於Loadrunner的使用,多使用F1查看幫助文檔;
規定:在loadrunner中使用 c語言的變量,一定要在函數一開始定義,否則會出錯(和內存有關的)。數組的定義需要根據實際情況來定義,c語言對內存的控制很嚴格,養成嚴謹的編碼習慣很重要。