效能測試驗證系統在各種負載條件下的表現,是確保系統穩定性和用戶體驗的關鍵環節。

效能測試指標#

三大核心指標#

指標定義說明
並行用戶數同時使用系統的用戶數量施加壓力的強度
回應時間從請求發出到收到回應的時間用戶體驗的直接指標
系統吞吐量單位時間處理的請求數量系統處理能力

體檢中心的類比#

把體檢中心想象成軟體系統:同時在體檢的人數是並行用戶數,完成體檢的時間是回應時間,每小時完成體檢的人數是系統吞吐量。

三者之間的關係#

負載與效能的關係曲線:

吞吐量
  │     ┌─────────┐
  │    /          \
  │   /            \
  │  /   線性增長    \
  │ /     區間       \ 過飽和區間
  │/                  \
  └────────────────────────→ 並行用戶數
  空閒區間     ↑
              拐點

回應時間
  │                    /
  │                   /
  │                  /
  │         ────────/
  │ ───────/
  └────────────────────────→ 並行用戶數
區間特徵測試目的
空閒區間用戶少,回應快,吞吐量低基準測試
線性增長區間吞吐量隨用戶數線性增長效能測試
拐點系統趨於飽和壓力測試
過飽和區間回應時間無限長,系統崩潰極限測試

負載測試 vs 壓力測試#

測試類型目標負載設計關注點
負載測試驗證系統在預期負載下的表現線性增長區間回應時間、吞吐量
壓力測試找到系統的極限和瓶頸拐點及以上系統穩定性、恢復能力

七種常用效能測試方法#

效能測試方法
├── 後端效能測試 ─────── 模擬並行用戶驗證效能需求
├── 前端效能測試 ─────── 頁面渲染、資源加載最佳化
├── 程式碼級效能測試 ───── 單元級別的效能評估
├── 壓力測試 ─────────── 驗證臨界飽和狀態的穩定性
├── 組態測試 ─────────── 不同組態下的效能表現
├── 並行測試 ─────────── 發現資源競爭和死鎖
└── 可靠性測試 ────────── 長時間執行的穩定性

效能測試工具#

後端效能測試工具比較#

工具類型適用場景特點
JMeter開源互聯網企業免費、可擴展、支持海量並行
LoadRunner商業傳統企業功能強大、易用性好
Gatling開源開發者友好DSL 腳本、實時監控
k6開源現代 DevOpsJavaScript 腳本、雲原生

選型建議:互聯網企業傾向選擇 JMeter(免費、支持海量並行),傳統企業傾向選擇 LoadRunner(功能強大、官方支持)。

效能測試工具原理#

┌─────────────────────────────────────────────────────────┐
│                    效能測試工具架構                      │
│                                                         │
│  ┌─────────────────┐         ┌─────────────────────┐   │
│  │ 虛擬用戶腳本生成器 │         │    系統監控器        │   │
│  │ (錄製/開發腳本)   │         │ (收集效能指標)       │   │
│  └────────┬────────┘         └──────────┬──────────┘   │
│           │                             │              │
│           ↓                             │              │
│  ┌─────────────────┐                    │              │
│  │    壓力控制器     │←─────────────────┘              │
│  │ (調度協調)        │                                 │
│  └────────┬────────┘                                  │
│           │                                           │
│     ┌─────┴─────┐                                     │
│     ↓           ↓                                     │
│  ┌──────┐   ┌──────┐                                 │
│  │壓力機1│   │壓力機2│  ... (壓力產生器)               │
│  └───┬──┘   └──┬───┘                                 │
│      │         │                                      │
│      └────┬────┘                                      │
│           ↓                                           │
│  ┌─────────────────┐                                  │
│  │    被測系統       │                                 │
│  └─────────────────┘                                  │
│                                                         │
│  ┌─────────────────┐                                  │
│  │ 測試結果分析器    │ (生成報告、資料分析)              │
│  └─────────────────┘                                  │
└─────────────────────────────────────────────────────────┘

效能測試場景設計#

效能測試場景定義了測試負載的具體內容:

# 效能測試場景示例
scenario:
  name: "電商大促場景"

  # 用戶組態
  users:
    total: 1000
    ramp_up: "5 users/second"
    hold_duration: "30 minutes"
    ramp_down: "10 users/second"

  # 業務配比
  operations:
    - name: "瀏覽商品"
      percentage: 50%
    - name: "搜索商品"
      percentage: 30%
    - name: "下單購買"
      percentage: 15%
    - name: "支付"
      percentage: 5%

  # 思考時間
  think_time: "3-5 seconds"

  # 監控組態
  monitoring:
    - "CPU 使用率"
    - "內存使用率"
    - "資料庫連線數"
    - "回應時間分布"

