一、什麼是效能測試?
效能測試是一種非功能性測試,主要目的是評估系統在特定負載條件下的響應時間、吞吐量、資源利用率和穩定性。效能測試不僅僅關注系統是否能正常執行,還關心在不同負載下是否會發生效能瓶頸,確保應用程式能夠應對大規模併發使用者的訪問。
二、效能測試流程
-
需求分析:
- 明確效能目標,比如最大支援使用者數、響應時間、吞吐量等。
-
測試設計:
- 設計測試場景,明確要測試哪些業務功能、使用者行為,以及對應的負載和壓力。
-
指令碼編寫(注意引數化、關聯):
- 根據業務場景編寫測試指令碼,確保指令碼能真實地模擬使用者行為。
-
執行測試:
- 按照設計好的場景執行測試,逐步增加負載以觀察系統效能變化。
-
監控與分析:
- 在測試期間監控伺服器效能,收集資料。
-
結果分析與最佳化:
- 透過分析測試結果,發現效能瓶頸,提出最佳化方案。
三、效能指標
吞吐量 (Throughput):
-
- 單位時間內系統能夠處理的請求數量或資料量。高吞吐量通常意味著系統具備更高的併發處理能力。
響應時間(一般不高於1.5s):
-
- 從使用者傳送請求到收到響應的時間。這個指標通常會影響使用者體驗。
資源利用率(一般低於80%):
-
- 監控CPU、記憶體、磁碟、網路頻寬等資源的使用情況,幫助識別是否有瓶頸。
成功率(一般是99.99%):
四、效能測試的分類
- 基準測試(Benchmark Testing):
- 目的是確定系統在單個介面單個使用者,沒有壓力下的基準效能指標。
-
負載測試 (Load Testing)(加壓):
- 目的是確定系統在期望的負載條件下的表現。它透過模擬預期的使用者數量來測試系統的響應時間和穩定性。
- 示例:測試電商網站在促銷活動時能否同時處理成千上萬的訂單請求。
-
壓力測試 (Stress Testing)(極限):
- 將系統推到極限,甚至超出預期負載,測試在異常高負載下系統的表現。
- 目的是找出系統的崩潰點以及在壓力下的恢復能力。
- 示例:測試系統在高流量、資料庫崩潰或硬體故障時的響應。
-
容量測試 (Capacity Testing):
- 測試系統能夠處理的最大負載,以確定其最大處理能力。
- 幫助確定系統是否需要擴充套件資源來處理更多使用者。
-
穩定性測試 (Stability/Soak Testing)(恆定壓力):
- 長時間執行負載測試,檢查系統是否會在持續高負載下出現記憶體洩漏、效能下降等問題。
- 示例:模擬網站24小時不停歇地處理請求,檢查記憶體使用情況。
-
峰值測試 (Spike Testing):
- 測試系統在短時間內大量請求的情況下是否能夠快速適應並恢復,模擬突然的流量激增情況。
五、效能測試工具:
-
JMeter:
- 一個開源的效能測試工具,適用於Web應用、資料庫、FTP伺服器等的測試。
-
LoadRunner:
- 商業級效能測試工具,功能強大,支援廣泛的協議和複雜場景的模擬。
-
Gatling:
- 針對開發者的開源效能測試工具,基於Scala編寫,擅長高併發測試。
-
k6:
- 現代化的開源負載測試工具,提供指令碼化和雲端整合,適用於測試API和微服務。
六、定位效能問題:
- 程式碼層:如:日誌、exception、error。
- 資料庫層:如:慢查詢、資料連線池、死鎖。
- 架構層:JVM、中介軟體nginx、MQ。
- 配置層:伺服器。