使用Locust進行負載測試


任何應用程式的效能都必須透過負載測試進行評估和改進。我們利用它來評估我們的應用程式是否能夠承受實際使用的需求。Locust 是每個開發人員工具箱中用於高效負載測試的強大工具。藉助這個免費的開源 Python 程式,您可以模擬數百萬個併發使用者,並使用 Python 程式碼描述使用者行為。本文將作為您使用 Locust 進行負載測試的全面指南,包含豐富的示例。

什麼是 Locust?

Locust 是一種分散式、可擴充套件且使用者友好的負載測試工具。模擬流量模式有助於工程師瞭解系統可以支援多少併發使用者。Locust 的最大優勢在於使用 Python 程式碼來描述使用者行為,使其具有極強的靈活性和可配置性。

安裝 Locust

在開始安裝 Locust 之前,請確保您已安裝 Python 3.6 或更高版本。然後可以使用 Pip 安裝 Locust

pip install locust

Locust 入門

要首次使用 Locust,您必須在一個 Python 檔案中提供使用者行為。此檔案列出了模擬使用者將執行的操作,有時稱為 locustfile.py。

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
   wait_time = between(5, 15)
    
   @task
   def homepage(self):
      self.client.get("/")

在此示例中,模擬使用者的行為由 WebsiteUser 定義。在使用者等待 5 到 15 秒(wait_time = between(5, 15))後,執行 homepage 任務,並向主頁傳送 GET 請求 (self.client.get("/"))。

執行 Locust 測試

導航到包含 locustfile.py 的目錄,併發出 locust 命令來執行 Locust 測試

locust

然後啟動 Locust 的 Web 介面,其地址為 https://:8089。在這裡,您可以定義目標網站、要模擬的使用者總數以及生成速率。

更復雜的使用者行為

在模擬更復雜的使用者行為時,Locust 的優勢真正體現出來。

示例 1:多個任務

可以在單個使用者類中定義多個任務。預設情況下,Locust 隨機選擇要執行的任務,並均勻地分配它們。

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
   wait_time = between(5, 15)
    
   @task(2)
   def homepage(self):
      self.client.get("/")
        
   @task(1)
   def about_page(self):
      self.client.get("/about/")

在此示例中,由於設定的權重 (@task(2) 和 @task(1)),homepage 任務完成的可能性是 about_page 任務的兩倍。

示例 2:POST 請求

Locust 還可以模擬 POST 請求,POST 請求通常用於傳送表單提交。

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
   wait_time = between(5, 15)
    
   @task
   def login(self):
      self.client.post("/login/", {"username":"user", "password":"pass"})

在此示例中,login 任務向 /login/ URL 發出包含使用者名稱和密碼的 POST 請求。

示例 3:順序任務

可以使用 @seq_task 裝飾器來實現順序任務。

from locust import HttpUser, task, between, SequentialTaskSet

class UserBehavior(SequentialTaskSet):
    
   @task
   def homepage(self):
      self.client.get("/")
        
   @task
   def about_page(self):
      self.client.get("/about/")

class WebsiteUser(HttpUser):
   tasks = [UserBehavior]
   wait_time = between(5, 15)

在這種情況下,UserBehavior 擴充套件 SequentialTaskSet 而不是 HttpUser。由於此類,homepage 任務始終在 about_page 任務之前執行。

結論

負載測試是軟體開發生命週期的一部分,Locust 提供了一個靈活且使用者友好的工具,可用於高效的負載測試。藉助其基於 Web 的介面和基於 Python 的使用者行為指令碼,您可以修改負載測試以滿足應用程式的特定需求。隨著您越來越熟悉基本功能,您可以開始探索更具挑戰性的任務、POST 請求和順序任務。

更新於:2023-07-18

1K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告