Q11.請解釋一下如何錄制web腳本?
A11:利用Virtual User Generator錄制測試腳本,錄制步驟:
1、選擇合適的協議

2、設置錄制選項

3、開始錄制

Q12.為什么要創建參數?如何創建參數?
A12:LoadRunner在錄制腳本的時候,只是忠實的記錄了所有從客戶端 發送到服務器的數據,而在進行性能測試的時候,為了更接近真實的模擬現實應用,對于某些信息需要每次提交不同的數據,或者使用多個不同的值進行循環輸入。 這時,在LoadRunner中就可以進行參數化設置,以使用多個不同的值提交應用請求。
【參數化】:使用指定數據源中的值來替換腳本錄制生成的語句中的參數。
【參數化好處】
● 減少腳本的大小
● 提供使用不同的值執行腳本的能力,更加真實的模擬現實應用。
【參數化步驟】
● 用參數替換Vuser腳本中的常量值
● 為參數設置屬性和數據源
Q13.什么是關聯?請解釋一下自動關聯和手動關聯的不同。
A13:【關聯的定義】簡單的說:就是把腳本中某些寫死(固定)的數據,轉變成動態的數據,或者說將前面語句的結果數據保存下來,然后在后面的語句提交請求時使用這些數據。
【需要關聯的前提條件】:
客戶端需要從服務器端返回數據中獲取部分數據,并將這些部分數據處理后作為自己下一次請求的一部分發出。
【自動關聯與手工關聯的不同】:自動關聯是在腳本錄制過程中,VuGen會根據已經制定好的規則,自動找出需要關聯 的值或腳本錄制完成后,執行腳本一次,通過Correlation Studio自動找出需要關聯的數據,并建立關聯;而手動關聯是需要錄制兩份相同業務流程的腳本,輸入的數據要相同,利用WinDiff工具,找出兩份腳 本之間不同之處,也就是需要關聯的數據,再通過web_reg_save_param函數手動建立關聯,將腳本中用到關聯的數據參數化。
Q14.你如何找出哪里需要關聯?請給一些你所在項目的實例。
A14:
1、錄制兩份相同業務流程的腳本,輸入的數據要相同
2、利用WinDiff工具,找出兩份腳本之間不同之處,也就是需要關聯的數據
3、通過web_reg_save_param函數手動建立關聯,將腳本中用到關聯的數據參數化。
示例:

通過錄制兩份腳本,進行對比,可知jsessionid、sap-ext-sid、sap-wd-cltwndid、sap-wd-tstamp需要進行關聯。

Q15.你在哪里設置自動關聯選項?
A15:錄制選項中進行設置,如下圖所示:

Q16.哪個函數是用來截取虛擬用戶腳本中的動態值?(手工關聯)
A16:Web_reg_save_param函數主要根據需要做關聯的動態數據前面和后面的固定字符串來識別、提取動態數據,所以在做關聯時,需要找出動態數據的左、右邊界字符串。
1.函數原型:
int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST);
2.參數說明:
ParamNam:存放動態數據的參數名稱
List of Attributes:其它屬性,包含Notfound、LB、RB、RelFrameID、Search、ORD、SaveOffset、Convert、SaveLen。
● Notfound:指當找不到要找的動態數據時,怎么處理。
● Notfound=error,當找不到動態數據時,發出一個錯誤信息,為LoadRunner的默認值。
● Notfound=warning,當找不到動態數據時,不發出錯誤信息,只發出警告,腳本會繼續執行下去不會中斷。
● LB:動態數據的左邊界字符串,該參數為必選參數,并區分大小寫。
● RB:動態數據的右邊界字符串,該參數為必選參數,并區分大小寫。
● ORD:指提取第幾次出現的左邊界的數據,該參數為可選參數,默認值是1。假如值為All,則查找所有符合條件的數據并把這些數據存儲在數組中。
● Search:搜尋的范圍??梢允荋eaders(只搜尋Headers)、Body(只搜尋Body部分,不搜尋Headers)、 Noresources(只搜尋Body部分,不搜尋Header與Resource)或是All(搜尋全部范圍,此為默認值),該參數為可選參數。
● RelFrameID:相對于URL而言,欲搜尋的網頁的Frame,此屬性可以是All或是具體的數字,該參數為可選參數。
● SaveOffset:當找到符合的動態數據時,從第幾個字符開始才存儲到參數中,該參數為可選參數,此屬性值不可為負數,其默認值是0.
● Convert:可能的值有兩種:
● HTML_TO_URL:將HTML-encoded數據轉成URL-encoded數據格式。
● HTML_TO_TEXT:將HTML-encoded數據轉成純文字數據格式。
● SaveLen:從Offset開始算起,到指定長度內的字符串,才儲存到參數中,該參數為可選參數,默認值為-1,表示儲存到結尾整個字符串。
Q17.你在VUGen中何時選擇關閉日志?何時選擇標準和擴展日志?
A17:在測試場景執行時,關閉日志,因為日志信息過多,也會影響性能測試結果;在調試測試腳本時,可以選擇標準或擴展日志,用于輸出調試信息。
可以在運行時設置中,進行日志設置,如下圖所示:

