效能測試工程師面試題

2021-03-03 23:06:55 字數 5040 閱讀 5249

1.什麼是負載測試?什麼是效能測試?

負載測試:通過被測試系統不斷增加壓力,直到效能指標超過預期值或者某種資源達到飽和狀態。

經過這兩天檢視相關的資料,而且還和同事討論。得出以下總結:

1)共同點:兩種測試都是量的測試。

2)區別:壓力測試是指被測物件在允許的壓力值範圍內進行測試。例如:

乙個b/s結構的應用程式,它允許有100個終端訪問伺服器。當有10、30、60、80個終端訪問伺服器時,程式的反應如何?而負載測試是指被測物件在超負荷的環境下運轉。

例如:就拿以上的例子來說,當有110或150個終端訪問伺服器時,程式的反應如何?

對效能測試、壓力測試、負載測試的理解

斗膽在此發表一些個人理解與看法,權作拋磚引玉,望各路英雄能各抒己見,不吝賜教。

首先,我們看一下來自百度百科的定義:

1、效能測試:是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項效能指標進行測試。

2、負載測試:負載測試,確定在各種工作負載下系統的效能,目標是測試當負載逐漸增加時,系統各項效能指標的變化情況。

3、壓力測試:是通過確定乙個系統的瓶頸或者不能接收的效能點,來獲得系統能提供的最大服務級別的測試。

我在這裡簡單談一下我對三個概念的看法。

一、效能測試

效能測試的目的是找到系統在某種條件下的瓶頸,前提是這種條件在軟體或服務的實際應用中可能發生。例如百度主頁會同時有10萬人訪問,這是可能的。因此測試10萬個vuser同時hit是有意義的,但是會不會有10億人同時訪問?

顯然不會,至少在當今不會,因此測試的資料量定在10億個vuser是無意義的,這種行為不靠譜。因此,在這一點上我們可以得出結論,具有清晰的、有意義的並且意義確定的預期值是進行一次效能測試的關鍵要素。

所以,我們在進行效能測試之前,首先要明確兩個值:乙個是系統負載預期值,乙個是系統響應時間的預期值。有了這兩個目標,才可以使用對系統持續增加負載的方法來觀察系統的瓶頸所在。

那麼效能測試就是簡單的新增負載測試嗎?顯然不是。前面說過,效能測試的目的是要找出系統的瓶頸所在,而系統的瓶頸可能存在於各種方面。

在**方面,比較差的演算法、硬**多的模組等低效率的**可能產生瓶頸;在資料庫方面,冗餘或者複雜的資料可能產生瓶頸;作業系統方面,cpu、磁碟、i/o系統、匯流排及相容性等方面可能產生瓶頸;而在通訊傳輸層面上,交換(路由)的**效率、網路硬體質量等都可能引發系統瓶頸。對於以上這些可能引發瓶頸的原因,我們可以進行所謂白盒測試來找到問題的關鍵。各種層面上的問題,都有相應的測試工具或測試裝置的支援,如果沒有合適的工具,也可以自己進行設計。

例如一些cpu監控工具、**檢測、資料庫事件探查器、chariot等,以及網路分析儀、資料分析儀等通訊分析儀器。這些都是效能測試的利器。

我們在效能測試出現瓶頸時,需要及時的除錯對應的系統問題,但是如果在除錯完成之後,系統表現好了一些,但是仍然沒有達到預期目標,這個時候我們就應該把目光放在系統的其他層面上。由於乙個系統是由多個子系統協作的,因此各個子系統之間有著密切的關聯性。以web系統為例,當**層以及資料庫層都進行清洗之後,還可以通過其他途徑提高系統的效能,以突破瓶頸,達到預期目標。

效能測試的另外乙個目的是要建立一組被測系統的基準資料,系統在同樣的測試環境與測試條件下,表現應當符合或優於基準資料的要求,否則測試不通過。另外,基準資料也可以為其他類似的系統提供預期資料及預期返回時間的數值參考。

二、負載測試

負載測試的範圍個人認為比效能測試要狹窄一些,負載測試通常定義為給被測系統加上它所能操作的最大任務數的過程。負載測試考驗系統的兩個指標,乙個是系統的容量,乙個是系統的耐久性。

