首頁 > 軟體

初學 Python 效能測試工具 Locust

2021-05-19 16:30:19

效能測試工具有很多,選擇一款適合當前項目的是關鍵,以下為大家介紹效能測試工具 Locust 。

Locust是一款Python技術棧的開源的效能測試工具。Locust直譯為蝗蟲,寓意著它能產生蝗蟲般成千上萬的併發使用者。Locust 是非常簡單易用,分散式,使用者負載測試工具。Locust 主要為網站或者其他系統進行負載測試,能測試出一個系統可以併發處理多少使用者。Python的魔力在於化繁為簡,基於Python的Locust也能給仍然困惑於效能測試的我們帶來啟發,值得嘗試

Locust特點

以純Python方式編寫使用者指令碼,提供極大自由度。使用者指令碼可以序列方式編寫,Locust會通過輕量級程序/協程產生併發,無需自己做併發程式設計。併發量大,藉助於gevent庫,Locust能產生成千上萬併發請求。開銷小,Locust使用者運行時開銷很小。良好的Web UI對效能結果實時監測。能測任何系統任何協議,只需要寫個client即可。開放REST API,盡情發揮。安裝Locust

需要Python版本3.6及以上。

執行pip命令:

$pip install locust

驗證是否安裝成功:

$ locust -V

安裝時會一併安裝依賴庫:Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth,ConfigArgParse, pyzmq, psutil, locust提示如上,能看出來flask為Locust提供了Web功能。

快速上手

使用Locust一般按照以下步驟進行:

編寫Python使用者指令碼。使用 locust 命令執行效能測試。(可選)通過Web介面監測結果。示例程式碼如下,新建locustfile.py檔案:

import timefrom locust import HttpUser, task, betweenclass QuickstartUser(HttpUser):wait_time = between(1, 2.5) @task def hello_world(self): self.client.get("/hello") self.client.get("/world") @task(3) def view_items(self): for item_id in range(10): self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})

路徑切換到locustfile.py檔案所在目錄,執行命令:

$ locust

也可以通過-f 指定某個目錄檔案:

$ locust -f locust_files/my_locust_file.py

運行後,開啟http://127.0.0.1:8089看到Web介面:

填寫資訊後,就能開始壓測了。Web介面提供了結果統計資料:

和效能指標走勢圖:

指令碼解析

示例指令碼解析如下:

# Locust使用者指令碼就是Python模組

import timefrom locust import HttpUser, task, between# 類繼承自HttpUserclass QuickstartUser(HttpUser):# 每個模擬使用者等待1~2.5秒 wait_time = between(1, 2.5) # 被@task裝飾的才會併發執行 @task def hello_world(self): # client屬性是HttpSession例項,用來發送HTTP請求 self.client.get("/hello") self.client.get("/world") # 每個類只會有一個task被選中執行 # 3代表weight權重 # 權重越大越容易被選中執行 # view_items比hello_wolrd多3倍概率被選中執行 @task(3) def view_items(self): for item_id in range(10): # name參數作用是把統計結果按同一名稱進行分組 # 這裡防止URL參數不同會產生10個不同記錄不便於觀察 # 把10個彙總成1個"/item"記錄 self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) # 每個模擬使用者開始運行時都會執行 def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})

小結

本文先大概瞭解了Locust的背景和生態,它是值得學習的,對於Python技術棧來說更加如此。接著介紹了使用pip命令安裝Locust,其中發現順帶安裝了flask,Locust的Web功能是flask提供的,從源頭開始,適合入門朋友瞭解學習。


IT145.com E-mail:sddin#qq.com