Q18.你如何調試LoadRunner腳本?
A18: 通常采用以下方法調試LoadRunner測試腳本
● 斷點
【方法】在腳本的任意一行上按右鍵菜單或F9增加斷點。
● 單步跟蹤
【方法】通過菜單命令VUser—>Run Step by Step或F10,可以控制腳本以語句為單位執行。
● 日志輸出
【方法】通過日志輸出函數lr_message、lr_log_message、lr_output_message輸出。
● 對話框輸出
綜上,在實際測試工作中,基本上使用前三種方法,對話框輸出基本上沒用過。
Q19、你在LR中如何編寫自定義函數?請給出一些你在以前進行的項目中編寫的函數。
A19:在編寫用戶自定義函數之前,需要首先為函數創建外部庫(DLL)文件,將這些庫文件放在bin目錄下,一旦庫文件已經被添加并且將用戶自定義函數作為參數,函數應該為以下格式:__declspec (dllexport) char* (char*, char*)
Q20.在運行設置下你能更改那些設置?
A20:可以修改Run Logic、pacing、Log、Think Time等,見下圖;可以測試實際需要,修改相關選項。

Q21.你在不同的環境下如何設置迭代?
A21:在“運行時設置”中設置,如下圖所示:

Q22.你如何在負載測試模式下執行功能測試?
A22:在負載測試模式下,可以通過同時運行數個虛擬用戶,通過增加虛擬用戶數,確定服務器在多大的負載量下,仍然可以正常運行,我一般進行核心功能操作,驗證核心功能運行是否正常。
Q23.什么是逐步遞增?你如何來設置?
A23:虛擬用戶數隨著負載時間逐漸增加,可以幫助確定系統響應時間減慢的準確時間點。
可以在“加壓”選項卡中進行設置:如下圖所示,將設置更改為:“每 30 秒啟動 2 個 Vuser”

Q24.以線程方式運行的虛擬用戶有哪些優點?
A24:以線程方式運行的虛擬用戶,在默認情況下,Controller為每50個用戶僅啟動一個mmdrv進程,而每個用戶都按線程方式來運行,這些線程用戶將共享父進程的內存,這就節省了大量內存空間,從而可以在一個負載生成器上運行更多的用戶。
Q25.當你需要在出錯時停止執行腳本,你怎么做?
A25:取消運行設置中的“Continue on error”復選框。
或者使用lr_abort函數。

