1、關(guān)于LoadRunner的腳本及場(chǎng)景設(shè)計(jì)LoadRunner的強(qiáng)大也許不用我在此處多費(fèi)唇舌,用過的同學(xué)自是可以深切體會(huì)一翻,沒用過的同學(xué)用用就曉得啦本文旨在針對(duì)一些想對(duì) loadrunner 有個(gè)初步了解并可以簡(jiǎn)單上手操作的同學(xué)做一個(gè)介紹,起到一個(gè)拋磚引玉的作用,更深入的使用以后會(huì)不定期的整理分享出來(lái)。主要介紹腳本及場(chǎng)景兩部分內(nèi)容。1關(guān)于腳本我們可以使用LoadRunner的Virtual user generator創(chuàng)建虛擬用戶,以虛擬用戶的方式模擬真實(shí)用戶的業(yè)務(wù)操作行為,它會(huì)先記錄業(yè)務(wù)流程,然后把它轉(zhuǎn)化為腳本。利用虛擬用戶,我們可以在業(yè)務(wù)主機(jī)上同時(shí)產(chǎn)生成千上萬(wàn)的用戶訪問。1.1協(xié)議的選擇在
2、錄制腳本時(shí)選擇那種方式呢:· 如果應(yīng)用是WEB應(yīng)用,首選是HTML-based方式· 如果應(yīng)用是使用HTTP協(xié)議的非WEB應(yīng)用,首選是URL-based方式· 如果WEB應(yīng)用中使用了java applet程序,且applet程序與服務(wù)器之間存在通訊,選用URL-based方式· 如果WEB應(yīng)用中使用的javascript、vbscript腳本與服務(wù)器之間存在通訊(調(diào)用了服務(wù)端組件),選用URL-based方式基于以上分析,針對(duì)我們應(yīng)用的特點(diǎn),我們一般選擇web(http/html)協(xié)議的html-based方式。采用這種方式錄制的腳本,方便我們?cè)诤笃谠鰪?qiáng)
3、腳本時(shí)做關(guān)聯(lián)/參數(shù)化1.2測(cè)試腳本規(guī)范· 腳本越小越好。就像寫code一樣,不要太長(zhǎng),這樣易于維護(hù)也易懂。盡量做到一個(gè)功能寫一個(gè)腳本。如果那些功能是連續(xù)有序的,必須先做上一個(gè),下一個(gè)動(dòng)作才能進(jìn)行,就只能放在一起了· 插 入事務(wù)。有時(shí)我們?yōu)榱撕饬磕硞€(gè)action的性能,需要在action的開始和結(jié)束位置插入這樣一個(gè)范圍,這就定義了一個(gè) transaction,LoadRunner 運(yùn)行到該事務(wù)的開始點(diǎn)時(shí),LoadRunner 就會(huì)開始計(jì)時(shí),直到運(yùn)行到該事務(wù)的結(jié)束點(diǎn),計(jì)時(shí)結(jié)束。這個(gè)事務(wù)的運(yùn)行時(shí)間在 結(jié)果中會(huì)有反映。插入事務(wù)操作可以在錄制過程中進(jìn)行,也可以在錄制結(jié)束后進(jìn)行。Loa
4、dRunner 可以在腳本中插入不限數(shù)量的事務(wù)。舉個(gè)例子:比如購(gòu)買書籍,把從登錄到購(gòu)買成功整個(gè)作為一個(gè)腳本,對(duì)于需要關(guān)注的輸入資料到提交保存,定義為單獨(dú)的事務(wù), 以取得響應(yīng)時(shí)間,事務(wù)腳本函數(shù)如下:· 只 保留核心內(nèi)容。錄制后的腳本可能包含很多內(nèi)容,而這些內(nèi)容又不是我們本身應(yīng)用所需要關(guān)注的,此時(shí)就需要對(duì)腳本進(jìn)行修改,去除多余腳本,主要包括:刪除 cookies、刪除關(guān)鍵字EXTRARS后面的url、刪除不必要的url、刪除一切帶有敏感標(biāo)記的內(nèi)容(比如:不想壓測(cè)到實(shí)際生產(chǎn)線上時(shí),則需要?jiǎng)h除www.*.com的所有相關(guān)內(nèi)容)· 腳本名稱,事務(wù)名稱、參數(shù)名稱要做到見名知義。1.3腳
5、本增強(qiáng)其實(shí)上面提到的去除多余腳本也可以放在這里來(lái)介紹,作為腳本增強(qiáng)的一個(gè)方面,外關(guān)于腳本增強(qiáng)的幾個(gè)方面,就要涉及到以下內(nèi)容:參數(shù)化,關(guān)聯(lián)1.3.1參數(shù)化首先選擇待參數(shù)化的內(nèi)容,點(diǎn)擊右鍵,選擇”Replace with parameter”。在彈出的對(duì)話框中,填寫參數(shù)名稱、選擇Parameter Type,再點(diǎn)擊Propeties,進(jìn)行參數(shù)屬性設(shè)置?,F(xiàn)選擇最常用的一種參數(shù)類型,舉例如下:假如我們要對(duì)登錄進(jìn)行性能測(cè)試,hello01 是我們錄制腳本時(shí)初始生成的用戶名,當(dāng)我們需要測(cè)試多個(gè)不同用戶(eg:hello02hello03)時(shí),就需要對(duì)用戶名(密碼同樣操作)進(jìn)行參 數(shù)化操作,選中腳本中的“h
6、ello01”,點(diǎn)擊右鍵后選擇”Replace with parameter”,設(shè)置“username”為其參數(shù)名稱,類型選擇file,再點(diǎn)擊properties,對(duì)其進(jìn)行具體內(nèi)容設(shè)置,依次輸入 hello02hello03,并保存。如下圖所示:點(diǎn)擊properties后,可對(duì)該參數(shù)進(jìn)行個(gè)性化設(shè)置· “Select next row ”有以下幾種選擇:多個(gè)VU如何取值n Sequential:按照順序一行行的讀取。每一個(gè)虛擬用戶都會(huì)按照相同的順序讀取n Random:在每次循環(huán)里隨機(jī)的
7、讀取一個(gè),但是在循環(huán)中一直保持不變n Unique :每個(gè)VU取唯一的值。注意:使 用該類型必須注意數(shù)據(jù)表有足夠多的數(shù)。比如Controller 中設(shè)定20 個(gè)虛擬用戶進(jìn)行5 次循環(huán),那么編號(hào)為1 的虛擬用戶取前5個(gè)數(shù),編號(hào)為2 的虛擬用戶取6-10 的數(shù),依次類推,這樣數(shù)據(jù)表中至少要有100個(gè)數(shù)據(jù),否則Controller 運(yùn)行過程中會(huì)返回一個(gè)錯(cuò)誤。Same Line As 某個(gè)參數(shù)(比如username):和 前面定義的參數(shù)username 取同行的記錄。通常用在有關(guān)聯(lián)性的數(shù)據(jù)上面。這個(gè)也是很有用的,比如有時(shí)候我們要求
8、指定VU取讀取指定數(shù)據(jù),就可以這樣定義:創(chuàng)建參數(shù)文件,共兩列,假設(shè) username、passwd,username設(shè)定取數(shù)方式是unique,passwd則設(shè)成 same line as icpcode,如果參數(shù)文件第一行數(shù)據(jù)為992201,200001,則當(dāng)icpcode=992201時(shí),icpservid會(huì)取200001。· “Update value on”有如下幾種選擇:多次迭代如何取值n once在所有的反復(fù)中都使用同一個(gè)值,n each iteration則每次反復(fù)都要取新值,n
9、0; each occurrence則只要發(fā)現(xiàn)該參數(shù)就要重新取值,即如果一個(gè)action中有多個(gè)該參數(shù),每遇到一個(gè)就要重新取一個(gè)值。1.3.2關(guān)聯(lián)關(guān)聯(lián)是用來(lái)解決腳本中存在的動(dòng)態(tài)數(shù)據(jù)問題的.當(dāng)你回放一次后,LR會(huì)自動(dòng)查找你錄制的時(shí)候和回放時(shí)候的差別,找出動(dòng)態(tài)數(shù)據(jù),并作成參數(shù)。如 果用戶想使用loadrunner自帶的關(guān)聯(lián)規(guī)則創(chuàng)建關(guān)聯(lián),那么需要在錄制腳本時(shí)依次選擇【Recording Options】>【Internet Protocol】>【Correlation】中啟用關(guān)聯(lián)規(guī)則,選中“Enable correlation during recording”,當(dāng)錄制這些應(yīng)
10、用系統(tǒng)的腳本時(shí),VuGen會(huì)在腳本中自動(dòng)建立關(guān)聯(lián)。如果需要 在回放腳本時(shí)進(jìn)行關(guān)聯(lián),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ì)彈出Scan action for correlation窗口,進(jìn)行關(guān)聯(lián)點(diǎn)的搜索。如果沒有進(jìn)行上述設(shè)置,那么可以執(zhí)行ctrl + F8此命令可啟動(dòng)
11、自動(dòng)關(guān)聯(lián)。1.4腳本驗(yàn)證腳本修改完,一定要回放腳本來(lái)驗(yàn)證腳本的正確性。尤其是當(dāng)功能環(huán)境與性能環(huán)境環(huán)境分開時(shí),要確保腳本的運(yùn)行只對(duì)性能環(huán)境產(chǎn)生壓力而不能影響到功能環(huán)境。這就需要我們除了要觀察回放后頁(yè)面展示的正確性之外,還要注意數(shù)據(jù)流流向,如果涉及到寫數(shù)據(jù)庫(kù)的操作時(shí),就需要去性能環(huán)境的數(shù)據(jù)庫(kù)check一下,數(shù)據(jù)是否有寫入進(jìn)去;如果是涉及到讀庫(kù)操作的,最好在準(zhǔn)備性能測(cè)試數(shù)據(jù)時(shí)就構(gòu)造與功能數(shù)據(jù)庫(kù)不同的數(shù)據(jù)以方便直接從頁(yè)面顯示上判斷,如果沒有的話,就用netstat命令來(lái)判斷。調(diào)試修改腳本時(shí),可以在【Tools】>【general options】>【Display】中,選中所有項(xiàng)。這樣做的
12、好處在于,通過瀏覽器快照和report,查看腳本運(yùn)行情況,方便查錯(cuò)。注意:場(chǎng)景運(yùn)行時(shí),切記將所有項(xiàng)的勾去掉,否則會(huì)將loadrunner測(cè)試機(jī)的硬盤撐爆!而且也會(huì)影響到測(cè)試結(jié)果,產(chǎn)生TPS波動(dòng)現(xiàn)象。2創(chuàng)建運(yùn)行場(chǎng)景(Controller)當(dāng)腳本創(chuàng)建好后,需要?jiǎng)?chuàng)建測(cè)試場(chǎng)景Scenario,一個(gè)運(yùn)行場(chǎng)景包括一個(gè)運(yùn)行虛擬用戶的機(jī)器列表,一個(gè)測(cè)試腳本的列表,及大量的虛擬用戶,然后利用LoadRunner的Controller來(lái)組織測(cè)試方案。2.1虛擬用戶數(shù)虛擬用戶數(shù)目會(huì)直接影響到壓力的大小。在一般情況下,采用遞增虛擬用戶的方式來(lái)尋找系統(tǒng)能夠承受的合理壓力。比如,預(yù)估總虛擬用戶數(shù)為20個(gè),可以設(shè)置初始為2
13、個(gè),每5分鐘增加1或2個(gè)用戶。2.2 場(chǎng)景選擇Loadrunner提供給我們兩種方式的場(chǎng)景:Manual Scenario和Goal-Oriented Scenario,根據(jù)實(shí)際情況具體選擇哪種進(jìn)行測(cè)試。1. Manual Scenario:該項(xiàng)要完全手動(dòng)的設(shè)置場(chǎng)景,這項(xiàng)下面還可以設(shè)置為每一個(gè)腳本分配要運(yùn)行的虛擬用戶的百分比,可在Controller的Scenario菜單下設(shè)置。2. Goal-Oriented Scenario:如果目標(biāo)測(cè)試是要達(dá)到某個(gè)性能指標(biāo),比如:每秒多少點(diǎn)擊,每秒多少transactions,能到達(dá)多少VU,某個(gè)Transaction在某個(gè)范圍VU(50-100)內(nèi)的反
14、應(yīng)時(shí)間等等,那么就可以使用面向目標(biāo)的場(chǎng)景。選擇待運(yùn)行的腳本后,點(diǎn)擊add -> OK,進(jìn)入到下圖所示頁(yè)面,點(diǎn)擊Edit Schedule按鈕,可以對(duì)VU在整個(gè)場(chǎng)景中的加載、卸載及持續(xù)時(shí)間進(jìn)行設(shè)置,同時(shí)還可以通過頁(yè)面右邊的Load Preview 預(yù)覽用戶加載情況。設(shè)置好后,接下來(lái)就要對(duì)Run-Time Setting進(jìn)行設(shè)置了。2.3 Run-Time SettingVU中也有一個(gè)run-time setting,但作用有所不同,此處的設(shè)置主要用來(lái)對(duì)整個(gè)場(chǎng)景運(yùn)行時(shí)進(jìn)行約束,此時(shí)腳本的運(yùn)行時(shí)設(shè)置就會(huì)失效;若在此沒有對(duì)運(yùn)行時(shí)設(shè)置,則按照腳本的設(shè)置來(lái)運(yùn)行。一般情況下,會(huì)按照以下方式進(jìn)行設(shè)置
15、183; Run Logic:設(shè)置成1;比如設(shè)置這里為3,有2個(gè)并發(fā)用戶,相當(dāng)于執(zhí)行了6次腳本· Log: 將Enable logging前面勾去掉;即不打印輸出日志,避免造成loadrunner壓測(cè)機(jī)器磁盤撐爆· Think Time:一般情況,為了增大對(duì)服務(wù)器的壓力而選擇Ignore think time;· Browser Emulation:一般情況下,不選擇Smulate brower cache和 Down non-HTML resousces;不選擇Smulate brower cache 是為了最大程度模擬一個(gè)新用戶打開鏈接時(shí)請(qǐng)求的都是服務(wù)器的資源
16、而不是本地的一些瀏覽器中緩存的內(nèi)容;不選擇Down non-HTML resousces是因?yàn)樵趬簻y(cè)時(shí),更關(guān)注后端應(yīng)用本身的性能,而不去下載存放在其他機(jī)器上的靜態(tài)資源· Preferences:可以將Advanced下的File and line in automatic transaction name取消掉;目的也是為減少壓測(cè)機(jī)本身資源的消耗。· 其它設(shè)置項(xiàng):使用默認(rèn)設(shè)置即可。2.4Result設(shè)置場(chǎng) 景設(shè)置好后,即將要開始運(yùn)行。此時(shí)一定要記得的一件事情就是在【Result】>【Result Settings】下將 directory指定到硬盤空間大一點(diǎn)的目錄下。因?yàn)槲覀冊(cè)趬簻y(cè)過程中會(huì)產(chǎn)生大量的臨時(shí)文件,如果放在默認(rèn)目錄C:Documents and SettingshanshanLocal SettingsTemp下的話,一般C盤空間都不會(huì)太大,會(huì)導(dǎo)致壓測(cè)機(jī)器本身磁盤爆掉,進(jìn)而影響壓測(cè)結(jié)果。2.5應(yīng)用服務(wù)器監(jiān)控按 照前面的步驟一步步走下來(lái)后,就可以運(yùn)行設(shè)定的好性能場(chǎng)景了。在運(yùn)行時(shí),一般需要關(guān)注應(yīng)用的R
評(píng)論
0/150
提交評(píng)論