測試系統容量是指給系統新增大資料量的檔案或者資料,讓系統進行處理並實時觀察系統的表現情況。例如大資料量檔案輸入讓系統處理(我們很熟悉的操作,親們知道是啥意思吧?),大訪問量的輸入處理等。

目的是找到系統能新增負載的最大量。而測試系統耐久性則指的是給出數量巨大的任務,讓系統始終處於高負荷量的執行狀態,並觀察記錄系統表現情況的測試方式。目的是找到系統所謂的「疲勞點」。

例如執行多少時間之後系統返回時間開始變大,系統什麼時候處理時間變得緩慢等都是考察的內容。

負載測試實現的前提是要先準備巨大的資料量,例如上百兆的檔案、上萬的使用者等。負載測試不會以使系統崩潰為目的,因此負載測試的期望值一般以滿足使用需求為主,不需要太誇張的數值。

三、壓力測試

任何能使系統崩潰的測試都可以稱之為壓力測試。這一點我在會上已經多次說過了。

2.效能測試包含了哪些測試(至少舉出3種)

壓力測試、負載測試、併發測試、可靠測試、失效恢復測試。

3.簡述效能測試的步驟

計畫測試—測試設計—建立指令碼—建立場景—分析結果

4.簡述使用loadrunner的步驟

指令碼錄製設定—錄製指令碼—除錯指令碼—場景設定—結果分析

5.什麼時候可以開始執行效能測試?

在產品相對比較文件,功能測試完成後。靈活性比較強。

6.loadrunner由哪些部件組成?

virtual user generator

contorller

running contorller

analysis

7.你使用loadrunner的哪個部件來錄製指令碼?

virtual user generator

8.loadrunner的哪個部件可以模擬多使用者併發下回放指令碼?

contorller

9.什麼是集合點?設定集合點有什麼意義?loadrunner中設定集合點的函式是哪個?

集合點:設定多個使用者到達某個使用者數量點集合,同時觸發乙個事務,以達到模擬真實環境下同時多個使用者操作

,同時模擬負載,實現效能測試的最終目的

lr_rendezvous(「集合點名稱」)

10.什麼是場景?場景的重要性有哪些?如何設定場景?

場景:模擬真實環境中,使用者執行狀況。

1.通過場景來模擬實際使用者的操作,效能測試結果才具有代表性。

2.在執行過程中也需要關注場景效能測試值,測試過程是否正常。

1.選擇場景中需要的指令碼

2.選擇為目標場景,還是指定的手工場景

3.設定使用者數、設定產生負載的裝置

4.設定執行策略

11.請解釋一下如何錄製web指令碼?

lr通過**請求,來捕獲資料報,來形成指令碼

12.為什麼要建立引數?如何建立引數?

引數:在環境變化時必須時指令碼具有環境變化的能力,就需要引數化(客戶端傳送到伺服器端)

1.確定要引數話的資料

2.設定規則形式來取值

13.什麼是關聯?請解釋一下自動關聯和手動關聯的不同。

關聯:很多構架用sessionid等方法標識不同任務和資料,應用在每次執行時方式傳送資料不完全相同,

需要利用的機制對錄製的指令碼進行處理,這種機制叫做關聯(服務端傳送到客戶端)

14.你如何找出**需要關聯?請給一些你所在專案的例項。

使用者登陸,

客戶端傳送請求後,服務端驗證正確性後,傳送給客戶端sessionid,是某種規則產生。

15.你在**設定自動關聯選項?

兩地方可以設定

1.設定允許錄製時進行自動關聯,可以自定義規則

2.錄製完成後,vuser-scan action for correlations

16.哪個函式是用來擷取虛擬使用者指令碼中的動態值?(手工關聯)

17.你在vugen中何時選擇關閉日誌?何時選擇標準和擴充套件日誌?

run-time,log,

當除錯指令碼時,可以只輸出錯誤日誌,當在場景找你管載入指令碼時,日誌自動變為不可用。

standard log option:選擇標準日誌時,就會在指令碼執行過程中,生成函式的標準日誌並且輸出資訊,供除錯用。大型負載測試場景不用啟用這個選項。

擴充套件日誌包括警告和其他資訊。大型負載測試不要啟用該選項。用擴充套件日誌選項,可以指定哪些附加資訊需要加到擴充套件日誌中

18.你如何除錯loadrunner指令碼?

vugen有兩個選項幫助除錯vuser指令碼。run step by step 命令和斷點(breakpoints)。option對話方塊中的除錯設定(debug setting)項,可以確定在場景執行過程中執行軌跡範圍。

除錯資訊寫在output視窗。可以用 lr_set_debug_messag函式在指令碼中手工設定資訊型別。如果我們只想接收到一小段指令碼的調式資訊。

19你在lr中如何編寫自定義函式?請給出一些你在以前進行的專案中編寫的函式。

在建立使用者自定義函式前我們需要和建立dll(external libary)。把庫放在vugen bin 目錄下。一旦加了庫

,把自定義函式分配做乙個引數。該函式應該具有一下格式:__declspec (dllexport) char* name>(char*, char*)。

20.在執行設定下你能更改那些設定?

21.你在不同的環境下如何設定迭代?

22.你如何在負載測試模式下執行功能測試?

23.什麼是逐步遞增?你如何來設定?

ramp up這個選項用於逐漸增加伺服器的虛擬使用者數或負載量。設定乙個初始值而且可以在兩個迭代之間設定乙個值等待。設定ramp up,請到『scenario scheduling options』。

24.以執行緒方式執行的虛擬使用者有哪些優點?

vugen提供了用多執行緒的便利。這使得在每個生成器上可以跑更多的虛擬使用者。如果是以程序的方式跑虛擬使用者

,為每個使用者載入相同的驅動程式到記憶體中,因此占用了大量的記憶體。這就限制了在單個生成器上能跑的虛擬

使用者數。如果按程序執行,給定的所有虛擬使用者數(比如100)只是載入乙個驅動程式例項到記憶體裡。每個程序共用父驅動程式的記憶體,因此在每個生成器上可以跑更多的虛擬使用者。

25.當你需要在出錯時停止執行指令碼,你怎麼做?

lr_abort函式放棄虛擬使用者指令碼的執行。說明虛擬使用者停止action的執行,直接執行vuser_end 然後結束執行。在出現錯誤情況下想手工放棄指令碼的執行,這個函式是有用的。

用這個函式停止指令碼時,vuser被指定為「stopped」狀態。為了這個函式起作用,開始時候就不能選擇run-time settings中的continue on error選項。

26.響應時間和吞吐量之間的關係是什麼?

吞吐量圖顯示的是虛擬使用者每秒鐘從伺服器接收到的位元組數。當和響應時間比較時,可以發現隨著吞吐量的降低,響應時間也降低,同樣的,吞吐量的峰值和最大響應時間差不多在同時出現。

軟體測試工程師與面試題

開發思想,邏輯能力 目錄測試用例 2 測試用例的設計 3 一 白盒技術 3 二 黑盒技術 4 面試題 9 測試用例 test case 是為某個特殊目標而編制的一組測試輸入 執行條件以及預期結果,以便測試某個程式路徑或核實是否滿足某個特定需求。指對一項特定的軟體產品進行測試任務的描述,體現測試方案 ...

軟體測試工程師面試題及答案

班級姓名 1.軟體測試就是為了驗證軟體功能實現是否正確,是否完成既定目標的活動所以軟體測試在軟體工程的後期才開始具體的工作。錯誤 1 正確2 錯誤 2.功能測試是系統測試的主要內容,檢查系統的功能 效能是否與需求規格說明相同。正確 1 正確2 錯誤 3.軟體就是程式。正確 1 正確2 錯誤 4.軟體...

軟體測試工程師面試題 有答案

1 軟體測試的目的是盡可能多的找出軟體的缺陷。y 2 beta 測試是驗收測試的一種。y 3 驗收測試是由終端使用者來實施的。n 4 專案立項前測試人員不需要提交任何工件。y 5 單元測試能發現約80 的軟體缺陷。y 6 評審是檢查源 是否達到模組設計的要求。n 7 自底向上整合需要測試員編寫驅動程...