首先客套的來介紹一些Locust是啥:
Locust是一個容易使用、分布式的壓力測試工具。它是用於網站壓力測試(或其它系統)並找出多少用戶一個系統可以承載。
在測試過程中,策略就是一個Locust的蠕蟲將會攻擊你的網站。每一個locust的行為(或你使用的測試用戶)是你自己定義的,並且蠕蟲進程從一個網頁視圖中被實時監測。這樣會幫助你來實現測試,在真實用戶使用前定義系統的瓶頸。
Locust是完全基於事件的,因此可以在單台機器中支持數以千計的用戶在線。和其它基於事件的程序相比較,它是不需要使用回調的。相反,它通過gevent使用輕量級的進程。每一個locust測試你的網站時,實際上是真實的在內部運行它自己的進程(或greenlet,准確的說)。這樣就允許你不使用復雜的回調方法,而是使用Python編寫復雜的場景。
關於Locust:
1、locust作為一款性能測試工具,沒有單獨的ui界面,可以說是python下的一些庫的集成
locust完全基於python作為編程語言,采用pure python描述測試腳本,其中的http請求也是完全基於Requests庫,除了HTTP/HTTPS協議,locust也可以測其他協議的系統,只需要采用python調用對應的庫進行請求描述即可,可以說python對應的庫還是非常齊全的。
2、與jmeter相比較而言,locust更加的輕量化,采用的是不同於jmeter中進程和線程的處理機制(協程【微線程】),有效避免了系統的資源調度,由此可以大幅度的提高單擊系統的並發能力
3、Github地址:
https://github.com/locustio/locust
注:如果想查看python下依賴了哪些庫的話,可以進入github,點擊setup.py進入查看
上述標紅的地方就是依賴的第三方庫及支持版本(詳細的介紹見下方),安裝這些庫的時候也應遵循其顯示的版本號,如果與當前支持的版本號不一致或者小於當前版本號的時候就會安裝失敗。
4、locust組成模塊(所依賴的庫)【gevent】是python下實現協程的一個第三方庫,能夠使系統獲取極高的並發性能(locust基礎模塊)
簡而言之,它的特點就是協程,web管理工具,超級好用。
第一步,安裝
依然是老伙伴pip工具(完美安裝依賴)
pip install Locust
Locust有六個依賴的python模塊
1.gevent:在Python中實現協程的第三方庫。協程又叫微線程Corouine。使用gevent可以獲取極高的並發能力;
2.flask:Python的一個web開發框架,和django相當;
3.requests:支持http/https訪問的庫;
4.msgpack-python:一種快速、緊湊的二進制序列化格式,使用與類似json的數據;
5.six:提供了一些簡單的工具封裝Python2和Python3 之間的差異;
6.pyzmq:安裝這個第三方庫,可以把Locust運行在多個進程或多個機器(分布式)
安裝結束了之后我們就開啟Locust之旅了。
第二步,使用
如何快速的創建一個Locust Demo。
import time
from locust import HttpUser, task, between, events
import urllib3
from locust.contrib.fasthttp import FastHttpLocust
urllib3.disable_warnings()
@events.test_start.add_listener
def on_test_start(**kwargs):
print('===測試最開始提示===')
@events.test_stop.add_listener
def on_test_stop(**kwargs):
print('===測試結束了提示===')
class TestTask(HttpUser):
wait_time = between(1, 5)
# host = 'https://www.baidu.com'
def on_start(self):
print('這是SETUP,每次實例化User前都會執行!')
@task(1)
def getBaidu(self):
self.client.get(url="/", verify=False)
def on_stop(self):
print('這是TEARDOWN,每次銷毀User實例時都會執行!')
# class MyLocust(FastHttpLocust):
# task_set = TestTask
# min_wait = 1000
# max_wait = 60000
if __name__ == "__main__":
import os
os.system("locust -f locust1.py --host=https://www.baidu.com")
腳本說明:
新建一個類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://www.cnblogs.com
2、如果Locust文件位於子目錄下且名稱不是locustfile.py,可以使用-f命令啟動上面的示例locust文件:
locust -f testscript/locusttest.py --host=https://www.cnblogs.com
3、如果要運行分布在多個進程中的Locust,通過指定-master
以下內容來啟動主進程 :
locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com
4、如果要啟動任意數量的從屬進程,可以通過-salve命令來啟動locust文件:
locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com
5、如果要運行分布式Locust,必須在啟動從機時指定主機(運行分布在單台機器上的Locust時不需要這樣做,因為主機默認為127.0.0.1):
locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com
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+端口即可;
之后就可以打開locust了
在瀏覽器中輸入地址:
http://localhost:8089/
你會看到這樣的頁面
我們看圖介紹一下數據:
Type 訪問類型
Name 任務名(python中定義的方法名)
Requests 請求的總次數
Fails 失敗的次數
Median (ms) 中間數耗時
Average (ms) 平均耗時
Min (ms) 最低耗時
Max (ms) 最大耗時
Average size (bytes) 平均耗時
Current RPS 每秒鍾處理的訪問的次數
這就是locust最基本的使用方法和用途了!