loadrunner 關聯函式web_reg_save_param
當我們每次訪問網站都需要提交從伺服器獲取的動態文字時就會需要用到關聯函式,就好像每次乘坐火車票我們都需要用最新的火車票,如果用舊車票就不能做火車,如果我們採用了錄製時的舊動態碼如usersession再次訪問伺服器,跟伺服器通訊就是失敗,於是我們就需要用到web_reg_save_param函式將伺服器反饋的動態碼儲存成文字字串到一個引數,而這個函式必須要放在動作函式之前,如web_url,放在動作函式之後就無法取到想要的資料。
第一,函式各引數描述
int web_reg_save_param( const char *ParamName, <List of Attributes>, LAST );
1. ParaName:要建立的引數名,用來儲存獲取的動態文字
2. List of Attributes包含:
Convert:可選屬性
HTML_TO_URL:將html編碼的資料轉換為url編碼的資料格式
HTML_TO_TEXT:將html編碼的資料轉換為純文字格式
LB:左邊界,不支援正則表示式,如果沒有指定則從資料開始的字元算
NOTFOUND:
"Notfound=error",預設設定,當找不到邊界時觸發一個錯誤
"Notfound=warning",如果找不到邊界,觸發一個警告,繼續執行指令碼
兩種設定觸發的log message如下2條,一條顯示錯誤,一條顯示警告。
submit_login.c(6): 錯誤 -26377: 找不到所請求引數“usersession”的匹配項。請檢查響應資料中是否存在請求的邊界。此外,如果要儲存的資料超過 256 位元組,請使用 web_set_max_html_param_len 增加引數大小 [MsgId: MERR-26377]
submit_login.c(6): 通知: 儲存引數“usersession = ”。
submit_login.c(6): web_submit_data("login.pl") 最高嚴重級別為“ERROR”,795 個正文位元組,225 個標頭位元組 [MsgId: MMSG-26388]
submit_login.c(6): 警告 -26377: 找不到所請求引數“usersession”的匹配項。請檢查響應資料中是否存在請求的邊界。此外,如果要儲存的資料超過 256 位元組,請使用 web_set_max_html_param_len 增加引數大小 [MsgId: MWAR-26377] submit_login.c(6): 通知: 儲存引數“usersession = ”。 submit_login.c(6): web_submit_data("login.pl") 最高嚴重級別為“warning”,795 個正文位元組,225 個標頭位元組 [MsgId: MMSG-26388]
ORD:預設設定為1,把查詢到的第1個符合邊界設定的文字字串賦值給變數;如果設定為All則把所有找到的結果都賦值給變數,而變數則變成陣列型別
RB:右邊界,不支援正則表示式,如果為空則使用直到資料結束的所有字元作為邊界。
RelFrameID:可選,在GUI指令碼中不支援
SaveLen:可選,從指定偏移量中找到的值的子字串的長度,以便儲存到引數中。預設是-1,表示儲存到字串末尾
SaveOffset:可選,找到值的子字串的偏移量,以儲存到引數中。
以下查詢到的子字元“125219.910247064zttAQQQpVDDDDDDDDiztfpQQti”,如果設定"SaveLen=5","SaveOffset=8"則儲存到引數中的文字為10247。
Search:可選,查詢範圍,可能的值是header(只搜尋header)、Body(只搜尋Body資料,而不是Headers)、Noresource(只搜尋HTML Body,不包括所有header和資源)或all(搜尋Body、Headers和資源)。預設值為ALL
第二,實際應用
Loadrunner自帶的飛機訂票系統,在登陸的時候需要提供usersession,這是一個動態碼,每次訪問開啟網站都會不同,我們就用關聯函式來獲取這個值。
檢視網頁原始碼:
</style> <form method=post action=error.pl onSubmit='doJSFormSubmit1(this)' target=body> <input type=hidden name=userSession value=125220.012555691zttVAAtpDQfiDDDDDiztzpAczDHf> <table border=0><tr><td> </td>
找到userSession所在位置,在設定左右邊界時,最好先在原始碼中查詢一下看設定哪個邊界查詢結果為1,如設定左邊界為“Value=”,又邊界為“>“,取到的usersession不一定是我們想要的值。
Action() { web_reg_save_param("usersession","LB=userSession value=","RB=>",LAST); web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t2.inf", "Mode=HTML", LAST); web_reg_find("Text=Welcome, <b>llll</b>","SaveCount=count",LAST); web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t4.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={usersession}", ENDITEM, "Name=username", "Value=llll", ENDITEM, "Name=password", "Value=1234", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=43", ENDITEM, "Name=login.y", "Value=10", ENDITEM, LAST); if(atoi(lr_eval_string("{count}"))>0) lr_output_message("%s login pass",lr_eval_string("{username}")); else lr_output_message("%s login fail",lr_eval_string("{username}")); lr_think_time(4); web_url("welcome.pl", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Snapshot=t5.inf", "Mode=HTML", LAST); return 0; }