LR腳本開發(fā)之參數(shù)化之關(guān)聯(lián)

1.1 關(guān)聯(lián)
1.1.1 什么是關(guān)聯(lián)
所謂的關(guān)聯(lián)(correlation)就是把腳本中某些寫死的(hard-coded)數(shù)據(jù),轉(zhuǎn)變成是擷取自服務(wù)器發(fā)送的葵蒂、動(dòng)態(tài)的潜叛、每次都不一樣的數(shù)據(jù)虹钮。在腳本回放過程中翼雀,客戶端發(fā)出請(qǐng)求,通過關(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ù)來源于一個(gè)文件、一個(gè)定義的table忍啸、通過sql寫的一個(gè)結(jié)果集等仰坦,但關(guān)聯(lián)所獲得的參數(shù)是服務(wù)器響應(yīng)請(qǐng)求所返回的一個(gè)符合條件的、動(dòng)態(tài)的值计雌。

例如:我們?nèi)プw機(jī)悄晃,登機(jī)之前要檢票(機(jī)票信息相對(duì)固定),通過可以登機(jī)凿滤。過了幾天拿著同一機(jī)票再去登機(jī)妈橄,自然不能登機(jī)(機(jī)票信息已過期)。那怎樣才能順利登機(jī)翁脆?可以偽造機(jī)票信息…這里我們通過收集別人返回的信息(機(jī)票)偽造機(jī)票眷细,從而滿足登機(jī)的驗(yàn)證策略。在腳本中也有類似的情況

1.1.2 為什么要關(guān)聯(lián)
LR錄制的腳本只是忠實(shí)記錄了所有從客戶端發(fā)送到服務(wù)器端的數(shù)據(jù)鹃祖,并在腳本回放的時(shí)候按照錄制的順序?qū)浿葡聛淼臄?shù)據(jù)重新發(fā)送出去。但是普舆,實(shí)際上許多的系統(tǒng)都采用SessionID或SeqID等方法來標(biāo)識(shí)不同的任務(wù)和數(shù)據(jù)包恬口,應(yīng)用在每次運(yùn)行時(shí)發(fā)送的數(shù)據(jù)并不完全相同。所以沼侣,為了讓腳本能夠支持測試的需求祖能,就必然要用某種機(jī)制對(duì)腳本的數(shù)據(jù)進(jìn)行出來了《曷澹總之一句話:通過關(guān)聯(lián)可以在測試中保持動(dòng)態(tài)值养铸。

當(dāng)錄制腳本時(shí)雁芙,VuGen會(huì)攔截client端(瀏覽器)與server端(網(wǎng)站服務(wù)器)之間的對(duì)話,并且通通記錄下來钞螟,產(chǎn)生腳本兔甘。在VuGen的Recording Log中,您可以找到瀏覽器與服務(wù)器之間所有的對(duì)話鳞滨,包含通訊內(nèi)容洞焙、日期、時(shí)間拯啦、瀏覽器的請(qǐng)求澡匪、服務(wù)器的響應(yīng)內(nèi)容等等。腳本和Recording Log最大的差別在于褒链,腳本只記錄了client端要對(duì)server端所說的話唁情,而Recording Log則是完整紀(jì)錄二者的對(duì)話。

201608261472142762119758.jpg LR腳本開發(fā)之參數(shù)化之關(guān)聯(lián) Tester 第1張

