1. 程式人生 > 程式設計 >基於python locust庫實現效能測試

基於python locust庫實現效能測試

Locust(俗稱 蝗蟲),一個輕量級的開源壓測工具,用Python編寫。

安裝

pip3 install locust

Python編寫效能測試指令碼

import json

from locust import HttpLocust,TaskSet,task

"""
建立後臺管理站點壓測類,需要繼承TaskSet
可以新增多個測試任務
"""


class AdminLoadTest(TaskSet):

  # 使用者執行task前呼叫
  def on_start(self):
    pass

  # 使用者執行task後呼叫
  def on_stop(self):
    pass

  @task(1)
  def download(self):
    header = {"Content-Type": "application/json"}
    data = {
      "staff_id": 94
    }
    data = json.dumps(data)
    self.client.post('/get_know_list',data=data,headers=header)

  @task(2)
  def body(self):
    header = {"Content-Type": "application/json"}
    data = {
      "staff_id": 94
    }
    data = json.dumps(data)
    self.client.post('/get_answer_list',headers=header)


class RunLoadTests(HttpLocust):
  """
  建立執行壓測類
  """
  task_set = AdminLoadTest
  min_wait = 1000
  max_wait = 50000
  weight = 1
if __name__ == "__main__":
  import os

  os.system("locust -f test_download.py --host=http://127.0.0.1:5000")

AdminLoadTest類繼承TaskSet類,用以描述使用者行為:

使用@task裝飾的方法為一個事務,方法的引數用於指定該行為的執行權重,引數越大每次被使用者執行的概率越高,預設為1(事務blogs()被執行的概率是bky_index()的2倍);

  • on_start():每個locust使用者執行測試事務之前執行一次,用於做初始化的工作,如登入;
  • on_stop(): 每次執行完測試事務之後執行一次。
  • RunLoadTests類用於設定效能測試屬性:
  • task_set:指向定義的一個使用者行為類;
  • min_wait:模擬使用者在執行每個任務之間等待的最小時間,單位為毫秒;
  • max_wait:模擬使用者在執行每個任務之間等待的最大時間,單位為毫秒(min_wait和max_wait預設值為1000,因此,如果沒有宣告min_wait和max_wait,則locust將在每個任務之間始終等待1秒。);
  • weight:一個檔案中有多個locust使用者類時,指定使用者類的權重(預設新增locust使用者時會隨機選擇一個使用者類);

啟動

終端進入程式碼目錄,輸入 locust -f start.py --host=http://localhost:5000

使用os.system在程式碼裡面寫入啟動命令

各個引數的含義

  • -f : 指定要執行的測試指令碼檔案
  • --host : 要載入主機的URL字首,不指定時,讀取WebsiteUser類中定義的host;
  • --master : 單臺機器不能模擬更多使用者時,分散式模式,通過--master指定主程序;開啟Locust的web介面

使用上面的命令列啟動Locust之後,應該開啟瀏覽器並將其指向http://localhost:8089/(如果您在本地執行Locust)。

Number of total users to simulate : 設定模擬使用者數;Hatch rate(users spawned/second) : 每秒產生(啟動)的虛擬使用者數;

基於python locust庫實現效能測試

設定好模擬使用者後,點選Start swarming開始測試,測試結果如下:

基於python locust庫實現效能測試

  • Type   :請求的型別,如GET/POST;
  • Name :請求的路徑;
  • request :已發出請求數量;
  • fails :請求失敗的數量;
  • Median :響應時間的中間值(單位:毫秒);
  • Average :平均響應時間(單位:毫秒);
  • Min :請求的最小響應時間(單位:毫秒);
  • Max :請求的最大響應時間(單位:毫秒);
  • Content Size:單個請求的大小(單位:位元組);
  • reqs/sec:每秒鐘請求的個數;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。