LoadRunner 如何设置关联
關(guān)于Loadrunner關(guān)聯(lián)
一、什么時(shí)候需要關(guān)聯(lián)
1.關(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)。
其實(shí)關(guān)聯(lián)也屬于一同特殊的參數(shù)化,只是與一般的參數(shù)化有些不同
一般的參數(shù)化的參數(shù)來(lái)源于一個(gè)文件、一個(gè)定義的table、通過(guò)sql寫的一個(gè)結(jié)果集等,但關(guān)聯(lián)所獲得的參數(shù)是服務(wù)器響應(yīng)請(qǐng)求所返回的一個(gè)符合條件的、動(dòng)態(tài)的值
2.什么時(shí)候需要做關(guān)聯(lián)
要想弄清這個(gè)問(wèn)題,我們首先要知道客戶端與服務(wù)器端的請(qǐng)求與響應(yīng)的過(guò)程
過(guò)程說(shuō)明:
客戶端發(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è)面,如果不正確則登錄失敗
在第一次錄制過(guò)程中l(wèi)oadrunner把這個(gè)值記錄了下來(lái),寫到了腳本中,但再次回放時(shí),客戶端發(fā)出同樣的請(qǐng)求,而服務(wù)器端再一次動(dòng)態(tài)的生成了Session Id,此時(shí)客戶端發(fā)出的請(qǐng)求就是錯(cuò)誤的,為了獲得這個(gè)動(dòng)態(tài)的Session Id我們這里用到了關(guān)聯(lián)。
所以我們得出結(jié)論:
當(dāng)客戶端的某個(gè)請(qǐng)求是隨著服務(wù)器端的相應(yīng)而動(dòng)態(tài)變化的時(shí)候,我們就需要用到關(guān)聯(lián)
當(dāng)然我們?cè)阡浿颇_本時(shí)應(yīng)該對(duì)測(cè)試的項(xiàng)目進(jìn)行適當(dāng)?shù)牧私?#xff0c;知道哪些請(qǐng)求需要用到服務(wù)器響應(yīng)的動(dòng)態(tài)值,如果我們不明確那些值需要做關(guān)聯(lián)的話,我們也可以將腳本錄制兩遍,通過(guò)對(duì)比腳本的方法來(lái)查找需要關(guān)聯(lián)的部分,但并不是說(shuō)兩次錄制的所有不同點(diǎn)都需要關(guān)聯(lián),這個(gè)要具體情況具體分析
二、自動(dòng)關(guān)聯(lián) loadrunner參數(shù)化
自動(dòng)關(guān)聯(lián)包含兩種機(jī)制:
一種是loadrunner通過(guò)對(duì)比錄制和回放時(shí)服務(wù)器響應(yīng)的不同,而提示用戶是否進(jìn)行關(guān)聯(lián),用戶可自己創(chuàng)建關(guān)聯(lián)規(guī)則,這個(gè)功能可以方便的使我們獲得需要關(guān)聯(lián)的部分,但同時(shí)也存在一定的問(wèn)題,如:自動(dòng)關(guān)聯(lián)所檢測(cè)到的關(guān)聯(lián)點(diǎn)不一定真的需要進(jìn)行關(guān)聯(lián),這要我們更具實(shí)際情況進(jìn)行判斷;有些需要關(guān)聯(lián)的動(dòng)態(tài)數(shù)據(jù)自動(dòng)關(guān)聯(lián)無(wú)法找到,這是就需要做手動(dòng)關(guān)聯(lián)
另一種是loadrunner自帶的自動(dòng)關(guān)聯(lián)規(guī)則,在錄制腳本時(shí),會(huì)根據(jù)這些規(guī)則自動(dòng)創(chuàng)建關(guān)聯(lián)
自動(dòng)關(guān)聯(lián)的步驟如下:
1.開(kāi)啟自動(dòng)關(guān)聯(lián)選項(xiàng)
剛才提到的兩種關(guān)聯(lián)機(jī)制,如果用戶想使用loadrunner自帶的關(guān)聯(lián)規(guī)則創(chuàng)建關(guān)聯(lián),那么需要在【Recording Options】>【Internet Protocol】>【Correlation】中啟用關(guān)聯(lián)規(guī)則,選中“Enable correlation during recording”,當(dāng)錄制這些應(yīng)用系統(tǒng)的腳本時(shí),VuGen會(huì)在腳本中自動(dòng)建立關(guān)聯(lián)。也可以在【Recording Options】>【Internet Protocol】>【Correlation】中添加關(guān)聯(lián)規(guī)則,達(dá)到自動(dòng)關(guān)聯(lián)的目的。
如果需要在回放腳本時(shí),loadrunner自動(dòng)檢測(cè)需要關(guān)聯(lián)的部分,那么需要在【Tools】>【general options】>【Correlation】中選中“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,當(dāng)回放玩腳本后,會(huì)彈出Scanactionfor correlation窗口,進(jìn)行關(guān)聯(lián)點(diǎn)的搜索
2.錄制腳本
錄制腳本的過(guò)程在這里就不多說(shuō)了
3.回放腳本
如果錄制的腳本存在需要做關(guān)聯(lián)的部分,那么在回放腳本時(shí)會(huì)出現(xiàn)錯(cuò)誤
4.系統(tǒng)自動(dòng)彈出檢測(cè)關(guān)聯(lián)對(duì)話框,或手動(dòng)啟動(dòng)關(guān)聯(lián)檢測(cè)對(duì)話框
如果選擇了【Tools】>【general options】>【Correlation】中的“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,那么在回放腳本后會(huì)自動(dòng)彈出“Scan action for correlation”窗口,點(diǎn)擊“yes”進(jìn)行自動(dòng)查找
如果沒(méi)有選擇上述設(shè)置,那么也可以按CTRL+F8啟動(dòng)關(guān)聯(lián)自動(dòng)搜索
5.查看系統(tǒng)檢測(cè)出的關(guān)聯(lián)點(diǎn)進(jìn)行關(guān)聯(lián)設(shè)置
如果在錄制和回放中存在差異,loadrunner會(huì)在“Correlation Results”中列出需要做關(guān)聯(lián)的內(nèi)容,用鼠標(biāo)點(diǎn)擊一條需要做關(guān)聯(lián)的內(nèi)容,點(diǎn)擊“Create Rule”,系統(tǒng)會(huì)顯示獲得當(dāng)前數(shù)據(jù)的規(guī)則,點(diǎn)擊“yes”,完成規(guī)則的創(chuàng)建,同時(shí)查看腳本中增加了一個(gè)web_reg_save_param函數(shù)
也可以點(diǎn)擊【Correlate】按鈕創(chuàng)建關(guān)聯(lián),一筆一筆做,或是按下【Correlate All】讓VuGen一次就對(duì)所有的數(shù)據(jù)建立關(guān)聯(lián)。
注意:由于Correlation Studio會(huì)找出所有有變動(dòng)的數(shù)據(jù),但是并不是所有的數(shù)據(jù)都需要做關(guān)聯(lián),所以不建議您直接用【Correlate All】。
6.回放腳本檢查關(guān)聯(lián)的正確性
創(chuàng)建好關(guān)聯(lián)后,回放腳本檢查關(guān)聯(lián)的正確性
三、手動(dòng)關(guān)聯(lián)
手動(dòng)關(guān)聯(lián)的過(guò)程大致如下:
第一步:錄制測(cè)試腳本,錄制二遍
第二步:使用WinDiff工具找出兩次腳本的不同,判斷是否需要進(jìn)行關(guān)聯(lián)
第三步:確定插入關(guān)聯(lián)的位置
第四步:在VIEW TREE中使用web_reg_save_param函數(shù)手動(dòng)建立關(guān)聯(lián)
第五步:將腳本中有用到關(guān)聯(lián)的數(shù)據(jù),用參數(shù)代替
第六步:驗(yàn)證關(guān)聯(lián)的正確性
下面詳細(xì)介紹:
第一步:錄制測(cè)試腳本,錄制二遍
這一步就不用多說(shuō)了,相同的操作,錄制兩份,分別保存
第二步:使用WinDiff工具協(xié)助找出需要關(guān)聯(lián)的數(shù)據(jù)
1. 在第二份腳本中,點(diǎn)選VuGen的【Tools】>【Compare with Vuser…】,并選擇第一份腳本。
2. 接著WinDiff會(huì)開(kāi)啟,同時(shí)顯示二份腳本,并顯示有差異的地方。WinDiff會(huì)以一整行黃色標(biāo)示有差異的腳本,并且以紅色的字體顯示真正差異的文字。(假如沒(méi)看到紅色字體,請(qǐng)點(diǎn)選【Options】>【View】>【Show Inline Differences】)。
查看二份腳本中差異的部份,每一個(gè)差異都可能是需要做關(guān)聯(lián)的地方。
注意:lr_thik_time部分的差異可以忽略
找到不同的部分后,復(fù)制,然后打開(kāi)Recording Log或是Generation Log,按Ctrl+F,在查找窗口中粘貼差異部分的內(nèi)容,點(diǎn)擊查找找到后,查看該部分的信息,確認(rèn)是客戶端的請(qǐng)求信息還是服務(wù)器回應(yīng)的信息
如果出現(xiàn)在
Request Header For Transaction With Id 3 Ended
這個(gè)部分,那證明是客戶端發(fā)出的請(qǐng)求,這里是不需要做關(guān)聯(lián)的
一般做的關(guān)聯(lián)都是出現(xiàn)在****** Response Header For Transaction With Id 7 ******和****** Response Body For Transaction With Id 7 ******中的部分。
在找到這個(gè)信息后,需要記錄如下信息:
a、記錄這個(gè)不同數(shù)據(jù)之前的內(nèi)容和之后的內(nèi)容
b、記錄這個(gè)不同數(shù)據(jù)出現(xiàn)的位置,是Header還是Body
第三步:確認(rèn)插入關(guān)聯(lián)的位置
我們?cè)?span style="text-decoration:underline;">日志中找到了兩次腳本的不同點(diǎn)的位置,根據(jù)這個(gè)位置,我們?cè)俅_定是在哪個(gè)請(qǐng)求之后產(chǎn)生的,也就是說(shuō)要定位發(fā)生不同點(diǎn)的response是由哪個(gè)request產(chǎn)生的,找到了這個(gè)請(qǐng)求的函數(shù)位置,我們就知道要往哪里做關(guān)聯(lián)了。
一般情況下關(guān)聯(lián)函數(shù)寫到發(fā)出請(qǐng)求的函數(shù)之前就可以了。
第四步:插入關(guān)聯(lián)函數(shù)
在插入關(guān)聯(lián)函數(shù)前,我們先介紹關(guān)聯(lián)函數(shù)web_reg_save_param
一個(gè)web_reg_save_param函數(shù)的例子:
web_reg_save_param ("sessionid",
"LB=Session_id:",
"RB=;",
"Search=Body",
LAST);
在這里我們只介紹幾個(gè)常用參數(shù)的含義
語(yǔ)法:int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
參數(shù)說(shuō)明:
ParamName: 存放得到的動(dòng)態(tài)內(nèi)容的參數(shù)名稱
list of Attributes: 其它屬性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。屬性值不分大小寫
LB( Left Boundary ) : 返回信息的左邊界字串。該屬性必須有,并且區(qū)分大小寫。
RB( Right Boundary ): 返回信息的右邊界字串。該屬性必須有,并且區(qū)分大小寫。
Search : 返回信息的查找范圍。可以是Headers,Body,Noresource,All(缺省)。該屬性質(zhì)可有可無(wú)。
那么如何插入該關(guān)聯(lián)函數(shù)呢?
1.將vugun切換到 view tree 模式下
2.在左邊的列表中,找到在上一步發(fā)出請(qǐng)求的函數(shù),點(diǎn)擊“右鍵”
選擇“insert before”
3.在彈出的“add step”對(duì)話框的“find function”中輸入“web_reg_save_param”,點(diǎn)擊“ok”
在“parameter name”中輸入,關(guān)聯(lián)函數(shù)的名稱,這里最好有含義,“sessionid”
在“l(fā)eft boundary”中輸入,剛才記錄下的不同點(diǎn)字符串的左面的幾個(gè)字符,定義左邊界,Session_id:
在“right boundary”中輸入,剛才記錄下的不同點(diǎn)字符串的右面的幾個(gè)字符,定義右邊界,;
在“search in ”中,選擇“body”
點(diǎn)擊“ok”
4.回到腳本編輯模式下,查看該函數(shù)插入是否正確
在發(fā)出請(qǐng)求的函數(shù)前應(yīng)該看到:
web_reg_save_param ("sessionid",
"LB=Session_id:",
"RB=;",
"Search=Body",
LAST);
第五步:將腳本中有用到關(guān)聯(lián)的數(shù)據(jù),用參數(shù)代替
如發(fā)出請(qǐng)求的參數(shù)如下,那么將原來(lái)服務(wù)器返回的動(dòng)態(tài)值使用{ sessionid } 來(lái)替換:
web_submit_form("login.php_2",
"Snapshot=t2.inf",
ITEMDATA,
"Name=login", "Value=wangjin", ENDITEM,
"Name=password", "Value=wangjin", ENDITEM,
"Name=Session_id","Value={ sessionid } ", ENDITEM,
"Name=Submit", "Value=Login", ENDITEM,
EXTRARES,
"URL=/media/images/border_bg_l.gif", ENDITEM,
"URL=/media/images/header_bg.gif", ENDITEM,
"URL=/media/images/th.gif", ENDITEM,
LAST);
第六步:驗(yàn)證關(guān)聯(lián)的正確性
回放腳本,驗(yàn)證關(guān)聯(lián)的正確性。
OK!!!
大功告成
轉(zhuǎn)載于:https://www.cnblogs.com/Darrenblog/p/7081136.html
總結(jié)
以上是生活随笔為你收集整理的LoadRunner 如何设置关联的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu增加(swap)交换分区
- 下一篇: Web存储机制—sessionStora