上期講到LoadRunner性能測試腳本編寫之參數化技術,這期咱們一塊兒來學習腳本編寫之關聯技術。html
關聯技術
首先準備一個場景,錄製這樣一個腳本,登陸LoadRunner自帶的機票預訂系統,檢查登陸的用戶名是否正確,如圖所示。
git
錄製結束以後,爲登陸的用戶名作一個檢查點,而後回放腳本,發現ReplayLog中報錯,如圖所示。
web
這時首先可能想到的第一個緣由就是關聯。關聯是LoadRunner中一個很重要的應用,對於初學者來講也是最容易犯錯的地方,可是很遺憾的是,並無任何特定的錯誤與關聯有關係。 安全
那麼什麼叫關聯呢?關聯(Correlation)是把腳本中某些寫死的(hard-coded)數據,轉變成取自服務器所送的、動態的、每次都不同的數據。 服務器
經常使用的關聯技術有三種:錄製中關聯、錄製後關聯和手動關聯。cookie
關聯的原理
在學習關聯以前必須清楚兩個問題,一是:什麼狀況下須要關聯?二是:LoadRunner使用關聯函數進行關聯時,關聯函數是如何得到這些動態數據的,即關聯函數的工做原理? ide
第一個問題,什麼狀況下須要關聯,以飛機訂票系統登陸過程爲例,其登陸過程如圖所示。
函數
第一個問題,什麼狀況下須要關聯,以飛機訂票系統登陸過程爲例,其登陸過程如圖所示。性能
第一步:進入登陸界面,輸入用戶名和密碼進行登陸。學習
第二步:服務器向客戶端返回一個Session ID值。
第三步:客戶端向服務發送請求,在發送請求給服務器時,同時會向服務器發送一個Session ID,這個Session ID就是第二步從服務器返回到客戶端的Session ID值,而且第二步和第三步的Session ID必須徹底同樣,不然發送到服務器端的請求將失敗。
第四步:服務器返回數據給客戶端。
在腳本錄製過程當中能夠正確的登陸,沒有任何問題,但在回放腳本時發現並無被正確的登陸,那麼這是什麼緣由呢?
再仔細分析整個登陸過程,注意第三步,第三步要求提交的HTTP請求中必須包括Session ID值,而且這個Session ID值必定是服務器返回給客戶端的。在錄製時,LoadRunner會將服務器返回的Session ID值保存在腳本中,腳本內容以下:
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=t9.inf","Mode=HTTP", ITEMDATA, "Name=userSession","Value=108993.054434994fzAzDDApcDHfDDzDHpQiVtcf", ENDITEM,"Name=username","Value=test1", ENDITEM,"Name=password","Value=1", ENDITEM,"Name=JSFormSubmit","Value=off", ENDITEM,"Name=login.x","Value=51", ENDITEM,"Name=login.y","Value=8", ENDITEM, LAST);
從服務器端返回的
Session ID(108993.054434994fzAzDDApcDHfDDzDHpQiVtcf)值保存在userSession參數中,那麼當腳本進行回放時,客戶端就一直使用這個Session ID並和其它的請求一塊發送到服務器。這個過程其它並無任何問題,可是服務器爲了出於安全性考慮,每次返回給客戶端的Session ID都會發生變化,而在整個請求過程當中的第三步明確要求,客戶端發送的請求必須同時附加上Session ID,而且必定須要與服務器返回的Session ID值一致,這樣問題就出現了,每回放一次腳本時,服務器返回的Session ID值就發生改變,而腳本又將Session ID值寫成了固定值,這樣直接致使腳本回放失敗。
經過上面的例子能夠看出,若是錄製腳本過程當中,服務器會返回一個動態的、變化的值給客戶端時,那麼就必須對腳本進行關聯,不然業務不可能正常的完成。
第二個問題,LoadRunner關聯原理。
在第一個問題中描述了什麼狀況下須要對腳本進行關聯,這樣就引出了另一個問題,既然須要關聯的內容是一個動態的、變化的,而且必定是服務器返回給客戶端的值,那麼LoadRunner又如何能得到這些動態的值呢?也便是接下來要分析的LoadRunner的關聯原理。
對於這些動態的值,若是想直接得到是不可能的,由於它是變化的,因此不可能直接得到每次回放時現成的值。這樣就必須使用其它的方法來得到這串變化的值,先看生活中的一個例子,讀者朋友應該都經歷過軍訓,早上開始軍訓時,教官會先讓你們報數,若是報數發現少人了,教官問會你們旁邊是誰尚未到,注意這個案例中,教官其實根本不知道是誰沒到,可是隻要這未到的這我的左右兩邊的人都到了,那就必定能夠知道是誰沒到,因此同理LoadRunner也可使用這種方法來得到那串動態的值,雖然不能直接去讀到那串動態的值,但若是能找到左右邊界的內容,那麼一樣能夠得到那串變化的值。
因此LoadRunner關聯是經過左右邊界值來查找服務器返回給客戶端的值,因此關聯最難的是如何查找待關聯值的左右邊界值。
錄製中關聯
VuGen內建自動關聯引擎(auto-correlation engine),能夠自動找到須要關聯的值,而且自動關聯函數創建關聯。
1.創建規則
若是在錄製以前已經知道關聯規則,那麼能夠先創建一個規則,再進行錄製,這樣在錄製過程當中會自動關聯。關聯規則最重要是指定兩個邊界,即被關聯量的左邊界和右邊界。對於關聯的規則有兩種。
(1)內建關聯規則(Built-in Correlation)
所謂的內建關聯規則通俗的說就是LoadRunner內部自帶的一些規則。VuGen針對經常使用的一些應用系統,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等內建了不少關聯規則,在Tools→Recording Options→HTTP Properties→Correlation中能夠看到,如圖所示。在錄製前能夠啓動須要的規則,這樣在錄製時,VuGen會在腳本中自動創建關聯。
(2)用戶自定義關聯規則(User-defined Rules Correlation)
若是在錄製前發現默認的內建規則並不能知足錄製須要,而且在錄製前就已經知道規則的左右邊界時,此時能夠本身動手新建一個規則,如圖6-59所示。點擊New Application按鈕先新建一個應用,再點擊New Rule按鈕爲該應用新建一個規則,新建規則時只要正確填好左右邊界信息便可。
Action設置待匹配參數所存在的位置,一般服務器返回的內容包括:Response Body、Headers、Cookies等,因此必須指定須要查找參數所在的位置,該選項有如下幾個設置項:
Search for parameters in all of the body text:
指在整個body中查找參數的內容,不只僅包含links、form或cookies的內容。
Search for parameters in links and form actions:
在links和form中查找待匹配的參數。
Search for parameters in cookie headers:
該選項與前面的設置項相似,但該選項是指從cookie內容中去匹配須要的參數。
Parameterize form field value:
查找表單中的字段內容,將其做爲參數,使用該選項會建立一個參數並在表單請求以前插入一行代碼,在設置時須要指定字段的名稱。
Text to enter a web_reg_add_cookie function by:
經過web_reg_add_cookie函數功能,檢查指定緩衝區的內容參數。
缺省值爲在body中查找待匹配的內容,通常的狀況下,須要匹配的參數都是來自於Response Body中。
Left boundary:關聯規則的左邊界值。
Right boundary:關聯規則的右邊界值。
Parameter Prefix:定義參數的前綴,每次使用該規則生成變量時,變量的前綴都使用該選項所定義的前綴。
Match Case:是否區分大小寫。
User #
for any digit:是否使用「#」通配符。
同時還能夠導入已定義好的規則,將已經定義好的規則導出,對定義的規格進行測試。
單擊【Import】按鈕,選擇須要導入的規則,導入便可,因爲多人同時開發腳本,經過導入的方式,就沒有必須每一個人都去查找關聯的左右界面值,經過導入功能便可共享已建好的關聯規則。
單擊【Export】按鈕能夠將已定義好的規則導出到本地磁盤。
測試的功能主要是對已定義好的規則進行測試,測試規則的匹配是否正確,單擊【Test】按鈕,彈出【Token Substitution Testpad】對話框,如圖所示。
在Source string for substitution輸入框中輸入待匹配的字符段,Substitution Result是經過規則匹配後的結果,Applied Rules是指在匹配過程當中使用到的規則。
2.規則使用
在Tools→Recording Options對話框中選中Enable correlation during recording複選框,啓用自動關聯。在錄製過程當中,當VuGen檢查到符合關聯規則的數據時,會依照設定創建關聯,產生與圖相似的一段腳本。
Web_reg_save_param即爲關聯函數,LoadRunner經過該函數將匹配到的內容保存在一個變量中,該實例保存到的變量名爲CSRule_1_UID2。