當(dāng)執(zhí)行腳本時(shí)甫匹,您可以把VuGen想象成是一個(gè)演員甸鸟,它偽裝成瀏覽器,然后根據(jù)腳本赛惩,把當(dāng)初真的瀏覽器所說過的話哀墓,再對(duì)網(wǎng)站伺服器重新說一遍,VuGen企圖騙過服務(wù)器喷兼,讓服務(wù)器以為它就是當(dāng)初的瀏覽器篮绰,然后把網(wǎng)站內(nèi)容傳送給VuGen。
所以紀(jì)錄在腳本中要跟服務(wù)器所說的話季惯,完全與當(dāng)初錄制時(shí)所說的一樣吠各,是寫死的(hard-coded)。這樣的作法在遇到有些比較聰明的服務(wù)器時(shí)勉抓,還是會(huì)失效贾漏。這時(shí)就需要透過「關(guān)聯(lián)(correlation)」的做法來讓VuGen可以再次成功地騙過服務(wù)器。
舉一個(gè)常見的例子藕筋,剛剛提到有些比較聰明的服務(wù)器纵散,這些服務(wù)器在每個(gè)瀏覽器第一次跟它要數(shù)據(jù)時(shí),都會(huì)在數(shù)據(jù)中夾帶一個(gè)唯一的辨識(shí)碼隐圾,接下來就會(huì)利用這個(gè)辨識(shí)碼來辨識(shí)跟它要數(shù)據(jù)的是不是同一個(gè)瀏覽器伍掀。一般稱這個(gè)辨識(shí)碼為Session ID。對(duì)于每個(gè)新的交易暇藏,服務(wù)器都會(huì)產(chǎn)生新的Session ID給瀏覽器蜜笤。這也就是為什么執(zhí)行腳本會(huì)失敗的原因,因?yàn)閂uGen還是用舊的Session ID向服務(wù)器要數(shù)據(jù)盐碱,服務(wù)器會(huì)發(fā)現(xiàn)這個(gè)Session ID是失效的或是它根本不認(rèn)識(shí)這個(gè)Session ID把兔,當(dāng)然就不會(huì)傳送正確的網(wǎng)頁數(shù)據(jù)給VuGen了沪伙。
下面的圖示說明了這樣的情形:
當(dāng)錄制腳本時(shí),瀏覽器送出網(wǎng)頁A的請(qǐng)求县好,服務(wù)器將網(wǎng)頁A的內(nèi)容傳送給瀏覽器围橡,并且夾帶了一個(gè)ID=123的數(shù)據(jù),當(dāng)瀏覽器再送出網(wǎng)頁B的情求時(shí)聘惦,這時(shí)就要用到ID=123的數(shù)據(jù)某饰,服務(wù)器才會(huì)認(rèn)為這是合法的請(qǐng)求,并且把網(wǎng)頁B的內(nèi)容送回給瀏覽器善绎。
在執(zhí)行腳本時(shí)會(huì)發(fā)生什么狀況黔漂?瀏覽器再送出網(wǎng)頁B的請(qǐng)求時(shí),用的還是當(dāng)初錄制的ID=123的數(shù)據(jù)禀酱,而不是用服務(wù)器新給的ID=456炬守,整個(gè)腳本的執(zhí)行就會(huì)失敗。
201608261472142763497261.jpg LR腳本開發(fā)之參數(shù)化之關(guān)聯(lián) Tester 第2張

要對(duì)付這種服務(wù)器剂跟,我們必須想辦法找出這個(gè)Session ID到底是什么减途、位于何處,然后把它擷取下來曹洽,放到某個(gè)參數(shù)中鳍置,并且取代掉腳本中有用到Session ID的部分,這樣就可以成功騙過服務(wù)器送淆,正確地完成整個(gè)交易了税产。
1.1.3 何時(shí)關(guān)聯(lián)

  1. 登陸操作
  2. 業(yè)務(wù)需要(即后面的操作需要用到前面服務(wù)器返回的動(dòng)態(tài)數(shù)據(jù))
  1. 情況一
  2. 情況二
  3. 情況三
    1.1.4 如何關(guān)聯(lián)
    1.1.4.1 關(guān)聯(lián)的一般步驟
  1. 從服務(wù)器返回的數(shù)據(jù)中選取需要進(jìn)行關(guān)聯(lián)的數(shù)據(jù),界定他的左邊界和右邊界
    舉例:


    201608261472142763938685.jpg LR腳本開發(fā)之參數(shù)化之關(guān)聯(lián) Tester 第3張

    查看服務(wù)器返回信息發(fā)現(xiàn):8a3c341d5252c1a8015252d205470001是需要進(jìn)行關(guān)聯(lián)的值偷崩,則開始設(shè)置這個(gè)值的左右邊界辟拷,左邊界:resultObject":" ;右邊界:"
    注意:左邊界和右邊界要有獨(dú)特性阐斜,能讓系統(tǒng)直接定位到8a3c341d5252c1a8015252d205470001值衫冻,而不是定位到其他數(shù)值

  2. 將該數(shù)據(jù)存入腳本的一個(gè)參數(shù)中
  3. 將腳本中需要使用該數(shù)據(jù)的地方用參數(shù)來替換。
    Tip:對(duì)于web來說谒出,一般會(huì)用一個(gè)hidden 的 field存放隅俘。所以可以在服務(wù)器返回的記錄查找該字段值。
    1.1.4.2 手動(dòng)關(guān)聯(lián)
    1.1.4.2.1 手動(dòng)關(guān)聯(lián)原理
    手動(dòng)關(guān)聯(lián)是關(guān)聯(lián)應(yīng)用中的最有效手段笤喳,通過手動(dòng)關(guān)聯(lián)函數(shù) web_reg_save_param()將想要的字符串保存到一個(gè)參數(shù)中为居。
    1.1.4.2.2 手動(dòng)關(guān)聯(lián)的注意事項(xiàng)
    web_reg_save_param函數(shù)一定要放在獲取服務(wù)器返回值的請(qǐng)求前面,中間不能有其他的腳本莉测,否則,將會(huì)獲取不到服務(wù)器返回值唧喉,如示例所示捣卤。
    如要輸出服務(wù)器返回值忍抽,也只能在請(qǐng)求的后面輸出,不能放在請(qǐng)求的前面董朝。

