Locust簡介
Locust是一個簡單易用的分布式負載測試工具,主要用來對網站進行負載壓力測試。
Locust特性
- 使用Python編寫模擬用戶行為的代碼特笋,無需繁瑣的配置
- 分布式可擴展,能夠支持上百萬用戶
- 自帶Web界面
- 不僅能測試web系統(tǒng)耘柱,也可以測試其它系統(tǒng)
Locust思想
在測試過程中,一群用戶將訪問你的網站棍现。每個用戶的行為由你編寫的Python代碼定義调煎,同時可以從Web界面中實時觀察到用戶的行為。
Locust完全是事件驅動的己肮,因此在單臺機器上能夠支持幾千并發(fā)用戶訪問汛蝙。與其它許多基于事件的應用相比,Locust并不使用回調朴肺,而是使用gevent,而gevent是基于協(xié)程的坚洽,可以用同步的方式來編寫異步執(zhí)行的代碼戈稿。每個用戶實際上運行在自己的greenlet中。
Locust安裝
Locust可以通過pip或者easy_install安裝:
pip install locustio
或者
easy_install locustio
安裝完Locust后讶舰,shell命令locust就可以使用了鞍盗,可以查看locust命令有哪些選項:
locust --help
如果打算以分布式模式運行Locust,建議同時安裝pyzmq:
pip install pyzmq
或者
easy_install pyzmq
Locust初步使用
locustfile.py例子
下面是一個簡單的locustfile.py文件跳昼。
from locust import HttpLocust, TaskSet
def login(l):
l.client.post("/login", {"username":"ellen_key", "password":"education"})
def index(l):
l.client.get("/")
def profile(l):
l.client.get("/profile")
class UserBehavior(TaskSet):
tasks = {index:2, profile:1}
def on_start(self):
login(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait=5000
max_wait=9000
在上面的代碼中般甲,定義了一些locust任務,這些任務是用Python函數定義的鹅颊。這些函數傳入一個參數敷存,也就是Locust類的實例。這些任務然后被聚集在TaskSet類的tasks屬性中堪伍,用來表示一個用戶訪問網站的行為锚烦。接著,HttpLocust類表示一個用戶帝雇,這個用戶具有哪些行為涮俄,以及該用戶在執(zhí)行下一個任務之前應該等待多長時間。
HttpLocust類繼承于Locust類尸闸,它增加了一個client屬性彻亲,這個client實際上是HttpSession實例孕锄,可以用來發(fā)起HTTP請求。
上面的代碼示例了一種定義任務的方式苞尝,下面是一種更方便的方式畸肆,該方式使用了task裝飾器。
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def login(self):
self.client.post("/login", {"username":"ellen_key", "password":"education"})
@task(2)
def index(self):
self.client.get("/")
@task(1)
def profile(self):
self.client.get("/profile")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait=5000
max_wait=9000
啟動Locust
在shell中執(zhí)行l(wèi)ocust命令即可啟動Locust野来。如果locustfile.py文件在當前目錄恼除,那么直接執(zhí)行l(wèi)ocust命令即可。如果locustfile.py文件在別的地方曼氛,可以執(zhí)行
locust -f /path/to/locustfile.py
至于如何在分布式模式下運行Locust豁辉,請參考Running Locust distributed
打開Web界面
在shell中執(zhí)行l(wèi)ocust命令,如果沒有問題的話舀患,命令輸出會提示可以在瀏覽器中打開Locust的Web界面徽级,訪問地址默認是http://127.0.0.1:8089
在瀏覽器中打開該地址,就可以看到像下面這樣的Web界面: