壓力測試
# FastWeb壓力測試
- 適用平臺: WEB(桌面)
開發專案時,首要考慮的是系統的服務能力,每個WEB專案都需要能夠為多個使用者同時提供服務,系統不同使用者數也不同,一個企業內網的應用專案能支援10-50個併發一般就夠用了,但是一個網際網路應用專案可能需要同時為500-1000個使用者服務,甚至更多。爲了確保專案能夠在生產環境下為更多使用者提供流暢的服務,需要進行一些測試,首先就是分析資源的消耗,一個穩定高效的WEB服務系統需要通過多種技術來保證高效和充分利用資源。比如一個會話需要10MB記憶體,那麼只需要40個會話就會把400MB的記憶體用光,相同道理,系統的其他資源比如CPU、硬碟空間、硬碟I/O,資料庫連線數都需要通過壓力測試做效能評估和資源配置設計。
對於開發者來說很難通過桌面電腦來模擬生產環境,在少量的使用者訪問狀況下可能會運行的很完美,但是在生產環境下當併發訪問量快速提升到系統瓶頸時,系統的資源可能會很快耗盡直至系統宕機,在此提供了一個壓力測試工具LoadTest可用於檢測運行的穩定性。
需要注意的是使用壓力測試工具進行會話錄製要求被測試的FastWeb程式開啟會話錄製的選項,在主目錄下的UG.ini
檔案中修改[Options]
下的soAllowSessionRecording
選項為True
。重啟FastWeb進行測試。在生產環境的正式部署需要將soAllowSessionRecording
設定為False
后運行,而不可以使用會話錄製模式運行部署。
# 1. 界面介紹
使用滑鼠左鍵雙擊LoadTest.exe
打開壓力測試工具主界面。主界面上包括功能表欄、快捷圖示、設定、狀態等相關內容。
點選檔案
功能表欄,其中包含以下選項:
- 新建專案(V) Ctrl+N:新建會話錄製的專案。
- 打開專案(W) Ctrl+O:打開會話錄製專案。
- 儲存專案(X) Ctrl+S:儲存會話錄製專案。
- 另存為專案(Y)...:將專案檔案另存至其他目錄位置。
- 退出(Z) Alt+X:離開並退出壓力測試程式。
點選運行
功能表欄,其中包含以下選項:
- 開始(X):根據指定的Web程式資訊以及會話錄製記錄開始執行壓力測試操作。
- 錄製(Y):開啟瀏覽器並記錄會話過程中的操作資訊。
- 停止(Z):停止會話錄製並儲存會話錄製的記錄。
點選其他
功能表欄,其中包含以下選項。
- 調整註冊表設定(Z):調整服務端的註冊表的資訊以更加方便進行壓力測試的相關內容。
點選語言
功能表欄,可選擇壓力測試工具預設的語言項。
工具欄中的圖示如上圖所示,各圖示的說明如下:
圖示 | 名稱 | 說明 |
---|---|---|
退出 | 離開並退出壓力測試程式 | |
新建專案 | 新建會話錄製的專案 | |
打開專案 | 打開會話錄製的專案 | |
儲存專案 | 儲存會話錄製專案 | |
另存為專案 | 將專案檔案另存至其他目錄位置 | |
開始 | 根據指定的Web程式資訊以及會話錄製記錄開始執行壓力測試操作 | |
錄製 | 開啟瀏覽器並記錄會話過程中的操作資訊 | |
停止 | 停止會話錄製並儲存會話錄製的記錄 | |
顯示狀態監視器 | 打開程式的控制檯界面 |
設定欄中的相關欄位說明如下:
每次運行的總會話數:在進行壓力測試時啟動的連線會話數量。
最大工作執行緒:在進行壓力測試時啟動的執行緒的最大數量。
總運行次數:壓力測試進行的次數。
運行之間的延遲(秒):上一輪壓力測試結束至下一次壓力測試開始的時間間隔。
播放速度:壓力測試操作的速度,
Max Speed
:最塊速度。Real Time
:實際操作的速度。Real Time × 2
:實際操作速度的二倍速。Real Time × 4
:實際操作速度的四倍速。Real Time × 8
:實際操作速度的八倍速。Real Time / 2
:實際操作速度的二分之一。
併發請求(每個會話):設定每個會話同時發出請求的數量。
Web應用程式的Url:進行繪畫錄製或者壓力測試的地址。
可用的會話記錄:會話錄製記錄的列表。
狀態列中的相關欄位說明如下:
- 活動會話:正在進行中的會話數量。
- 完成會話:已經完成結束的會話數量。
- 活動執行緒:正在使用中的執行緒數量。
- HTTP錯誤:HTTP連線出錯的次數。
- 進度:壓力測試的進度百分比。
- 運行時間:壓力測試的運行時長,如果正處於壓力測試運行中則運行時間會增加。
- 剩餘運行次數:已結束會話但未關閉的會話數量。
- 等待下一次進行:剩餘的壓力測試運行數量。
# 2. 錄製一個會話
打開壓力測試工具,在Web應用程式的Url
欄位中填寫壓力測試對象的URL地址,例如本機的程式http://localhost:8888 (opens new window),點選[記錄]
按鈕,調起系統的預設瀏覽器進入主頁,根據需要隨意模仿使用者做各個功能的點選,所有的操作過程都將被工具錄製下來,繼續操作,直到覆蓋幾乎所有可重複操作的系統功能,然後切換至壓力測試工具,點選[停止]
按鈕停止錄製的會話,同時在可用的會話記錄
下拉選單中會新增一個剛剛新錄製的會話,點選「儲存」按鈕儲存新錄製的會話。
此處使用壓力測試工具來重複呼叫,就需要要求錄製的會話是可以重複執行的,即爲了做壓力測試而錄製的會話需要具有唯一性,只能產生相同的HTML內容,錄製會話時所有的操作過程和操作結果都需要是一致的和可自動回放的,否則將導致壓力測試無法進行。針對資料庫相關操作(插入,刪除)不應當作為會話錄製的選項,比如一個數據表,你的動作是刪除一條記錄,這種動作在壓力測試工具執行第二次時還要去刪除同一條記錄,但是此時該記錄已經不存在了,因此這種情況也不可行。
# 3. 運行壓力測試
運行壓力測試其實就是「回放」你錄製的會話,根據你錄製的會話,壓力測試工具能夠發出一系列的Ajax請求到服務端,這些請求將模擬多使用者的併發訪問,但是壓力測試工具的「回放」過程並不實際呼叫瀏覽器重新模擬使用者操作,而是向服務端發出一系列的Ajax資料包文。做壓力測試有幾個方面需要注意:
如需要測試移動端的程式需要在在錄製會話時將地址指定為移動端的URL地址。
調整相關參數。
- 每次運行的總會話數:每次建立多少會話,建議由低到高一點點增加。
- 最大工作執行緒:設定最大工作的執行緒數目。
- 總運行次數:錄製的會話要回放多少次。
- 運行之間的延遲(秒):每次回放之間的時間間隔,建議時長設定大於60秒。
- 播放速度:如果選擇Max Speed最大速度,在Ajax訪問之間將不加延時,如果選擇RealTime將和錄製的會話保持一致,可根據需求進行選擇。
在壓力測試過程中可以點選
顯示App狀態監視器
圖示將啟動伺服器監控界面。對於非集群方式設定的服務,可在打開的頁面中檢視相關資源資訊,如果是在集群模式下設定的服務端,則在HyperServer
的伺服器節點
中找到對應的從機伺服器節點並進入至控制檯界面進行檢視。點選
狀態
界面,檢視會話連線的情況。
Sessions(會話):目前運行的會話數,Peak
為運行結果中出現的最大的會話處理數。一般不能超過最大值。
Requests(請求):伺服器正在處理的Ajax請求數量,Peak
為運行結果中出現的最大的Ajax請求數量,該數量不應超過設定的最大值。
Purged Files/Folders(清除檔案/資料夾):不再屬於活動會話的目錄和檔案數(還沒有清除)。
Bytes(位元組):伺服器運行生命週期內已發送、已接收的位元組數,以及數據量的壓縮比。
Uptime(運行時間):伺服器已經運行了多久。如果運行時間較長的話建議及時進行維護操作,一般1個月需要進行一次。
- 點選
資源
標籤頁檢視資源佔用情況。
Memory(Internal)(記憶體(內部)):這個參數需要高度關注,尤其是在32位操作系統之下,按照理論32位應用程式最多隻能使用2G記憶體,但是實際上如果其使用量達到1.0GB-1.1GB時就意味著系統存在危險,此時可能會出現「Out of Memory 記憶體不足」的錯誤提示。
Memory(Process)(記憶體(程序)):程式整體使用的記憶體量(包括所依賴的其他DLL等)。按照理論32位應用程式最多隻能使用2G記憶體,但是實際上如果其使用量達到1.0GB-1.1GB時就意味著系統存在危險,此時可能會出現「Out of Memory 記憶體不足」的錯誤提示。
CPU Load(System)(CPU負載(系統)):正在使用的CPU情況,包含多核CPU。對於CPU負載空閑狀態下不超過1%,在高負載下不能長時間維持在100%,否則就可能會對網站的訪問產生影響。
GDI Objects(GDI對像):GDI對象是有限的系統資源,對於空閑的應用系統來說該參數不應該多於100。
USER Objects(使用者對像):使用者對象的資源。通常會略微低於GDI對象。
Handles(控制代碼):處理的資源指標。
Connections(Pooled)(連線池):設定連線資訊的相關指標。
- 壓力測試工具將在後臺運行,檢視日誌是獲取運行結果的唯一辦法。
# 4. 考慮工具防護
壓力測試工具在短時間內會發出大量訪問請求,這些訪問請求都來自相同的IP地址,操作系統和網路設備可能會把這種來自相同地址的訪問請求攔截掉,尤其是測試工具和測試目標運行在不同機器的時候,兩者都在同一臺機器上時不會有這個問題,但是也需要考慮防毒軟體或者防火墻可能帶來的本機攔截,這種問題一旦出現,就需要降低發送速度和增加每輪之間的間隔時間,並且相應的取消這些外圍軟硬體給測試造成的障礙。
從遠端客戶端運行Stress Test Tool可能會觸發防洪保護,但在同一桌面上同時運行uniGUI應用程式和Stress Test Tool應該可以正常工作,而不會觸發任何防洪保護機制。
除伺服器操作系統外,某些第三方保護軟體可能會為伺服器IP流量新增其他保護層,這可能會阻止來自Stress Test Tool的快速連續請求。在這種情況下,您需要通過將播放速度設定為實際時長
,或在兩輪壓力測試之間設定更長的間隔時間來降低播放速度,以允許請求通過防洪檢測層。
# 5. 其他
壓力測試工具每秒建立數百個HTTP請求,從而給被測試的伺服器帶來沉重的負擔。 這可能超出了運行壓力測試工具的操作系統的限制。 這些限制之一是TCP埠,預設情況下,操作系統將TCP埠限制為某個值。 爲了使Stress Test Tool順利運行,我們需要調整TCP埠限制並將其增加到更高的值。 這需要Windows註冊表中的一些註冊表設定。
壓力測試工具提供了自動更改相關注冊表的配置,在壓力測試程式的界面,選擇其他
-調整網路設定
。出現如下圖所示的對話方塊,點選[Yes]
按鈕修改註冊表。使用修改註冊表的相關功能前需要確保壓力測試工具以管理員模式下運行。
操作成功會顯示如地獄面,要求重新啟動伺服器以完成操作。