一、VuGen錄製工具欄web
二、VuGen錄製腳本瀏覽器
(1)錄製標籤(Recording)
默認選擇基於HTML的腳本錄製格式,在HTML的高級中默認爲第一種,描述用戶操做的腳本(A script describing user actions)
而在實際應用中,描述用戶操做的腳本雖然便於理解,但每段函數的依賴性太強,腳本靈活度不夠。而基於URL的腳本錄製(URL-Based script)分解了腳本中的每一個細節,不便於業務理解。咱們常常選擇的錄製方式是基於HTML的腳本錄製格式中的第二種,僅包含明確URL的腳本類型(A script containing explicit URLs only)。服務器
三、三種錄製腳本的差別網絡
第一種:基於HTML,以描述用戶操做的方式錄製腳本,錄製的腳本最爲簡潔,站在用戶視角易於理解。併發
第二種:基於HTML,以URL的方式錄製腳本,這種方式錄製的腳本,函數都自帶URL地址,腳本相對獨立和靈活,即便註釋掉其中的某一段也能夠正常運行,是腳本錄製中最多見的錄製方式。dom
第三種:基於URL的腳本,該錄製的腳本信息量要大不少,便於理解操做細節,但可閱讀性相對較弱,適合分解步驟時使用。函數
四、VuGen腳本建立工具
(2)HTTP屬性高級(HTTP Properties → Advanced)
爲避免腳本在中文環境下出現亂碼,須要在複選框勾選支持的字符集UTF-8性能
2.「runtime Settings(F4)」運行時設置選項學習
Run Logic運行邏輯(General → Run Logic)
用於設置當前腳本的迭代次數(也叫循環次數)。例如,設置兩次迭代,Action中的腳本將被執行2次
迭代次數不會影響到vuser_init,以及vuser_end,多數狀況下咱們會把腳本放入Action中方便迭代設置。
(4)迭代加強了腳本的靈活性,但有時並不是全部的Action腳本都須要迭代,例如,想要實現1次註冊,2次登陸的檢查就須要引入Block塊的概念。
(5) Run Logic運行邏輯(General -> Log)
在VuGen腳本運行時爲了更好地瞭解腳本執行狀況,通常會選擇查看擴展日誌
【特別說明】
擴展日誌通常是在單腳本運行時設置,在多腳本運行的Controller中,大多選擇標準日誌。
(6) Run Logic運行邏輯(General ->Think Time)
思考時間指的是腳本錄製過程當中產生的用戶停頓時間,是用戶正常訪問的體現。但在單腳本運行的VuGen中,默認選擇忽略思考時間(Ignore think time)
【特別說明】:在Controller中的併發操做下,通常選擇使用錄製思考時間的隨機百分比(use random percentage of recorded think time),目的是爲了更真實地模擬用戶行爲。
(7) Run Logic運行邏輯(General ->Think Time)補充
一、Ignore think time(忽略思考時間):忽略錄製的思考時間;回放腳本時忽略全部Lr_think_time函數。
二、 Replay think time As recorded
回放期間,使用Lr_think_time函數中顯示的參數。例如,Lr_think_time(10)等待10秒。按照;錄製實際時間。
三、 Mutiply recordedthink time by
回放期間,使用錄製的思考時間的倍數。這能夠增長或減小回放期間應用的思考時間。例如,若是錄製了4秒的思考時間,能夠指示Vuser將該值乘以2,獲得總數8秒。要將思考時間縮短爲2秒,能夠將錄製的時間乘以0.5。
四、 Use random percentageof recorded think time
使用錄製時間的隨機百分比。能夠經過指定思考時間的範圍來設置思考時間值的範圍。例如,若是思考時間參數爲4,而且指定最小值喂50%,最大值爲150%,則最短的思考時間能夠爲2(50%),最大值爲6(150%)。
五、 Limit thinktime to
爲think time設置一個上限,無論上面如何設置,執行的時候,取值都不會超過這個上限。
(8) Run Logic運行邏輯(Browser->Browser Emulation)
LoadRunner回放腳本默認採用IE瀏覽器,若是想要更改回放腳本的瀏覽器能夠在該頁面進行操做。
總結
一、腳本錄製方式的選擇不一樣,對腳本的閱讀性將產生重大影響,每次錄製腳本須要檢查,「Recording Options」下,HTML的腳本錄製格式是否選擇了僅包含明確URL的腳本類型(script containing explicit URLs only)。
二、 VuGen不只僅是錄製腳本,還須要考慮對腳本的各種設置,而VuGen是單腳本運行,在設置上Controller的多腳本仿真並不徹底一致,後續執行期間須要多加註意。
五、腳本優化之參數化
成功錄製了一個名爲「signup」的註冊腳本,在腳本回放中咱們手動將用戶名改成了「tester002」。性能測試的目的是爲了模擬大量的併發操做,看系統可否正常處理,咱們不能老是註冊「tester002」,實踐告訴咱們這是不容許的,而手動修改的辦法並不符合實際須要,因此咱們須要引入參數化的概念來解決以上難題。
參數化的目的是模擬真實的用戶操做和建立現實的結果,就算系統不對用戶名進行註冊限制,那麼在現實的場景中,也不可能出現所有註冊同一個用戶名的狀況,除非有提早告知或藉助神力感應。
當咱們利用VuGen生成Vuser Script,腳本中的數據是固定不變的,只有藉助參數化手段才能模擬真實用戶場景,以百度爲例,當錄製腳本的時候在百度中輸入「軟件測試」做爲搜索條件
錄製的腳本,每次運行都會輸入同一組數據「軟件測試」,而實際用戶的輸入千差萬別,就算是同一個用戶也會有不一樣的搜索需求,因此該輸入條件就是咱們須要參數化的對象。
步驟1:首先肯定腳本中須要被參數化的數據。數據依實際狀況多是一個,也多是多個。
步驟2:選中數據,鼠標右鍵選擇替換爲參數「Replace with Parameter」->「Create New Parameter」,在彈出的對話框中選擇參數類型,並對參數命名。參數的命名必定要便於理解,一眼就能看出該參數的用途,不至於同其餘參數混爲一談。
步驟3:選中數據,鼠標右鍵查看參數列表「Replace with Parameter」-> 「Parameter List」中設置參數的取值和參數的更新方式。
【特別說明】:參數的更新方式由兩部分組成「Select next row」和「Update Values on」,每一個部分都有3個選項,理論上共有九種組合。
理解了參數化的基本原理,下面咱們嘗試對註冊腳本「signup」進行參數化,參數化要求將用戶名和密碼進行惟一性匹配。用戶名:X0001;X0002;X0003;X0004密碼0001;0002;0003;0004
填寫好參數名稱,並選擇File類型後系統 會彈出提示「你是否想用參數替換該字符串的全部出現位置?」的對話框。
因username在該腳本中只出現了一次,能夠選擇「No」,而password在該腳本中會出現兩次,能夠選擇「Yes」,在實際項目中處於謹慎咱們最好選擇「No」,並自行檢查腳本對應字段。
進入參數列表,設置參數的取值和參數的更新方式,選中參數點鼠標右鍵進入「Parameter Properties…」窗口。
參數設置有四種方式。
第一種:以在頁面中直接添加行(Add Row)或列(Add Column)的方式實現;
第二種:選中用記事本編輯,單擊參數設置區域左下角「Edit with Notepad」按鈕;
第三種:選擇導入參數,單擊參數設置區域左下角「Import Parameter」按鈕;
第四種:選擇模擬參數,單擊參數設置區域右下角「Simulate Parameter」按鈕。
【特別說明】:在平常參數設置中,第一種參數添加方式須要逐個添加,用起來相對繁瑣;第二種方式最爲直觀,使用率最高;第三種則是從外部文件導入,數據之間的格式要求比較嚴格,使用時要特別注意;第四種模擬數據用於判斷參數取值方式是否符合預期。
列的取值(Select column):說明參數取值的位置,從哪一列進行取值,取值方式分兩種,按編號取值(By number),或者按名稱取值(By name)。
文件格式(File format):默認以「,」逗號做爲數據的分隔符,也可選擇其餘分隔符(不推薦更改)。
取值方式,選擇下一行(Select next row),包括三個固定選項。
(1)Sequential:順序取值,表示此參數從第一行開始取值,依次序取後面的每一行。
(2)Random:隨機取值,表示每次參數取值都是隨機取值,有重複的可能。
(3)Unique:惟一取值,按Vuser分配的參數要求和自身的取值規則進行取值。
取值方式,更新值的時間(Update Values on),也包括三個固定選項。
(1)Each iteration:每次循環取新值,表示該參數在同一個腳本中取相同的值;
(2)Each occurrence:每次遇到就取新值,表示該參數在同一個腳本中若是出現兩次或兩次以上都會按照選擇下一行的方式從新取值;
(3)Once:一次取值,不管參數出現幾回,按照選擇下一行的方式,取一次便可。
經過觀察,若是在signup的腳本中,username/password參數,選擇下一行的取值方式選擇Random,更新值的時間選擇Each iteration,那麼最終username和password的對應關係將不復存在。
取值方式的多樣化是LoadRunner的重要特徵,如何才能讓username和password的對應關係不受取值方式的制約,修改password參數屬性的設置,讓username和password來自於同一個數據文件。
首先修改File的數據來源,password.dat->username.dat,而後在新的數據文件下增長password的列名。
而後以記事本的方式(Edit with Notepad)打開數據文件,增長password列信息,注意兩個字段經過「,」逗號間隔。
最後只要將password列的取值方式改成「Same line as username」,這樣不管username按什麼樣的方式取值對應的password都不會產生混亂
參數化組合方式
爲加強腳本的業務仿真度,在實際項目中常常用到Sequential/Random/Unique+Each iteration、Sequential/Random/Unique+Each occurrence的取值組合
首先建立個空腳本,使用lr_eval_string函數嘗試幾種取值方式的組合用法。
Lr_eval_string函數,表示以字符串的形式返回參數的當前取值。
腳本一:用戶設置Vuser=1個,參數設置{parametest}取值爲A,B,C,D,E,運行時設置Run Logic迭代=3次,腳本以下。
在運行腳本時日誌部分勾選「參數替換類型」的擴展日誌。
lr_eval_string(「username」)
參數化組合方式
(1)Sequential+Each interation:
(2)Sequential+Each occurrence:
(3)Sequential+Unique:
(4)Random+Each interation:
(5)Random+Each occurrence:
(6)Ramdom+Unique:
(7)Unique+Each interation:
(8)Unique+Each occurrence:
(9)Unique+once:
六、腳本優化之事務+檢查點
實際事務包括如下幾個部分
一、Wasted Time,腳本錄製過程當中,自動插入所花費的時間;腳本錄製後,手工編碼輸入執行所花費的時間。
二、函數自身所消耗的時間,包括lr_start_transation和lr_end_trasnsation函數。
三、Think Time,用於模擬用戶操做步驟之間延遲時間的一種技術手段,在錄製時,系統會自動生成lr_think_time()函數,單位爲秒。
四、響應時間=網絡+服務器處理時間
在事務的時間計算中會自動排除第一部分和第二部分的時間,而第三部分的時間會在事務結果中單獨統計出來,只要作一下減法也能排除。因此事務針對要度量的時間依然是響應時間。
添加事務的三種方式
一、對腳本徹底不熟悉狀況下,錄製工具欄添加。
二、對腳本較爲熟悉,通常都是在錄製結束後添加事務。
三、最後一種就是純手工編碼添加事務命令,此方法的效果和前面倆種是一致的。
事務的函數語法以下所示:
int lr_start_transacion(char *transaction_name);
int lr_end_transacion(char *transaction_name,int status);
其中lr_end_transaction函數的int status有4種狀態。
一、LR_AUTO說明LR自動根據規則來判斷狀態,結果爲PASS/FAIL/STOP。
二、LR_PASS說明系統作了正確的事,並記錄下了對應的時間(響應時間)。
三、LR_FAIL說明事務失敗,沒有達到腳本應該有的效果,獲得的時間不是正確操做的時間(後 期統計中將被獨立統計)。
四、LR_STOP說明事務被中止。
若是想快速知道腳本回放成功仍是失敗,就要用到web_reg_find()的檢查點函數。
檢查點能夠單獨判斷頁面操做狀況,但一般會同事務一塊兒使用,用於判斷事務時間是不是咱們想要的正確時間。
【特別說明】:若是在錄製時插入事務,生成的事務段腳本將包含思考時間,也就是說lr_think_time()時間將被計算在事務內,回放腳本前在Replay->Runtime Settings中將Think time改成Replay think time as recorded(按錄製參考回放思考時間)
檢查點的位置一般是放在事務段的內部,這樣便於理解該檢查點的做用,檢查點函數自身所消耗的時間會被事務自動排除。
七、腳本優化之集合點+思考時間
若是想要實現10位已註冊用戶,同時進入Web Tours頁面,在同一秒單擊「Login」按鈕。從功能參數角度來看,須要找10名用戶同時數1,2,3點擊登陸。若是人數上升到500人,那就是不容易完成的任務了。
在LR12中集合點的使用分爲倆個部分
步驟1:在VuGen中肯定併發操做步驟,添加集合點。集合點函數lr_rendezvous(char *rendezvous_name),能夠在錄製腳本時添加,也能夠在錄製完成後經過鼠標右鍵插入。
【特別說明】:集合點只能在Action中添加,添加後不會對VuGen腳本運行產生實質影響,真正影響實在Controller中體現的。
步驟2:在Controller併發操做以前,設置集合點策略。
集合點策略有如下三種。
第一種策略:Release when X% of all Vusers arriver at the rendezvous,當百分之X的Vuser(佔總數)到達集合點後釋放全部用戶。
第二種策略:Release when X% of all running Vusers arriver at the rendezvous(默認選項),百分之X的Vuser(佔運行的總數)到達集合點後釋放全部用戶。
第三種策略: Release when X of Vusers arriver at the rendezvous,當指定的X個Vuser到達集合點後釋放全部用戶。
舉例:50人蔘加登山活動,參加人員5人一組進行審覈,每10分鐘完成一組人員資格審覈,而後按指定路線進行爬山。
第一種策略:當50名人員所有審覈完成後你們一塊兒出發爬山。
第二種策略:當第一組(5名)爬山人員審覈後就能夠出發,不用等待後續小組審覈。
第三種策略:按指定人數進行爬山。
【特別說明】:從併發效果角度來說,第一種策略效果最明顯;但從仿真角度來說,第二種策略更符合用戶的成長方式;第三種是按Vusers的數量,用的相對較少。
【特別說明】:集合點插入位置必定是在事務以外,不然事務的時間統計會把集合等待時間也算進去,這不符合實際狀況。
在VuGen的Runtime Settings中,思考時間默認是被忽略的,這符合單腳本調試的須要。但在Controller中要模擬真實用戶場景的併發 行爲。系統會自動將思考時間設置爲「As Recorded」按錄製的實際時間。爲了實現更仿真通常會選擇使用隨機百分比模式