iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0

在掌握了 Locust 的基本用法與參數化測試之後,今天我們要進一步探討壓力測試中一個核心概念:負載模式(Load Mode)
不同的負載模式決定了虛擬使用者數量隨時間變化的方式,理解並善用它們,能幫助我們更精準地模擬真實世界的流量場景,並發現系統在各種負載條件下的表現與瓶頸。

什麼是負載模式?

負載模式描述了測試過程中虛擬使用者的數量如何隨時間變化。選擇正確的負載模式,能模擬出不同的真實使用場景,例如:

  • 漸進式流量增長:模擬流量隨時間逐步增加。
  • 突發流量:模擬活動檔期或新聞事件帶來的瞬間湧入。
  • 穩定負載:檢驗系統在長時間穩定狀態下的表現。
  • 波動流量:反映現實世界中自然出現的流量高低起伏。

這些模式不僅能揭露系統的性能瓶頸,也有助於驗證擴展性與穩定性。

Locust 提供的負載模式

Locust 內建兩種主要的負載增長模式:

1. Linear Load Mode(線性負載模式)

線性模式是 Locust 的預設行為。在此模式下,虛擬使用者會以固定速率連續增加,直到達到指定人數。

特點

  • 使用者數量平滑上升,負載逐漸加重。
  • 適合觀察系統性能隨負載逐步增加的趨勢。

常見應用場景

  • 容量測試:找出系統最大承受量。
  • 性能基準測試:建立性能基線。
  • 趨勢分析:觀察響應時間、吞吐量等指標隨負載變化的曲線。

執行範例

# 在 10 秒內增長至 50 使用者,並持續 5 分鐘
locust -f linear_load_test.py --headless --users 50 --spawn-rate 5 --run-time 5m --host http://localhost:8080

2. Step Load Mode(階梯負載模式)

階梯模式透過「分階段」增加虛擬使用者,每個階段會維持一段時間後再進入下一階段,使測試更接近真實流量高低起伏。

特點

  • 負載以「階梯」方式增加,每個階段設有穩定期。
  • 能觀察系統在不同負載等級下的穩定性。
  • 可精確控制每一階段的使用者數量與速率。

常見應用場景

  • 負載等級測試:檢驗系統在不同流量下的穩定性。
  • 容量規劃:評估各負載等級的資源需求。
  • 故障隔離:鎖定特定流量區間內的潛在問題。

啟用方式
在測試腳本中自訂 LoadTestShape 類別即可,例如:

from locust import LoadTestShape

class MyStepLoadShape(LoadTestShape):
    stages = [
        {"duration": 60, "users": 10, "spawn_rate": 5},
        {"duration": 120, "users": 50, "spawn_rate": 10},
        {"duration": 180, "users": 100, "spawn_rate": 20},
    ]

    def tick(self):
        run_time = self.get_run_time()
        for stage in self.stages:
            if run_time < stage["duration"]:
                return stage["users"], stage["spawn_rate"]
        return None

執行方式:

locust -f step_load_test.py

此時,Locust 會自動依照 StepLoadShape 中的邏輯執行,不需額外指定 --users--spawn-rate

Linear vs Step:模式比較

特性 Linear Load Mode Step Load Mode
壓力增長方式 平滑、連續 階段性、突發
系統適應節奏 漸進式 需快速適應
瓶頸發現能力 容量上限 特定等級問題
分析適合性 趨勢觀察 階段性分析
典型應用 容量/基準測試 真實流量模擬

進階負載塑形

除了線性與階梯模式,透過 LoadTestShape 也能實現更複雜的設計:

  • 波浪式負載:模擬日夜高低峰流量。
  • 尖峰測試:模擬促銷或熱門事件瞬間激增。
  • 恢復測試:模擬流量回落,檢驗系統恢復能力。

這些進階模式都能透過客製化 tick() 函式來靈活實現。

總結

今天我們探討了 Locust 的兩種核心負載模式:

  • 線性模式:適合用來建立基線與找出容量極限。
  • 階梯模式:更貼近真實場景,適合穩定性與資源需求分析。

選擇正確的負載模式,能讓壓力測試更貼近真實,並揭露不同層面的系統特性。


上一篇
Day 08 - 在 Locust 中使用參數化 (Parametrize) 進行測試
下一篇
Day10 - Locust 分散式模式 (Distributed Mode) 指南
系列文
Vibe Coding 後的挑戰:Locust x Loki 負載及監控13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言