1.什么是關(guān)聯(lián)?
關(guān)聯(lián)是為了獲取每次運(yùn)行腳本的唯一數(shù)據(jù)值和通過嵌套查詢生成的數(shù)據(jù)。關(guān)聯(lián)提供了避免產(chǎn)生重復(fù)數(shù)據(jù)錯誤的數(shù)值以及優(yōu)化代碼(以避免嵌套查詢)。關(guān)聯(lián)是正?;胤藕袆討B(tài)數(shù)據(jù)如Session IDs,Database Primary Keys 和差不多所有的HTTP安全機(jī)制腳本的根本。關(guān)聯(lián)的目的就是吧腳本中某些hard-coded數(shù)據(jù)轉(zhuǎn)變成從服務(wù)器傳過來的動態(tài)的,每次執(zhí)行都不一樣的數(shù)據(jù)。
2.參數(shù)(化)和關(guān)聯(lián)的區(qū)別
參數(shù)(化)相當(dāng)于代碼編寫中的變量。是某個變量向服務(wù)器輸入不同的值,用來模擬真實(shí)的用戶。運(yùn)行腳本時,不同的數(shù)據(jù)集被發(fā)送給服務(wù)器。只能對某個具體的變量值進(jìn)行參數(shù)化。參數(shù)化的對象在回放過程中即時沒有被參數(shù)化也不會報(bào)錯,只是像服務(wù)器輸入了相同的值。但是關(guān)聯(lián)的對象在回放過程中如果沒有做關(guān)聯(lián),回放過程中就會報(bào)錯。關(guān)聯(lián)是對系統(tǒng)的動態(tài)數(shù)據(jù)(每次運(yùn)行腳本都會變化的值,是從服務(wù)器傳過來的)進(jìn)行。簡單的說,每一次執(zhí)行時都會變動的值,就有可能需要做關(guān)聯(lián)。
3.動態(tài)關(guān)聯(lián)和手工關(guān)聯(lián)的區(qū)別
動態(tài)關(guān)聯(lián)是我們?yōu)殛P(guān)聯(lián)設(shè)置規(guī)則,可以是具體的應(yīng)用程序服務(wù),這里的數(shù)據(jù)由所創(chuàng)建的規(guī)則替代。在手工關(guān)聯(lián)中,我們想要關(guān)聯(lián)的數(shù)值被掃描并且編寫關(guān)聯(lián)函數(shù)完成關(guān)聯(lián)。VuGen內(nèi)建自動關(guān)聯(lián)引擎(auto-correlation engine),可以自動找出需要關(guān)聯(lián)的值,并可以利用關(guān)聯(lián)函數(shù)自動建立關(guān)聯(lián)。
手動關(guān)聯(lián)需要自行查找關(guān)聯(lián)的對象,然后自行插入關(guān)聯(lián)函數(shù)。
4.如何發(fā)現(xiàn)哪里需要關(guān)聯(lián)?
兩種方式:首先回放掃描不同的值然后看哪些值需要關(guān)聯(lián)。其次,我們可以錄制2個腳本然后作比較。我們可以查看不同的文件決定需要關(guān)聯(lián)的數(shù)據(jù)。在我實(shí)踐的某個項(xiàng)目中,為每個用戶提供一個唯一的ID,一個不確定的數(shù)字,是自動生成的,有序且值唯一。我需要關(guān)聯(lián)這個ID值以防止在運(yùn)行腳本是出現(xiàn)錯誤。我用的是掃描的方式關(guān)聯(lián)。
5.在哪里設(shè)置自動關(guān)聯(lián)選項(xiàng)?
網(wǎng)頁自動關(guān)聯(lián)可以在recording options -->correlation tab欄設(shè)置。這里可以為全部腳本設(shè)置關(guān)聯(lián)并選擇是在線問題信息還是離線actions,我們也可為這些關(guān)聯(lián)定義規(guī)則。數(shù)據(jù)庫的自動關(guān)聯(lián)可以用輸出窗口、關(guān)聯(lián)掃描、找關(guān)聯(lián)查詢項(xiàng)并選擇要關(guān)聯(lián)的查詢值。如果知道需要關(guān)聯(lián)的具體值,只需要為這些值創(chuàng)建關(guān)聯(lián)并指定這些值是如何創(chuàng)建的。
6. 在網(wǎng)頁錄制腳本中,什么函數(shù)能捕獲動態(tài)數(shù)據(jù)?
Web_reg_save_param函數(shù)可以將動態(tài)數(shù)據(jù)信息保存到一個參數(shù)中。
Web_reg_save_param函數(shù)語法:
int web_reg_save_param (const char *mpszParamName, <List of Attributes>, LAST);
以下表格列出了可獲取到的屬性. 注意屬性值字符串沒有大小寫區(qū)分(例如:Search=all)
NotFound
邊界找不到或空字符串生成時的處理方法。默認(rèn)值為“Error”,說明當(dāng)邊界值找不到時,VuGen可以作為一個錯誤提出。當(dāng)設(shè)置為“EMPTY”,沒有錯誤信息提出腳本繼續(xù)執(zhí)行。注意:如果腳本設(shè)置了Continue on Error項(xiàng),則當(dāng)邊界值沒有找到時,腳本也會繼續(xù)執(zhí)行,但會早Extend log文件中輸出一個錯誤信息
LB
參數(shù)或動態(tài)數(shù)據(jù)的左邊界。該參數(shù)必須是非空字符串。區(qū)分大小寫。如果想忽略大小寫,則用LB/IC。如果要指定二進(jìn)制數(shù)據(jù)用LB/BIN
RB
參數(shù)或動態(tài)數(shù)據(jù)的右邊界。該參數(shù)必須是非空字符串。區(qū)分大小寫。如果不想?yún)^(qū)分大小寫,則用RB/IC。如果要指定二進(jìn)制數(shù)據(jù)用RB/BIN
RelFrameID
相對于請求的URL,HTML頁面的層次(hierarchy level)??梢允茿ll或者是一個數(shù)字
Search
查詢的范圍—去哪里查看分割數(shù)據(jù)??蛇x值有:Headers (search only the headers), Body (search only Body data, not headers), or ALL (search Body and headers)。默認(rèn)值是ALL。
ORD
可選參數(shù)。指定匹配項(xiàng)的順序或出現(xiàn)數(shù)(the ordinal or occurrence number of the match)。默認(rèn)值為1,如果指定是“ALL”,則將參數(shù)值保存在一個數(shù)值里。
SaveOffset
The offset of a sub-string of the found value, to save to the parameter. The default is 0. The offset value must be non-negative.
Savelen
The length of a sub-string of the found value, from the specified offset, to save to the parameter. The default is -1, indicating until the end of the string.
Convert
The conversion method to apply to the data:
HTML_TO_URL: convert HTML-encoded data to a URL-encoded data format
HTML_TO_TEXT: convert HTML-encoded data to plain text format
7.HTML頁面中的動態(tài)數(shù)據(jù)可能存在于:
每次獲取相關(guān)網(wǎng)頁都變化的URL
在form提交過程中錄制的字段(有時是隱藏的)
JavaScritpt cookies
第1種情況:
錄制時,假設(shè)點(diǎn)擊 “buy me now!”文字的超鏈接,VuGen錄制的URL是:http://host//cgi-bin/purchase.cgi?date=170397&ID=1234因?yàn)閐ate "170397"和 ID "1234"是在錄制過程中自動生成的,每一次新的瀏覽會話重新生成新的date和ID。當(dāng)運(yùn)行腳本時,“Buy me now!”鏈接的URL不再是錄制時的URL而是一個新的了。因此,Web服務(wù)器不能重新獲得URL。
第2種情況
考慮一種情形:提交一個用戶填寫了他的姓名和賬號ID的form。當(dāng)這個form提交時,一個唯一的序列號和該用戶的數(shù)據(jù)同時也一起提交給了服務(wù)器。這個序列號是HTML代碼中一個隱藏字段的值,被VuGen錄制到了腳本中。因?yàn)檫@個序列號在每次瀏覽會話中都會變,所以Vuser不能成功回放錄制的腳本。
8.如果右界不一致,指定一個右邊界是不夠的,需要指定可選右邊界。因?yàn)樗灰恢?--例如有時是”@”有時是“&”。這種情況下,指定&為可選擇的右邊界。