LoadRunner性能測試系統學習教程:腳本編寫(1)

LoadRunner性能測試系統學習教程:腳本編寫(1)
LoadRunner錄製結束後會自動生成一段腳本。這段腳本雖然很簡單,但很實用,適合初學者學習。可是在真正進行項目性能測試時,只靠LoadRunner自動生成的腳本仍是不夠,很難達到業務的要求。所以,在錄製腳本結束後,要對腳本進行完善,使其能達到業務模擬的要求,這樣儘量地使虛擬用戶模擬時更接近用戶的實際使用。
html

本章將從如下幾個方面介紹完善腳本的技巧:
插入檢查點
Block(塊)技術
參數化技術
關聯技術



web

檢查點

在進行壓力測試時,常常會有頁面間數據傳遞的操做。若是在測試過程當中傳遞數據的次數逐漸增多,頁面就有可能會發生傳遞混亂,或者客戶端與服務器端數據傳輸被中斷、傳輸過程當中產生了錯誤的數據等狀況。爲了判斷數據傳遞的正確性,更重要的是爲了節省人工檢查的步驟和時間服務器

LoadRunner提供了在腳本中插入檢查點的方法,在每次運行時都檢查服務器返回頁面的信息是否正確,這樣能夠大大提升測試效率。app

檢查點的原理是經過檢查點函數將返回值的結果反映在Controller的狀態面板上和Analysis統計結果中。這個原理是基於LoadRunner中不少的API函數的返回值會改變腳本的運行結果。好比,檢查點函數web_find,若是它檢查到的結果爲空,它的返回值就爲LR_FAIL,這樣整個結果置爲FAIL;反之,檢查到的結果爲成功,則web_find返回值是LR_PASS,整個結果置爲PASS。ide

爲何須要插入檢查點
一般在測試過程當中使用到兩種檢查點,文本檢查點和圖片檢查點。那麼爲何須要插入檢查點呢?以飛機訂票系統的登陸功能爲例,咱們來觀察在不插入檢查點回放,事務結束狀態的狀況。
函數

首先錄製登陸的腳本,腳本以下(部分核心代碼):
web_reg_save_param("WCSParam2",
"LB/IC=userSessionvalue=",
"RB/IC=>",
"Ord=1",
"Search=Body",
"RelFrameId=1",
LAST);
web_url("nav.pl",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Snapshot=t7.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_url("mer_login.gif",
"URL=http://127.0.0.1:1080/WebTours/images/mer_login.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t8.inf",
LAST);
lr_start_transaction("Login");
lr_think_time(14);
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={WCSParam2}",ENDITEM,
"Name=username","Value=test1",ENDITEM,
"Name=password","Value=1",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
"Name=login.x","Value=46",ENDITEM,
"Name=login.y","Value=6",ENDITEM,
LAST);
web_concurrent_start(NULL);
web_url("nav.pl_2",
"URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t10.inf",
"Mode=HTTP",
LAST);
web_url("login.pl_2",
"URL=http://127.0.0.1:1080/WebTours/login.pl?intro=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t11.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
在這個腳本中並無插入檢查點,回放腳本,日誌文件如圖所示。


























































性能

從回放日誌中能夠看出,登陸事務是正確的,用戶成功登陸,這沒有問題,如今將web_submit_data函數用戶名和密碼的參考修改一下,將其修改成以下代碼:
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={WCSParam2}",ENDITEM,
"Name=username","Value=abcdef00133",ENDITEM,
"Name=password","Value=ddaa",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
"Name=login.x","Value=46",ENDITEM,
"Name=login.y","Value=6",ENDITEM,
LAST);
從新回放腳本,回放日誌如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
從回放日誌中能夠清晰的看到,登陸仍是成功的,但實際狀況下使用用戶名爲abcdef00133,密碼爲ddaa是不可能登陸成功的。從LoadRunner的Run-Time Viewer視圖中也能夠看出,Run-Time Viewer視圖結果如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
登陸成功後正常的狀況是,Welcome後面會顯示出登陸的用戶名。
這個例子說明一個問題,當事務的結束狀態爲成功時,並不能說明業務真的作成功了,那麼同理,當在分析器中看到事務的成功率爲100%時,平均事務響應時間也是在指望範圍內時,也不能說明系統沒有問題,也有可能出現這種狀況,業務沒有作成功,但事務的結束狀態都被置爲成功了,這樣分析到的結果就徹底錯了。




















學習

那麼LoadRunner是如何肯定事務結束狀態爲PASS的呢?其實LoadRunner自己沒法實際去判斷業務是否作成功,其判斷事務是否成功的依據是結束事務函數(lr_end_transaction)是否被執行,若是結束事務函數執行成功,那麼LoadRunner則會將事務的結束狀態設置爲PASS。測試

從這個例子能夠看出,若是須要肯定事務是否成功,其實首先應該判斷是否登陸成功,只有當登陸成功時,才能肯定登陸事務是成功的,因此其實檢查點的根本目的是驗證測試過程當中的步驟是否被正確的執行,也能夠理解爲業務是否被正確的執行,只有這樣才能保證後期分析的數據是正確的。url

