Locust:一個分布式負載測試工具

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界面:


Locust Web UI
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末聊浅,一起剝皮案震驚了整個濱河市餐抢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌低匙,老刑警劉巖旷痕,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顽冶,居然都是意外死亡欺抗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門强重,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绞呈,“玉大人,你說我怎么就攤上這事间景〉枭” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵倘要,是天一觀的道長圾亏。 經常有香客問我,道長碗誉,這世上最難降的妖魔是什么召嘶? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哮缺,結果婚禮上弄跌,老公的妹妹穿的比我還像新娘。我一直安慰自己尝苇,他們只是感情好铛只,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布埠胖。 她就那樣靜靜地躺著,像睡著了一般淳玩。 火紅的嫁衣襯著肌膚如雪直撤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蜕着,我揣著相機與錄音谋竖,去河邊找鬼。 笑死承匣,一個胖子當著我的面吹牛蓖乘,可吹牛的內容都是我干的。 我是一名探鬼主播韧骗,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘉抒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了袍暴?” 一聲冷哼從身側響起些侍,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎政模,沒想到半個月后岗宣,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡淋样,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年狈定,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片习蓬。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖措嵌,靈堂內的尸體忽然破棺而出躲叼,到底是詐尸還是另有隱情,我是刑警寧澤企巢,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布枫慷,位于F島的核電站,受9級特大地震影響浪规,放射性物質發(fā)生泄漏或听。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一笋婿、第九天 我趴在偏房一處隱蔽的房頂上張望誉裆。 院中可真熱鬧,春花似錦缸濒、人聲如沸足丢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斩跌。三九已至绍些,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耀鸦,已是汗流浹背柬批。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袖订,地道東北人氮帐。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像著角,于是被迫代替她去往敵國和親揪漩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理吏口,服務發(fā)現(xiàn)奄容,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,480評論 6 427
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富产徊,涉及面非常廣昂勒。awesome-p...
    若與閱讀 18,646評論 4 418
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡單的交互式python版本管理工具舟铜。pyenv–簡單的Pyth...
    MrHamster閱讀 3,792評論 1 61
  • 機緣下戈盈,促成了這次通話。嘻嘻谆刨,而且默契時間控制的剛好塘娶。聊天前沒有錄音,這個以后分情況痊夭,不是咨詢問題的話就不用錄下來...
    周而佳境閱讀 609評論 0 1