
Vuser 發(fā)生器(Visual User Generator, VuGen)主要通過捕獲客戶端向服務(wù)器發(fā)送的HTTP請求,將這些請求錄制成腳本,在回放時(shí)將捕獲的HTTP請求再次發(fā)送,以達(dá)到模擬客戶行為的目的。
Vuser 主要是用來捕獲最終用戶業(yè)務(wù)流程創(chuàng)建和創(chuàng)建自動(dòng)化測試腳本,即生成測試腳本。
VuGen 是錄制測試腳本、編輯與完善測試腳本的一個(gè)平臺(tái),支持C語言語法。
3.1 腳本錄制

? ? 3.1.1 錄制腳本環(huán)節(jié)的關(guān)鍵點(diǎn)是選擇正確的協(xié)議,常用方法如下:
? ? ? ? (1) 跟開發(fā)確認(rèn)數(shù)據(jù)通信所采用的協(xié)議;
? ? ? ? (2) 通過概要或詳細(xì)設(shè)計(jì)手冊獲知;
? ? ? ? (3) 使用協(xié)議分析工具捕獲通信時(shí)的數(shù)據(jù)包并進(jìn)行分析,然后確定協(xié)議,例如:Fiddler;
? ? ? ? (4) 經(jīng)驗(yàn)判斷法;
? ? ? ? (5) LoadRunner 11.0 提供了一個(gè)工具 Protocol Advisor;
這個(gè)在我的實(shí)際應(yīng)用中相對比較簡單,因?yàn)槲沂侵苯訉懣蛻舳撕头?wù)端請求接口的,所以只需要用 Web(HTTP\HTML)協(xié)議;
? ? 3.1.2 開始錄制腳本


注意一下:錄制的時(shí)候或者是我們自己寫腳本時(shí),代碼都要放在Action部分,因?yàn)関user_init和vuser_end兩部分的代碼只會(huì)執(zhí)行一次。

3.2 Recording Option 設(shè)置
Tools->Recording Options 或者 Ctrl + F7 可打開該配置對話框。

這里要重點(diǎn)關(guān)注:Recording、Advanced和Correlation 三個(gè)選項(xiàng)卡。
3.3 Run-Time Settings 設(shè)置
該設(shè)置主要用于腳本運(yùn)行過程中的策略設(shè)置。可以從 Vuser -> Run-Time Settings 菜單或按 F4 打開。

此項(xiàng)設(shè)置在實(shí)際腳本調(diào)試和場景運(yùn)行時(shí)都使用頻繁,所以我們來重點(diǎn)看下這幾個(gè)選項(xiàng)卡:
General-Run Logic:
Number of Iterations:設(shè)置運(yùn)行時(shí)腳本迭代的次數(shù)。這只會(huì)影響在單位時(shí)間內(nèi)客戶端向服務(wù)器提交的HTTP請求數(shù)。
General-Pacing:
設(shè)置腳本迭代過程中腳本之間的時(shí)間間隔。有3種條件設(shè)置:
As soon as the previous iteration ends:上一次迭代執(zhí)行結(jié)束后馬上執(zhí)行下一次迭代。這個(gè)選項(xiàng)對服務(wù)器壓力最大,因?yàn)樵趩挝粫r(shí)間內(nèi)提交的請求數(shù)最多。所以在做壓力測試時(shí),建議選擇該選項(xiàng)。
After the previous iteration ends:
? ? Fixed:上一次迭代執(zhí)行結(jié)束后,等待一個(gè)固定時(shí)間后,再執(zhí)行下一次迭代;
? ? Random:上一次迭代執(zhí)行結(jié)束后,等待一個(gè)隨機(jī)時(shí)間后,再執(zhí)行下一次迭代。隨機(jī)時(shí)間范圍可以設(shè)置。
At Fixed/Random intervals:表示上一次迭代開始到下一次迭代開始之間的時(shí)間間隔,如果設(shè)置的時(shí)間達(dá)到要求后,不管上一次迭代執(zhí)行是否完成,都會(huì)開始下一次迭代。Fixed表示一個(gè)固定的時(shí)間長度,Random表示一個(gè)隨機(jī)的時(shí)間長度,隨機(jī)時(shí)間范圍可以設(shè)置。
General-Log:
這個(gè)設(shè)置項(xiàng)在調(diào)試腳本時(shí)應(yīng)用最多,主要用于設(shè)置腳本回放時(shí)的日志格式。

