開源性能壓測工具 locust

本文主要針對服務(wù)端衍慎,web系統(tǒng)的性能測試酪耕。

性能測試

根據(jù)不同的測試目的孽惰,性能測試具體細分為多種類型

  • 基準(zhǔn)測試 : 模擬單個用戶訪問系統(tǒng)的場景膳凝,考察系統(tǒng)性能指標(biāo)碑隆,關(guān)注系統(tǒng)功能是否正常,為其他壓測提供基準(zhǔn)參考蹬音。
  • 負載測試: 模擬系統(tǒng)在正常壓力下(預(yù)期壓力或者系統(tǒng)達到臨界)的負載能力上煤,判斷是否滿足業(yè)務(wù)需求。
  • 壓力測試 : 不斷提升系統(tǒng)負載知道達到性能拐點著淆,尋找系統(tǒng)最大負載能力劫狠,性能瓶頸等。
  • 穩(wěn)定性測試:在一定壓力下持續(xù)運行永部,關(guān)注系統(tǒng)長期一定負載下是否能穩(wěn)定服務(wù)独泞。

以此獲得系統(tǒng)在多少并發(fā)用戶,請求數(shù)的情況下苔埋,平均響應(yīng)時間懦砂,成功失敗率等數(shù)據(jù)。

在定位系統(tǒng)瓶頸時组橄,考慮被測系統(tǒng) cpu荞膘,網(wǎng)絡(luò),磁盤玉工,緩存和數(shù)據(jù)庫情況羽资,同時也要關(guān)注測試機器的情況。

這里介紹一種開源性能壓測軟件 locust瓮栗,純 python 實現(xiàn)削罩,能實現(xiàn)模擬用戶操作場景進行加壓,支持單進程和分布式多進程费奸,有一個簡單 web ui 查看壓測過程弥激,而且開源python,方便自己自定義hack愿阐。

安裝

pip install locustio
locust --help
pip install pyzmq  ## 多進程機器部署需要安裝

公司網(wǎng)絡(luò)限制手動裝依賴真是丟.....

注意 : 設(shè)置系統(tǒng)文件描述符最大限制 ulimit -n xx,
每一個http 連接會打開一個文件描述符微服,確保系統(tǒng)設(shè)置滿足測試需求。

測試

參看官方文檔缨历,簡單地寫一個測試?yán)右栽蹋瑢σ粋€ oms 進行訪問:

#!/usr/bin/env python
# coding=utf-8
import json
from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):
    def on_start(self):
        response = self.client.get("/v1/games?developer=orientlu", catch_response = True)
        #print dir(response)
        result = json.loads(response.text)
        self.gameid = result[0]['gameid']

    @task(2)
    def get_unit(self):
        self.client.get("/v1/games?developer=orientlu&&gameid=%s"%(self.gameid))

    @task(1)
    def get_game(self):
        self.client.get("/v1/games?developer=orientlu")

class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks   // 指向TasSet類,定義測試行為
    host= "http://10.xx.xx.xxx:8099/"
    min_wait = 1000
    max_wait = 5000

例子中辛孵, WebsiteTasks繼承 TaskSet丛肮,定義了測試行為,定義on_start方法魄缚,locust 在模擬用戶啟動時調(diào)用執(zhí)行一次宝与,諸如執(zhí)行登錄操作等焚廊;
定義執(zhí)行任務(wù),通過@task修飾习劫,后續(xù)跟的數(shù)字為調(diào)用比重咆瘟,默認(rèn)為1,虛擬用戶運行期間诽里,按權(quán)重隨機挑選任務(wù)執(zhí)行袒餐,然后根據(jù)設(shè)置的min_wait/max_wait 區(qū)間隨機休眠等待,繼續(xù)執(zhí)行任務(wù)直到終止谤狡。

單進程運行

為了方便調(diào)試灸眼,先在 no-web 模式下執(zhí)行,看看腳本是否正常豌汇,參數(shù)信息通過locust -h查看幢炸,可以直接通過 print 打印調(diào)試泄隔。

