我個人在性能測試工作中,負載生成工具使用的大多都是jmeter,現在來看看locust,因為可以用python編寫腳本,進行定制化,而我自己就是用python比較多,所以用一下這個性能工具
官網:https://www.locust.io/
官方文檔:https://docs.locust.io/en/stable/index.html
一、認識Locust
1、介紹
Locust是一款易於使用的分布式負載測試工具,完全基於事件,即一個locust節點也可以在一個進程中支持數千並發用戶,不使用回調,通過gevent使用輕量級過程(即在自己的進程內運行)。
locust是蝗蟲的意思,很影響,性能測試就好像蝗蟲來襲的樣子
看看官網的介紹:
An open source load testing tool.
Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
一個開源性能測試工具。
使用 Python 代碼來定義用戶行為。用它可以模擬百萬計的並發用戶訪問你的系統。
####
2,和jmeter對比
工具 區別
jmeter 需要在UI界面上通過選擇組件來“編寫”腳本,模擬的負載是線程綁定的,意味着模擬的每個用戶,都需要一個單獨的線程。單台負載機可模擬的負載數有限
locust 通過編寫簡單易讀的代碼完成測試腳本,基於事件,同樣配置下,單台負載機可模擬的負載數遠超jmeter
PS:但locust的局限性在於,目前其本身對測試過程的監控和測試結果展示,不如jmeter全面和詳細,需要進行二次開發才能滿足需求越來越復雜的性能測試需要。
二、安裝Locust
###
mac下安裝Locust
pip install locust
檢測locust是否安裝成功
locust --help
####
安裝依賴分析
github地址:https://github.com/locustio/locust/blob/master/setup.py
這里想簡單介紹 Locust 都基於了哪些庫。打開 Locust 安裝目錄下的 setup.py 文件。查看安裝要求:
install_requires=[
"gevent>=20.9.0",
"flask>=2.0.0",
"Werkzeug>=2.0.0",
"requests>=2.23.0",
"msgpack>=0.6.2",
"pyzmq>=22.2.1",
"geventhttpclient>=1.5.1",
"ConfigArgParse>=1.0",
"psutil>=5.6.7",
"Flask-BasicAuth>=0.2.0",
"Flask-Cors>=3.0.10",
"roundrobin>=0.0.2",
"typing-extensions>=3.7.4.3",
],
gevent 是在 Python 中實現協程的一個第三方庫。協程,又稱微線程(Coroutine)。使用gevent可以獲得極高的並發性能。
flask 是 Python 的一個 Web 開發框架。
Requests 用來做 HTTP 接口測試。
msgpack-python 是一種快速、緊湊的二進制序列化格式,適用於類似JSON的數據。
six 提供了一些簡單的工具用來封裝 Python2 和 Python3 之間的差異性。
pyzmq 如果你打算運行 Locust 分布在多個進程/機器,建議你安裝pyzmq。
當我們在安裝 Locust 時,它會檢測我們當前的 Python 環境是否已經安裝了這些庫,如果沒有安裝,它會先把這些庫一一裝上。並且對這些庫版本有要求,有些是必須等於某版本,有些是大於某版本。我們也可以事先把這些庫全部按要求裝好,再安裝Locust時就會快上許多。
####
三、一個簡單的示例
准備腳本
Locust 沒有傻瓜式的腳本錄制功能,要想用它來做性能測試,必須擼起袖子來寫代碼。
我們看看官網的例子:
from locust import HttpUser, task class HelloWorldUser(HttpUser): @task def hello_world(self): self.client.get("/hello") self.client.get("/world")
###
腳本分析
1,繼承一個類
2,使用@task裝飾該方法為一個事務。
3,client.get()用於指請求的路徑“/”,
####
啟動界面
Put the code in a file named locustfile.py in your current directory and run locust:
也就是說,把上面的代碼放到一個locustfile.py 的文件里面,然后在這個文件夾下面,直接命令行運行:locust
Once you’ve started Locust, open up a browser and point it to http://localhost:8089. You will be greeted with something like this:
locust -f .\load_test.py --host=https://www.baidu.com
這樣你打開頁面,host是默認填充上的,
###
界面的說明和使用
Number of users to simulate:設置模擬的用戶總數
spawned rate (users spawned/second):每秒啟動的虛擬用戶數
host,你要壓測的地址host
Start swarming:執行locust腳本
####
測試結果界面
我使用我的本地的一個接口地址,http://127.0.0.1:5000/
然后再本地就可以看到刷刷的開始看到請求了
PS:點擊STOP可以停止locust腳本運行:
Type:請求類型,即接口的請求方法;
Name:請求路徑;
requests:當前已完成的請求數量;
fails:當前失敗的數量;
Median:響應時間的中間值,即50%的響應時間在這個數值范圍內,單位為毫秒;
Average:平均響應時間,單位為毫秒;
Min:最小響應時間,單位為毫秒;
Max:最大響應時間,單位為毫秒;
Content Size:所有請求的數據量,單位為字節;
reqs/sec:每秒鍾處理請求的數量,即QPS;
###
各模塊說明
New test:點擊該按鈕可對模擬的總虛擬用戶數和每秒啟動的虛擬用戶數進行編輯;
Statistics:類似於jmeter中Listen的聚合報告;
Charts:測試結果變化趨勢的曲線展示圖,分別為每秒完成的請求數(RPS)、響應時間、不同時間的虛擬用戶數;
Failures:失敗請求的展示界面;
Exceptions:異常請求的展示界面;
Download Data:測試數據下載模塊, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;
###
這是簡單的介紹和使用,還需要深入一下,