官方文檔:Locust說明文檔
一、認識Locust
1、定義
Locust是一款易於使用的分佈式負載測試工具,完全基於事件,即一個locust節點也可以在一個進程中支持數千併發用戶,不使用回調,通過gevent使用輕量級過程(即在自己的進程內運行)。
2、特點
①、不需要編寫笨重的UI或者臃腫的XML代碼,基於協程而不是回調,腳本編寫簡單易讀;
②、有一個基於we簡潔的HTML+JS的UI用戶界面,可以實時顯示相關的測試結果;
③、支持分佈式測試,用戶界面基於網絡,因此具有跨平臺且易於擴展的特點;
④、所有繁瑣的I / O和協同程序都被委託給gevent,替代其他工具的侷限性;
3、locust與jmeter的區別
工具 | 區別 |
---|---|
jmeter | 需要在UI界面上通過選擇組件來“編寫”腳本,模擬的負載是線程綁定的,意味着模擬的每個用戶,都需要一個單獨的線程。單臺負載機可模擬的負載數有限 |
locust | 通過編寫簡單易讀的代碼完成測試腳本,基於事件,同樣配置下,單臺負載機可模擬的負載數遠超jmeter |
PS:但locust的侷限性在於,目前其本身對測試過程的監控和測試結果展示,不如jmeter全面和詳細,需要進行二次開發才能滿足需求越來越複雜的性能測試需要。
二、安裝Locust
1、支持的python版本:2.7、3.4、3.5、3.6;
2、Windows系統安裝locust
①、直接通過 pip install locustio 命令安裝;
②、通過爲pyzmq、gevent和greenlet安裝預先構建的二進制包,然後在這裏找到非官方的預製包,下載.whl文件後,使用 pip install name-of-file.whl 命令安裝;
安裝成功後可以輸入 pip show locust 命令查看是否安裝成功,以及通過 locust -help 命令查看幫助信息。
PS:運行大規模測試時,建議在Linux機器上執行此操作,因爲gevent在Windows下的性能很差。
三、一個簡單的示例
locust的腳本里,模擬負載的請求和python的requests庫使用方法基本一樣,示例如下:
# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全請求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class MyBlogs(TaskSet):
# 訪問我的博客首頁
@task(1)
def get_blog(self):
# 定義請求頭
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"}
req = self.client.get("/weixin_43613890", headers=header, verify=False)
if req.status_code == 200:
print("success")
else:
print("fails")
class websitUser(HttpLocust):
task_set = MyBlogs
min_wait = 3000 # 單位爲毫秒
max_wait = 6000 # 單位爲毫秒
if __name__ == "__main__":
import os
os.system("locust -f locusttest.py --host=https://blog.csdn.net")
腳本說明:
新建一個類MyBlogs(TaskSet),繼承TaskSet,該類下面寫需要請求的接口以及相關信息;
self.client調用get和post方法,和requests一樣;
@task裝飾該方法表示爲用戶行爲,括號裏面參數表示該行爲的執行權重:數值越大,執行頻率越高,不設置默認是1;
WebsiteUser()類用於設置生成負載的基本屬性:
屬性 | 說明 |
---|---|
task_set | 指向定義了用戶行爲的類 |
min_wait | 模擬負載的任務之間執行時的最小等待時間,單位爲毫秒 |
max_wait | 模擬負載的任務之間執行時的最大等待時間,單位爲毫秒 |
PS:默認情況下,時間是在min_wait和max_wait之間隨機選擇,但是可以通過將wait_function設置爲任意函數來使用任何用戶定義的時間分佈。
四、啓動Locust
1、如果啓動的locust文件名爲locustfile.py並位於當前工作目錄中,可以在編譯器中直接運行該文件,或者通過cmd,執行如下命令:
locust --host=https://blog.csdn.net
2、文件名稱是locustfile.py,可以使用-f命令啓動上面的示例locust文件:
locust -f locusttest.py --host=https://blog.csdn.net
3、如果要運行分佈在多個進程中的Locust,通過指定-master以下內容來啓動主進程 :
locust -f locusttest.py --master --host=https://blog.csdn.net
4、如果要啓動任意數量的從屬進程,可以通過-salve命令來啓動locust文件:
locust -f locusttest.py --salve --host=https://blog.csdn.net
5、如果要運行分佈式Locust,必須在啓動從機時指定主機(運行分佈在單臺機器上的Locust時不需要這樣做,因爲主機默認爲127.0.0.1):
locust -f locusttest.py --slave --master-host=192.168.0.100 --host=https://blog.csdn.net
6、啓動locust文件成功後,編譯器控制檯會顯示如下信息:
[2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8
PS:8089是該服務啓動的端口號,如果是本地啓動,可以直接在瀏覽器輸入http://localhost:8089打開UI界面,如果是其他機器搭建locust服務,則輸入該機器的IP+端口即可;
五進入ui頁面
1、locust首頁
Number of users to simulate:設置模擬的用戶總數
Hatch rate (users spawned/second):每秒啓動的虛擬用戶數
Start swarming:執行locust腳本
ps:根據自己需求輸入
2、測試結果界面
Type:請求類型,即接口的請求方法;
Name:請求路徑;
requests:當前已完成的請求數量;
fails:當前失敗的數量;
Median:響應時間的中間值,即50%的響應時間在這個數值範圍內,單位爲毫秒;
Average:平均響應時間,單位爲毫秒;
Min:最小響應時間,單位爲毫秒;
Max:最大響應時間,單位爲毫秒;
Content Size:所有請求的數據量,單位爲字節;
reqs/sec:每秒鐘處理請求的數量,即QPS;
3、各模塊說明
New test:點擊該按鈕可對模擬的總虛擬用戶數和每秒啓動的虛擬用戶數進行編輯;
Statistics:類似於jmeter中Listen的聚合報告;
Charts:測試結果變化趨勢的曲線展示圖,分別爲每秒完成的請求數(RPS)、響應時間、不同時間的虛擬用戶數;
Failures:失敗請求的展示界面;
Exceptions:異常請求的展示界面;
Download Data:測試數據下載模塊, 提供三種類型的CSV格式的下載,分別是:Statistics、responsetime、exceptions;
瞭解更多請參考官方文檔