Enable logging:設(shè)置日志是否生效,即在場景運(yùn)行時(shí)是否收集日志信息。
Send messages only when an error occurs:指當(dāng)腳本回放時(shí)出現(xiàn)錯(cuò)誤信息才收集日志
Always send messages:收集所有日志信息,不管對錯(cuò)。
關(guān)于日志的類型:
Standard log:默認(rèn)為標(biāo)準(zhǔn)日志
Extended log:擴(kuò)展日志
? ? Parameter substitution:表示客戶端提交給服務(wù)端的所有參數(shù)會(huì)記錄在日志中
? ? Data returned by server:不僅包含提交的參數(shù)信息,還包含服務(wù)端返回給客戶端的信息;
? ? Advanced trace:所有客戶端提交和服務(wù)端返回的信息都會(huì)被記錄;
LoadRunner 一共包括4類日志文件: Replay Log、Recording Log、Correlation Results 和 Generation Log。
General-Think Time:
設(shè)置用戶操作的思考時(shí)間,在這里指的是每個(gè)HTTP請求之間的時(shí)間間隔。有6個(gè)設(shè)置項(xiàng):
(1)Ignore think time:運(yùn)行腳本時(shí)忽略思考時(shí)間,該設(shè)置項(xiàng)對服務(wù)端壓力最大
(2)Replay think time:
? ? (3)As recorded:按錄制時(shí)的思考時(shí)間來回放
? ? (4)Multiply recorded think time:根據(jù)錄制時(shí)思考時(shí)間的整數(shù)倍來運(yùn)行
? ? (5)Use random percentage of recorded think time:分別設(shè)置一個(gè)最大值和一個(gè)最小值,并從中選出一個(gè)隨機(jī)值。實(shí)際應(yīng)用中經(jīng)常會(huì)采用這種模式。
(6)Limit think time to:設(shè)置 think time 的最大值。假如上面幾種設(shè)置的思考時(shí)間超過該設(shè)置值,以該限制時(shí)間為準(zhǔn);
General-Miscellaneous:
包含3個(gè)設(shè)置項(xiàng):
Error Handling:表示腳本運(yùn)行出錯(cuò)時(shí)所采取的措施,缺省值是出錯(cuò)時(shí)仍然繼續(xù)執(zhí)行腳本
Multi threading:表示運(yùn)行時(shí)把虛擬用戶當(dāng)做進(jìn)程還是線程來處理。注:當(dāng)以進(jìn)程方式運(yùn)行虛擬用戶時(shí),在負(fù)載機(jī)的任務(wù)管理器中可以看到,每個(gè)虛擬用戶都會(huì)產(chǎn)生一個(gè)進(jìn)程,名為 mmdrv.exe。在實(shí)際應(yīng)用中,從這項(xiàng)數(shù)據(jù)可以計(jì)算出每臺(tái)負(fù)載機(jī)最多可以并發(fā)多少虛擬用戶數(shù)。
Automatic Transactions:設(shè)置事務(wù)的模式。
? ? Define each action as a transaction:將一個(gè) action 看作一個(gè)事務(wù);
? ? Define each step as a transaction: 將每一個(gè)操作步驟看作一個(gè)事務(wù);
3.4 腳本完善
直接錄制的腳本其實(shí)并不能很好的適應(yīng)實(shí)際的場景運(yùn)行,所以我們還需要對腳本進(jìn)行一些完善:
3.4.1 插入事務(wù)
后續(xù)在設(shè)計(jì)腳本時(shí)會(huì)深入了解該方法,這個(gè)地方只提醒一件事情:LoadRunner 在自動(dòng)判斷事務(wù)結(jié)束狀態(tài)時(shí)是以結(jié)束函數(shù)是否運(yùn)行為標(biāo)準(zhǔn),只要結(jié)束事務(wù)的函數(shù)運(yùn)行了,就將狀態(tài)置為 PASS。所以我們在實(shí)際應(yīng)用時(shí),盡量設(shè)置檢查點(diǎn),再根據(jù)檢查點(diǎn)來判斷事務(wù)是否成功。
3.4.2 插入集合點(diǎn)
集合點(diǎn)是指在腳本中插入一個(gè)集合點(diǎn)函數(shù),場景設(shè)置里選擇相應(yīng)集合點(diǎn),在運(yùn)行時(shí),虛擬用戶在執(zhí)行到該函數(shù)時(shí),將停止運(yùn)行,并等待允許運(yùn)行的條件(集合點(diǎn)策略)達(dá)到后才釋放集合點(diǎn)開始運(yùn)行。
3.4.3 插入注釋
類似于代碼,腳本也需要有注釋說明,解釋該腳本的目的和作用,以及一些注意配置項(xiàng)。