Locust 進行分散式負載測試

chester·chen發表於2024-09-10

什麼是 Locust

Locust 是一個開源的負載測試工具,用於測試網站和其他應用程式的效能。它透過編寫 Python 指令碼來定義虛擬使用者的行為,模擬這些使用者對目標系統發起請求。Locust 提供了一個直觀的 Web 介面,允許使用者實時監控測試進度和效能指標。

主要特性包括:

  • Python 編寫測試指令碼:使用 Python 指令碼定義虛擬使用者行為,方便且靈活。
  • 實時監控:透過 Web 介面檢視實時測試結果,包括請求速率和響應時間等。
  • 分散式測試支援:可以在多臺機器上執行虛擬使用者,模擬更高負載的測試場景。

Locust 的優勢

  1. 易於使用:由於 Locust 使用 Python 編寫測試指令碼,開發者可以快速上手並編寫複雜的測試用例。
  2. 高效能:Locust 能夠模擬大量併發使用者,適合大規模負載測試。
  3. 實時監控和分析:提供詳細的實時測試報告和效能指標,幫助使用者快速定位效能瓶頸。
  4. 分散式測試:支援將測試分佈到多臺機器上,擴充套件測試能力以滿足需求。
  5. 可擴充套件性:透過外掛系統可以擴充套件 Locust 的功能,適應不同的測試需求。

如何部署 Locust

Locust 的部署過程較為簡單,以下是基本的步驟:

  1. 安裝 Locust

    pip install locust
  2. 編寫測試指令碼:建立一個 Python 檔案(如 locustfile.py),定義虛擬使用者的行為。例如:

    from locust import HttpUser, task, between
    
    class WebsiteUser(HttpUser):
        wait_time = between(1, 5)
    
        @task
        def load_main_page(self):
            self.client.get("/")
  3. 啟動 Locust

    locust -f locustfile.py

    這將啟動 Locust 並在預設埠 8089 上啟動 Web 介面,您可以在瀏覽器中訪問 http://localhost:8089 來配置和啟動測試。

如何將 Locust 部署到 Kubernetes (K8s)

在 Kubernetes 中部署 Locust 可以利用其彈性和分散式特性,支援大規模負載測試。部署過程涉及到兩個主要元件:Master 節點和 Worker 節點。下面是詳細的配置步驟:

1. 建立 Dockerfile

首先,建立一個 Dockerfile,將 Locust 測試指令碼直接包含在 Docker 映象中:

# 使用官方 Locust 映象作為基礎映象
FROM locustio/locust

# 將 Locust 測試指令碼複製到映象中的 /mnt/locust 目錄
COPY locustfile.py /mnt/locust/locustfile.py

# 設定預設命令,Master 和 Worker 節點會根據需要在 Kubernetes 部署時覆蓋
CMD ["locust"]

2. 構建 Docker 映象

在包含 Dockerfile 和 Locust 測試指令碼(locustfile.py)的目錄下,執行以下命令構建 Docker 映象:

docker build -t my-locust-image .

3. 建立 Kubernetes 部署檔案

a. Locust Master 部署檔案 locust-master-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: locust-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: locust
      role: master
  template:
    metadata:
      labels:
        app: locust
        role: master
    spec:
      containers:
        - name: locust-master
          image: my-locust-image
          command: ["locust", "--master"]
          ports:
            - containerPort: 8089
              name: http
            - containerPort: 5557
              name: communicate

b. Locust Worker 部署檔案 locust-worker-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: locust-worker
spec:
  replicas: 3
  selector:
    matchLabels:
      app: locust
      role: worker
  template:
    metadata:
      labels:
        app: locust
        role: worker
    spec:
      containers:
        - name: locust-worker
          image: my-locust-image
          command: ["locust", "--worker", "--master-host=locust-master"]

c. 建立 Locust Master 服務檔案 locust-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: locust-master
spec:
  ports:
    - port: 8089
      targetPort: 8089
      name: http
    - port: 5557
      targetPort: 5557
      name: communicate
  selector:
    app: locust
    role: master

4. 部署到 Kubernetes

應用這些 Kubernetes 配置檔案以部署 Locust:

kubectl apply -f locust-master-deployment.yaml
kubectl apply -f locust-worker-deployment.yaml
kubectl apply -f locust-service.yaml

5. 訪問 Locust Web 介面

使用 kubectl port-forward 暴露 Locust Master 服務,以便訪問 Locust Web 介面:

kubectl port-forward service/locust-master 8089:8089

總結

Locust 是一個功能強大的負載測試工具,提供了易用的 Python 指令碼介面和實時監控功能。將 Locust 部署到 Kubernetes 中,能夠利用 Kubernetes 的彈性和擴充套件性進行大規模負載測試。透過在 Docker 映象中包含 Locust 測試指令碼,簡化了部署過程,並提高了配置的一致性和管理的便捷性。藉助 Locust 和 Kubernetes,您可以有效地測試系統的效能,確保應用程式在高負載情況下的穩定性和可靠性。

相關文章