一)性能的定義
性能:通過一系列指標來衡量系統的及時性、處理能力等特性。最重要的兩個重要指標是響應時間和吞吐量。
二)性能的重要指標
1. 響應時間
-
- 響應時間的重要性
響應時間與用戶體驗息息相關,響應時間對產品有很大的影響。響應時間越短,性能表現越好
-
- 響應時間的度量方式
響應時間是指從客戶端發起一個請求開始,到客戶端接收到從服務端返回的最後一個字節結束,這個過程所耗費的時間。包括網絡傳輸時間和服務處理時間。
2.吞吐量
-
- 吞吐量的度量方式
系統在單位時間內正確處理的客戶端請求的數量
tps:系統每秒/單位時間內處理的事務數
qps:系統每秒/單位時間內處理的請求數
kb/s:服務端每秒向客戶端返回的數據量
3.併發用戶數
系統可以同時承載的正常使用系統功能的用戶的數量
三)性能測試的重要性
1.提前識別性能缺陷
系統存在性能缺陷可能導致系統癱瘓不可用。性能測試能提前識別性能缺陷,規避性能風險,避免出現癱瘓。
2.提前識別穩定性缺陷
系統存在穩定性缺陷,短時間內正常運行,長時間運行會出錯。性能測試能檢驗產品的穩定性,保障產品長時間無故障運行。
3.驗證系統是否能支撐預期用戶量
系統無法支撐過量用戶訪問時,當過量用戶訪問系統時,系統出錯甚至崩潰,大大傷害用戶體驗。性能測試能模擬大量用戶訪問,驗證系統是否能支撐預期用戶量,如果不能,提前進行性能優化,避免上線後無法支撐。
四)性能測試的過程
1.制定預期目標
-
- 系統每秒支撐 1w 用戶提交數據
- 提交數據響應時間不超過2s
2.需求分析
-
- 明確測試對象(對訪問頻繁的頁面進行性能測試,比如活動頁、用戶反饋頁)
- 明確測試內容(吞吐量、響應時間)
3.工具模擬
-
- 模擬 1w 用戶提交數據
- 得到測試數據
4.測試分析
-
- 達到預期:每秒成功完成 1w 用戶提交訂單且提交訂單響應時間不超過 2s
- 未達到預期:1w 個用戶提交訂單,出現大量失敗或提交訂單響應時間大於 2s
五)Jmeter
1.簡介
是一個基於Java的性能測試工具,免費、開源、跨平臺、簡單易上手。
2.安裝
mac版
下載:https://pan.baidu.com/s/1b11U70,解壓後執行bin文件夾下 Jmeter.sh 即可。
3.使用
(1)配置代理服務器
-
-
Jmeter代理服務器
-
端口:jmeter代理服務器監聽的端口
目標控制器:測試計劃–線程組,錄製下來的請求會保存在
分組:每組包含一個控制器,將錄製下來的請求進行適當的分組。
包含模式:請求的 url 符合正則表達式纔會被錄製
排除模式:壓測時不會壓測靜態資源(css、jpeg等),可以用來排除該類資源的請求。
-
-
本地代理服務器:
-
端口號與jmeter端口一致,127.0.0.1。
(2)錄製請求 -- 測試組件簡介
- tips:
- 瀏覽器由緩存機制,如果已經打開過某一頁面,在次打開該頁面時不會發送某些資源的請求,會導致漏掉某些請求,所以錄製請求前一定要清理瀏覽器緩存。
- 錄製請求時不能過快,確保每一個操作的請求全部發送完畢再進行下一個操作,避免只有一個簡單控制器,不方便管理。
-
-
線程組
-
線程組是 Jmeter 最核心的測試組件,用來管理執行測試腳本的Jmeter線程(Jmeter線程是用來執行測試腳本里面的操作)
線程數:Jmeter 線程的數量,決定了Jmeter 使用多少個線程同時執行測試腳本,也就是併發數,可以用來模擬併發用戶數。
Ramp-Up Period:啓動所有線程花費的時間,防止瞬間給被測服務器施加過大壓力,讓壓力平緩的增加。eg:線程數爲10,Ramp-Up Period爲10,代表10s的時間啓動10個線程,每秒鐘增加一個線程。
循環次數:每個線程重複執行多少次。
調度器:詳細設置線程調度的啓動和結束時間。
-
-
簡單控制器
-
簡單控制器是一個邏輯上的歸納,可以將每一個請求操作錄製在一個獨立的簡單控制器中,方便管理。eg:打開主頁過程中,瀏覽器向服務端發送的請求。
-
-
採樣器
-
用來告訴Jmeter向服務端發送一次請求,並等待服務端的響應。請求的url、協議、參數等都在採樣器中設置。最常用的採樣器就是HTTP請求。
HTTP請求
-
-
斷言
-
判斷採樣器的請求響應結果是否正確。。
最常用的是響應斷言,可以判斷服務端返回的響應碼、響應文本、響應頭等。
apply to:指定斷言的作用範圍,一般選擇對當前採樣器生效。
要測試的相應字段:測試要檢查的目標。(響應文本:服務端返回數據;響應代碼:http返回碼;響應信息:http響應信息)
-
-
CSV Data Set Config
-
可以將數據參數化,方便使用不同的數據進行測試。本地準備 txt 文件,在 CSV Data Set Config 中正確配置即可。
Filename:本地文件路徑。
Variable Names:文件的每一列的取的變量名。eg:username,password
Delimiter:文件每一列使用的分隔符。
使用時直接取 ${username},${password},線程會順序讀取文件中的每一行。
-
-
HTTP Cookie 管理器
-
爲http請求進行cookie管理。可以模擬瀏覽器的行爲,自動存儲服務器返回的的cookie信息,後續再向這個服務器發送請求會自動帶上相應的cookie。 Cookie 管理器爲每個Jmeter線程管理獨立的cookie。
4.測試結果收集
(1)監聽器
Jmetr 提供各種監聽器來收集、展示、保存測試結果。最常用的三種:查看結果樹、聚合報告、響應時間曲線。
(2)查看結果樹
查看結果樹用來記錄每個請求的詳細信息,開銷較大,可以根據測試需求酌情使用。
a. 請求列表:綠色爲成功,紅色爲失敗。判斷結果依據斷言是否成功。
b, 取樣器結果:保存相應請求的數據。
- Thread Name:執行請求的線程組
- Sample Start:請求的觸發時間
- Load Time:請求從發出到接收到完整返回結果的時間,即響應時間。
- Latebcy:請求從發出到開始接受返回結果的時間,一般略小於 Load Time。
- Connect Time:Jmeter 和服務器建立連接花費的時間。
- 返回頭信息
c. 請求、響應數據
(3)聚合報告
爲每種請求分別統計聚合結果,包括請求執行的次數、響應時間、錯誤率等。
Label:請求名稱
Sample:請求次數
Avarge:平均響應時間
Median:響應時間的50值
90%Line、95%Line、99%Line:響應時間的90、95、99值
Min、Max:響應時間的最小值和最大值
Error:錯誤率,請求失敗率。
Throughput:吞吐量
KB/sec:請求每秒傳輸的字節數
(4)響應時間曲線
可以記錄每個請求的響應時間趨勢圖
Interval:對設置的時間內的響應時間取平均值進行展示
過濾標籤:eg:^(210).*?
六)壓測執行方案
1.測試執行
使用梯度壓力測試,併發用戶數梯度增加,得到全面的測試數據,更好的分析性能測試結果。
2.壓測停止時間
吞吐量不再增加,或增加很少,或出現下降情況。