LoadRunner教程之手動(dòng)關(guān)聯(lián)詳解
一、關(guān)聯(lián)的含義:
關(guān)聯(lián)(correlation):在腳本回放過(guò)程中,客戶端發(fā)出請(qǐng)求,通過(guò)關(guān)聯(lián)函數(shù)所定義的左右邊界值(也就是關(guān)聯(lián)規(guī)則),在服務(wù)器所響應(yīng)的內(nèi)容中查找,得到相應(yīng)的值,已變量的形式替換錄制時(shí)的靜態(tài)值,從而向服務(wù)器發(fā)出正確的請(qǐng)求,這種動(dòng)態(tài)獲得服務(wù)器響應(yīng)內(nèi)容的方法被稱作關(guān)聯(lián)。
二、關(guān)聯(lián)的過(guò)程:
以登陸場(chǎng)景為例,客戶端發(fā)出獲得登錄頁(yè)面的請(qǐng)求,服務(wù)器端得到該請(qǐng)求后,返回登錄頁(yè)面,同時(shí)動(dòng)態(tài)生成一個(gè)Session Id,當(dāng)用戶輸入用戶名密碼,請(qǐng)求登錄時(shí),該Session Id同時(shí)被發(fā)送到服務(wù)器端,如果該Session Id在當(dāng)前會(huì)話中有效,那么返回登錄成功的頁(yè)面,如果不正確則登錄失?。辉趌oadrunner第一次錄制過(guò)程中會(huì)把這個(gè)值記錄了下來(lái),但回放時(shí),客戶端發(fā)出同樣的請(qǐng)求,而服務(wù)器端再一次動(dòng)態(tài)的生成了新的Session Id,與Loadrunner中錄制的Session Id不匹配,此時(shí)客戶端發(fā)出的請(qǐng)求就會(huì)失敗,為了獲得這個(gè)動(dòng)態(tài)的Session Id就用到了關(guān)聯(lián)。
三、關(guān)聯(lián)的使用:
LR中對(duì)參數(shù)關(guān)聯(lián)分兩種:
1、自動(dòng)關(guān)聯(lián),比如在錄制好后的腳本中,按CTRL+F8,掃描關(guān)聯(lián),將掃描出來(lái)的內(nèi)容關(guān)聯(lián)即可;如果LR找不到關(guān)聯(lián)時(shí),就需要手動(dòng)進(jìn)行關(guān)聯(lián)。
2、手工關(guān)聯(lián)函數(shù)web_reg_save_param,運(yùn)行腳本時(shí),web_reg_save_param 函數(shù)將掃描所訪問(wèn)的后續(xù) HTML 頁(yè)。如果指定左邊界和右邊界,將搜索這些邊界之間的文本。將匹配的內(nèi)容保存在web_reg_save_param中定義的參數(shù)中。
實(shí)現(xiàn)過(guò)程如下:
web_reg_save_param("outFlightVal",
"LB=outboundFlight value=", "RB= checked >", LAST );
web_submit_form("reservations.pl",
"Snapshot=t4.inf",
ITEMDATA,
"Name=depart", "Value=London", ENDITEM,
"Name=departDate", "Value=11/20/2003", ENDITEM,
"Name=arrive", "Value=New York", ENDITEM,
"Name=returnDate", "Value=11/21/2003", ENDITEM,
"Name=numPassengers", "Value=1", ENDITEM,
"Name=roundtrip", "Value=<OFF>", ENDITEM,
"Name=seatPref", "Value=None", ENDITEM,
"Name=seatType", "Value=Coach", ENDITEM,
"Name=findFlights.x", "Value=83", ENDITEM,
"Name=findFlights.y", "Value=16", ENDITEM,
LAST );
web_submit_form("reservations.pl_2",
"Snapshot=t5.inf",
ITEMDATA,
"Name=outboundFlight", "Value={outFlightVal}", ENDITEM,
"Name=reserveFlights.x", "Value=92", ENDITEM,
"Name=reserveFlights.y", "Value=10", ENDITEM,
LAST );
定義了搜索范圍LB左邊界值和RB右邊界值,將匹配的內(nèi)容存放在outFlightVal中,在web_submit_form表單中進(jìn)行引用。
實(shí)例說(shuō)明:
以下為服務(wù)響應(yīng)表單,對(duì)返回的動(dòng)態(tài)值orderId進(jìn)行關(guān)聯(lián):
<input type="hidden" id="orderId" name="orderId"
value="f28958249e141e62312d855ce73252d3"/>
實(shí)現(xiàn)如下:
web_reg_save_param("orderId",
"LB=name="orderId" value="",
"RB="",
LAST);
在服務(wù)響應(yīng)表單中找左邊界是:name="orderId" value="
右邊界是:"
將匹配到的結(jié)果賦給orderId。
之后就可以在后續(xù)流程中盡情的調(diào)用關(guān)聯(lián)值了。
另外:web_reg_save_param要放在web_submit_form等提交表單函數(shù)之前。
web_reg_save_param必須在獲取返回值的操作前面注冊(cè),在獲取返回值的操作后面使用。
保存參數(shù)最大不能超過(guò)256字節(jié),如果超過(guò)256字節(jié)請(qǐng)使用int web_set_max_html_param_len(const char *length )函數(shù)擴(kuò)大參數(shù)保存范圍。
例如:web_set_max_html_param_len ("1024"); //擴(kuò)大參數(shù)最大保存范圍為1024字節(jié)。
本文轉(zhuǎn)自(spasvo.com)