Q26.響應時間和吞吐量之間的關系是什么?
A26:當系統吞吐量未達到系統處理極限時,系統性能不會衰減,交易平均響應時間一般也不會遞增,當系統達到吞吐量極限時,客戶端交易會在請求隊列中排隊等待,等待的時間會記錄在響應時間中,故交易平均響應時間一般會遞增。
Q27.說明一下如何在LR中配置系統計數器?
A27:以windows資源監控為例,可右鍵點“添加度量”,輸入系統IP、選擇平臺類型,確定即可,詳細參加LR自帶操作手冊^_^。
對于監控不同類型的操作系統,需要做一些準備工作,可參見監控操作系統資源部分。
Q28.你如何識別性能瓶頸? A28:性能瓶頸分為:硬件瓶頸和軟件瓶頸
性能瓶頸可以通過監控器來分析發現,這些監控器包括應用服務器監控、web服務器監控、數據庫服務器監控器和網絡監控器;它們可以幫助分析導致響應時間增加的原因;性能度量一般包括響應時間、吞吐量、每秒點擊率、網絡延遲等等。
Q29.如果web服務器、數據庫以及網絡都正常,問題會出在哪里?
A29:問題可能出在系統本身或應用服務器、或為應用編寫的代碼編寫中。
Q30.如何發現web服務器的相關問題?
A30:可以利用web資源監控器發現web服務器相關問題,在場景執行過程中,可以利用監控器分析web服務器吞吐量、每秒點擊率、每秒HTTP響應數、每秒頁面下載數,以及web服務器硬件資源使用情況等。
Q31.如何發現數據庫的相關問題?
A31:可以通過數據庫監控器和數據資源圖發現數據庫相關的問題,例如在運行Controller之前,可以指定需要度量的資源,之后可以根據監控的數據,分析數據庫相關的問題。
Q32.解釋所有web錄制配置?
A32:選擇錄制協議、設置錄制選項、選擇瀏覽器、選擇存放路徑、開始錄制。
Q33.解釋一下覆蓋圖和關聯圖的區別?
A33:覆蓋圖:合并兩個圖的內容,使用同一個X軸,合并圖左Y軸顯示當前圖的值,合并圖右Y軸顯示被合并圖的值。
關聯圖:當前活動圖的Y軸變為合并圖的X軸,被合并圖的Y軸變成合并圖的Y軸。
Q34.你如何設計負載?標準是什么?
A34:負載測試計劃多少用戶數量、使用什么類型的機器、以及在什么環境下進行。主要基于兩個重要的文檔,任務分布圖和事務信息,任務分布圖告訴我們在負載時間段內,某一個事務使用的用戶數,高峰使用率及低峰使用率均來自該文檔;
事務信息告訴我們事務名及優先級,在設計場景時可以參考。
Q35.Vuser_init中包括什么內容?
A35:Vuser_init中包含在腳本執行過程中只需執行一次的腳本。一般來說,所有需要初始化的都可以放在vuser_init里面,比如登錄。
Q36. Vuser_end中包括什么內容?
A36:vuser_end中一般包含退出的過程,比如退出系統,主要在腳本執行完成或停止時運行,在設置了迭代次數時,vuser_end和vuser_int均只執行一次。
Q37.什么是think time?think_time有什么用?
A37:思考時間:用戶在各步驟之間停下來進行思考的時間,由于用戶基于其經驗水平和目標而與應用程序進行交互操作,因此技術水平更高的用戶工作起來可能會比新用戶要快。
通過啟用思考時間,可以使 Vuser在負載測試期間更準確地模擬其對應的真實世界用戶。
Q38.標準日志和擴展日志的區別是什么?
A38:標準日志:腳本執行過程中,將函數集及信息發送到日志文件中
擴展日志:可以將詳細的腳本執行信息輸出到日志文件中,可以選擇以下三種擴展日志信息:
● 參數替換:腳本運行過程中,可以將參數及當前參數值輸出到日志文件中
● 服務器返回的數據:將服務器返回給客戶端的數據輸出到日志文件中
● 高級跟蹤:所有的虛擬用戶信息和函數調用輸出到日志文件中
Q39.解釋以下函數及他們的不同之處。
A39:lr_debug_message:發送調試信息到輸出窗口或業務監控日志文件中
lr_output_message:發送日志信息到輸出窗口或業務監控日志文件中
lr_error_message:發送錯誤信息到輸出窗口或業務監控日志文件中
lrd_stmt:賦予一個SQL語句用于處理
lrd_fetch:獲取結果集中的下一行數據
Q40.什么是吞吐量?
A40:客戶端每秒從服務器接收到的數據,或系統服務器每秒能處理通過的交易數。一般隨著虛擬用戶數的增加,吞吐量也增加,說明網絡帶寬比較充足,反之,吐過隨著虛擬用戶數的增加,吞吐量比較平穩,呈直線狀態,則說明網絡帶寬成為瓶頸,限制了數據傳輸。
Q41.場景設置有哪幾種方法?
A41:面向目標的場景設置和手動場景