web_reg_save_param("TfFarmerDraftId",
"LB=farmerDraftId:"", "RB="", LAST ); ;

web_custom_request("tfFarmerDraftManager.getTfFarmerDraftById.dwr_2",
"URL=http://10.188.180.231/tlcr/dwr/call/plaincall/tfFarmerDraftManager.getTfFarmerDraftById.dwr",
"Method=POST",
"Resource=0",
"RecContentType=text/javascript",
"Referer=http://10.188.180.231/tlcr/tfFarmerDrafts.do?method=draftNormalFarmer&bsm=false",
"Snapshot=t175.inf",
"Mode=HTML",
"EncType=text/plain",
"Body=callCount=1\npage=/tlcr/tfFarmerDrafts.do?method=draftNormalFarmer&bsm=false\nhttpSessionId=\nscriptSessionId=529CFA712B612149367BF8EE3F9CB8A6615\nc0-scriptName=tfFarmerDraftManager\nc0-methodName=getTfFarmerDraftById\nc0-id=0\nc0-param0=string:8a3c34673ac05aad013ad87a93d00013\nbatchId=22\n",
LAST);

lr_error_message("TfFarmerDraftId: %s",lr_eval_string("{TfFarmerDraftId}"));
1.1.4.3 關(guān)聯(lián)函數(shù)說明

1.1.5 FAQ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠项,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子子姜,更是在濱河造成了極大的恐慌祟绊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥捕,死亡現(xiàn)場離奇詭異牧抽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)遥赚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門扬舒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凫佛,你說我怎么就攤上這事讲坎。” “怎么了愧薛?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵晨炕,是天一觀的道長。 經(jīng)常有香客問我毫炉,道長瓮栗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任碘箍,我火速辦了婚禮遵馆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丰榴。我一直安慰自己货邓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布四濒。 她就那樣靜靜地躺著换况,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盗蟆。 梳的紋絲不亂的頭發(fā)上戈二,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音喳资,去河邊找鬼觉吭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仆邓,可吹牛的內(nèi)容都是我干的鲜滩。 我是一名探鬼主播伴鳖,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼徙硅!你這毒婦竟也來了榜聂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤嗓蘑,失蹤者是張志新(化名)和其女友劉穎须肆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桩皿,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豌汇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了业簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘤礁。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梅尤,靈堂內(nèi)的尸體忽然破棺而出柜思,到底是詐尸還是另有隱情,我是刑警寧澤巷燥,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布赡盘,位于F島的核電站,受9級(jí)特大地震影響缰揪,放射性物質(zhì)發(fā)生泄漏陨享。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一钝腺、第九天 我趴在偏房一處隱蔽的房頂上張望抛姑。 院中可真熱鬧,春花似錦艳狐、人聲如沸定硝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔬啡。三九已至,卻和暖如春镀虐,著一層夾襖步出監(jiān)牢的瞬間箱蟆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工刮便, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空猜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像辈毯,于是被迫代替她去往敵國和親久信。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理漓摩,服務(wù)發(fā)現(xiàn),斷路器入客,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 一:LoadRunner常見問題整理1.LR 腳本為空的解決方法:1.去掉ie設(shè)置中的第三方支持取消掉2.在系統(tǒng)屬...
    0100閱讀 4,118評(píng)論 0 11
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,960評(píng)論 6 13
  • http協(xié)議有http0.9管毙,http1.0,http1.1和http2三個(gè)版本桌硫,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,862評(píng)論 0 3
  • 一個(gè)五一夭咬,一場聚會(huì),十多年前的同事铆隘,大部分已經(jīng)離開公司多年卓舵,甚至有的已經(jīng)離開深圳,但還是偶爾可以聚在一起膀钠,吃吃飯掏湾,...
    云沐媽媽閱讀 226評(píng)論 0 0