插入檢查點

插入檢查點的方法,在工做原理上是在VuGen中插入Text/Image檢查點。插入檢查點的步驟以下:

1.將視圖模式設置爲Tree View,如圖所示。
VuGen中包含Tree View(樹視圖)和Script View兩種視圖模式。通常狀況下都是使用Script View,但在插入檢查點時,通常都將視圖模式切換爲Tree View,這樣方便找到要插入檢查點的頁面,對於初學者來講這是一種很好的方式,這樣能夠保證插入檢查點的位置正確。
LoadRunner性能測試系統學習教程:腳本編寫(1)
2.在Tree View中選擇要插入檢查點的位置。
選中要插入檢查點的位置後,點擊鼠標右鍵,選擇檢查點插入的方式,能夠選擇插在前面,也能夠選擇插在後面,如圖所示。



3.選擇檢查點類型和插入函數。
插入檢查點有文本檢查點(Text Check)和圖片檢查點(Image Check)兩種,選擇的檢查點函數也有兩個,分別爲:web_find和web_reg_find。
插入文本檢查點(Text Check),使用web_find檢查點函數的狀況,如圖所示,點擊OK按鈕後會彈出Text Check Properties對話框,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)LoadRunner性能測試系統學習教程:腳本編寫(1)


在Specification選項卡,設置檢查參數信息,主要有如下三個屬性須要設置:
Searchfor:設置要檢查的字符串,能夠點擊對檢查的內容進行參數化。

Rightof:設置右邊界值,也就是設置要檢查字符串右邊的內容,如Howareyou,若是要檢查的內容爲「are」,那麼右邊界值爲「you」,也能夠設置爲空。
LoadRunner性能測試系統學習教程:腳本編寫(1)
Leftof:設置左邊界值,也就是設置要檢查字符串左邊的內容,如Howareyou,若是要檢查的內容爲「are」,那麼左邊界值爲「How」,也能夠設置爲空。

而後切換到General選項卡,如圖所示,在Step Name文本框中輸入該操做的步驟名稱,命名時名稱最好能反映該操做要搜索的對象。
LoadRunner性能測試系統學習教程:腳本編寫(1)
插入文本檢查點(Text Check),使用web_reg_find檢查點函數的狀況,如圖所示,點擊OK按鈕彈出Find Text對話框。
LoadRunner性能測試系統學習教程:腳本編寫(1)
在Find Text對話框中設置搜索的屬性配置,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
在Find Text對話框設置檢查點屬性時,有如下幾個須要注意的地方:
1.Search for specific Text:和web_find檢查點函數同樣,一樣須要對待檢查的字符串進行設置,也能夠對檢查點的內容進行參數化,但web_reg_find檢查點函數還能夠對檢查的內容進行是否區分大小寫、是否爲二進制數據、是否使用「#」代替任意阿拉伯數字和是否使用「^」做爲通配符進行設置。






2.Search in:設置查找範圍,關於查找範圍爲三個選項:All、Body和Headers,缺省值爲Body。
那麼如何來肯定查找範圍呢?以飛機訂票系統登陸成功,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
那麼在使用這種方式來插入檢查點時,須要檢查的用戶名(test1)應該是在哪裏查找呢?在檢查點函數web_reg_find中能夠看到,一般有三種範圍選擇,那麼在實際測試過程當中能夠依次在這三種範圍中進行查找,檢查用戶名所在的地方就是須要設置的範圍。


在樹模型中找到登陸成功的頁面,並單擊HTTP View選項卡,在該選項卡中能夠看到錄製的過程LoadRunner所抓到客戶端向服務器發送的請求和服務器向客戶端返回的請求。

在Response Body和Headers選項卡中依次查找待檢查的用戶名(test1),該實例在Response Body中能夠查找到待檢查的用戶名,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
這樣檢查範圍就應該設置爲Body,那麼通常在實際測試過程當中待查找的內容都會在Body中,因此缺省值爲Body。

3.Save count:定義查找計數器變量名稱,該變量會自動統計檢查內容出現的次數。在檢查點類型和函數中,選擇檢查點類型爲Image Check,檢查點函數爲web_image_check,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
點擊OK按鈕,彈出Image Check Properties對話框,在該對話框中設置圖片的提示信息和圖片的相對路徑,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
若是Web窗體中包含有JavaScript腳本,那麼在TreeView中顯示可能會有問題,這時要在GeneralOptions中進行設置,如圖所示。
LoadRunner性能測試系統學習教程:腳本編寫(1)
進入General Options對話框,如圖所示,切換到Correlation選項卡,選中Enable Scripting and Java applets on Snapshots viewer複選框,點擊OK按鈕,設置完畢。
LoadRunner性能測試系統學習教程:腳本編寫(1)4.參數化:檢查點也能夠進行參數化,由於檢查點的內容可有會出現常常變化的狀況,所以在必定的時候須要對檢查點的內容進行參數化操做。在檢查點屬性設置對話框中點擊按鈕,彈出參數設置對話框,如圖所示。

相關文章
相關標籤/搜索