前端效能測試#

前端效能指標#

指標說明理想值
First Byte Time首字節時間< 1s
Start Render開始渲染時間< 3s
First Interactive最早可交互時間< 5s
Speed Index頁面渲染速度指數越小越好

前端最佳化規則(雅虎 35 條精選)#

這些規則已經過實踐驗證,能顯著提升前端效能。

規則說明
減少 HTTP 請求合併圖片、腳本、樣式表
減少 DNS 查詢減少不同域的資源引用
使用 CDN靜態資源就近獲取
Gzip 壓縮壓縮文本類資源
壓縮圖片使用適當格式和尺寸
快取靜態內容利用瀏覽器快取

前端效能測試工具#

工具用途
WebPagetest全面的前端效能分析
LighthouseChrome 內建效能審計
PageSpeed InsightsGoogle 的頁面速度分析

全鏈路壓力測試#

全鏈路壓力測試是在真實生產環境中進行的,技術難度高,需要多方配合才能順利完成。

什麼是全鏈路壓力測試?#

基於真實生產環境,模擬海量並行用戶請求和資料,對整個業務鏈路進行壓力測試,找出所有潛在效能瓶頸點。

單系統壓力測試的局限性#

問題說明
假設依賴無限單系統測試假設依賴系統能力無限
缺少呼叫瓶頸系統間呼叫問題無法體現
缺少資源競爭網路帶寬、文件句柄競爭無法體現
非核心系統遺漏只測核心系統,遺漏其他瓶頸

全鏈路壓力測試的技術難點#

全鏈路壓力測試四大難點
├── 海量並行請求的發起
│   ├── JMeter 分布式方案
│   └── Jenkins Job 調度控制
├── 流量和資料隔離
│   ├── 資料標記
│   └── 影子資料庫
├── 業務負載模擬
│   ├── 歷史流量錄製
│   └── 用戶模型估算
└── 資料清理
    └── 自動化批量清理

流量隔離方案#

┌─────────────────────────────────────────────────────┐
│                    全鏈路壓力測試                        │
│                                                     │
│   正常請求 ─────────────→ 正常資料庫                 │
│       │                       │                    │
│       └──(無標記)──────────────┘                    │
│                                                     │
│   壓力測試請求 ─────────────→ 影子資料庫                 │
│       │    (帶特殊標記)        │                    │
│       └────────────────────────┘                    │
│                                                     │
│   中間件改造:識別並傳遞特殊標記,路由到正確的資料庫    │
└─────────────────────────────────────────────────────┘

效能瓶頸分析#

常見瓶頸類型#

瓶頸類型表現排查方向
CPU 瓶頸CPU 使用率持續 > 80%演算法最佳化、線程組態
內存瓶頸內存使用率高、頻繁 GC內存洩漏、快取策略
IO 瓶頸磁盤 IO 等待高索引最佳化、讀寫分離
網路瓶頸帶寬飽和、延遲高CDN、壓縮、連線池
資料庫瓶頸慢查詢、連線數滿SQL 最佳化、分庫分表

效能分析方法#

效能瓶頸定位流程:
1. 監控系統整體資源使用情況
2. 定位資源使用例外的服務
3. 分析該服務的呼叫鏈路
4. 找出耗時最長的操作
5. 深入分析程式碼或 SQL
6. 最佳化並驗證效果

效能測試四大應用領域#

領域目標常用方法
能力驗證驗證是否滿足效能需求後端效能測試、壓力測試
能力規劃評估系統容量和擴展性壓力測試、組態測試
效能調校解決效能瓶頸問題全部七種方法
缺陷發現發現內存洩漏、死鎖等並行測試、壓力測試

效能測試最佳實踐#

效能測試不是一次性活動,而應該融入持續整合流程,及早發現效能退化。

效能測試流程#

效能需求獲取
    ↓
效能場景設計
    ↓
效能測試腳本開發
    ↓
效能場景實現
    ↓
效能測試執行
    ↓
效能結果報告分析 ← 最關鍵的環節
    ↓
效能最佳化
    ↓
再驗證

關鍵注意事項#

  1. 測試環境:盡量與生產環境一致
  2. 資料準備:背景資料量要接近生產環境
  3. 監控全面:監控所有相關服務器的指標
  4. 基線對比:建立效能基線,對比每次測試結果
  5. 持續測試:將效能測試納入 CI/CD 流程