$ locust  -f locust_test.py  --no-web -c 1 -r 1 -t 10

確認(rèn)腳本沒有問題后拒贱,通過web模式執(zhí)行測試,

$ $ locust  -f locust_test.py -P 8899

啟動web 后臺后登錄web佛嬉,設(shè)置模擬用戶并發(fā)數(shù)和請求頻率逻澳,執(zhí)行測試并查看測試情況


1533635778967.png

后臺可見系統(tǒng) http 連接數(shù)正在 rangup 中


1533630815709.png
1533630790693.png

多進程/分布式運行

執(zhí)行壓力測試時,可能單個進程或者一臺機器無法產(chǎn)生足夠的壓力暖呕,此時需要多進程或者在多臺機器上輸出壓力斜做。不管是多進程模式還是多機模式,都需要先啟動一個master湾揽,然后在啟動多個slaver瓤逼。

啟動 master, master 不輸出壓力,需要指定 --master, web 訪問端口等參數(shù)库物。

$ locust -f ./locust_test.py --master -P 8899

啟動slaver霸旗,同一臺機器執(zhí)行多次啟動多個進程,多機分布式通過在不同機器上執(zhí)行命令戚揭,需要指定 --slave 和 master 的 ip诱告。

$ locust -f ./locust_test.py --slave --master-host=127.0.0.1

登錄 web 后可以查看當(dāng)前啟動的 slaver 數(shù)目。

1533636504819.png

基本 locust 上手測試就是如此了民晒。
最后精居,重點是,他開源啊潜必。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末靴姿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子磁滚,更是在濱河造成了極大的恐慌镰官,老刑警劉巖碍侦,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盆佣,死亡現(xiàn)場離奇詭異,居然都是意外死亡坝疼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門谆沃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钝凶,“玉大人,你說我怎么就攤上這事唁影「荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵据沈,是天一觀的道長哟沫。 經(jīng)常有香客問我,道長锌介,這世上最難降的妖魔是什么嗜诀? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮孔祸,結(jié)果婚禮上隆敢,老公的妹妹穿的比我還像新娘。我一直安慰自己崔慧,他們只是感情好拂蝎,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惶室,像睡著了一般温自。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皇钞,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天悼泌,我揣著相機與錄音,去河邊找鬼鹅士。 笑死券躁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掉盅。 我是一名探鬼主播也拜,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趾痘!你這毒婦竟也來了慢哈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤永票,失蹤者是張志新(化名)和其女友劉穎卵贱,沒想到半個月后滥沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡键俱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年兰绣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片编振。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀辩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踪央,到底是詐尸還是另有隱情臀玄,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布畅蹂,位于F島的核電站健无,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏液斜。R本人自食惡果不足惜累贤,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旗唁。 院中可真熱鬧畦浓,春花似錦、人聲如沸检疫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屎媳。三九已至,卻和暖如春论巍,著一層夾襖步出監(jiān)牢的瞬間烛谊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工嘉汰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丹禀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓鞋怀,卻偏偏與公主長得像双泪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子密似,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,928評論 2 89
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理焙矛,服務(wù)發(fā)現(xiàn),斷路器残腌,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 查詢引擎 一村斟、Phoenix 貢獻者::Salesforce 簡介:這是一個Java中間層贫导,可以讓開發(fā)者在Apac...
    秋天的程序員閱讀 1,029評論 0 4
  • 在沖壓廠輪崗實習(xí)也快十天了,我也漸漸適應(yīng)了吉利這種快節(jié)奏的工作方式蟆盹,說實話剛開始真的不適應(yīng)這種中午不休息的工作...
    Edway閱讀 145評論 0 0
  • 每個人都會面對到很多不一樣的挑戰(zhàn)逾滥,不一樣的艱辛過程钱反,有的人簡簡單單就熬過去了,也有的人熬不過去匣距。其實一切看你怎么去...
    張艾婷閱讀 245評論 0 0