性能測試工具Locust

性能測試工具Locust | iCourt技術(shù)

Locust介紹


性能測試工具市面上有很多位隶,除了我們耳熟能詳?shù)腖oadRunner拦止、Jmeter等測試工具,今天介紹一款小巧易用的性能測試工具:Locust。與LoadRunner串远、Jmeter這類大眾耳熟能詳?shù)男阅軠y試工相比:

--- LoadRunner Jmeter Locust
授權(quán)方式 商業(yè)收費 開源免費 開源免費
開發(fā)語言 C/Java Java Python
測試腳本形式 C/Java GUI Python
并發(fā)機(jī)制 進(jìn)程/線程 線程 協(xié)程
單機(jī)并發(fā)能力
分布式壓力 支持 支持 支持
資源監(jiān)控 支持 不支持 不支持
報告與分析 完善 簡單圖表 簡單圖表
支持二次開發(fā) 不支持 支持 支持

Locust最大的優(yōu)點是,單機(jī)并發(fā)能力儿惫,在我們?nèi)粘J褂玫腗AC電腦上可以達(dá)到1000并發(fā)澡罚,而LoadRunner只能在Windows平臺使用,并且并發(fā)效率比較低肾请,300并發(fā)基本可以將機(jī)器打滿留搔。另一個優(yōu)點是腳本開發(fā)簡單,Loadrunner的壓測腳本使用類C或者Java語言編寫铛铁,腳本的調(diào)試經(jīng)常讓人崩潰隔显,而Jmeter用GUI編寫。Locust采用Pure Python腳本描述饵逐,使得腳本編寫大大簡化括眠。

Locust安裝


Locust可以通過pip或者easy_install安裝:

pip install locustio

安裝完Locust后,shell命令locust就可以使用了倍权,可以查看locust命令有哪些選項:

locust --help

腳本編寫


完成了工具的準(zhǔn)備掷豺,就進(jìn)入到了第二步,腳本編寫薄声。首先我們要import進(jìn)來三個類当船,分別是HttpLocust(用來模擬發(fā)請求的類)、TaskSet(顧名思義奸柬,任務(wù)集)生年、task(任務(wù)類)。@task裝飾器裝飾的方法都是任務(wù)方法廓奕,里面包含了待請求的接口等信息抱婉,傳入的參數(shù)代表了權(quán)重档叔,如下所示兩個被@task裝飾的方法分別傳入3和1,這意味著每4個人里有3個模擬用戶執(zhí)行answer方法蒸绩,1個模擬用戶執(zhí)行status方法衙四。

簡單示例
from locust import HttpLocust, TaskSet,task
import random

class UserBehavior(TaskSet):
    @task(3)
    def answer(l):
        url = "/api/v1/heroes/user/answers"
        data = {"name": "多多" + str(random.randint(1,500)), "answer": "A"}
        response = l.client.post(url, json=data, headers=header)
    
    @task(1)
    def status(l):
        response = l.client.get("/api/v1/heroes/user/game/status", headers=header)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 1
    max_wait = 2

從腳本中可以看出,腳本主要包含兩個類患亿,一個是WebsiteUser(繼承自HttpLocust传蹈,而HttpLocust繼承自Locust),另一個是UserBehavior(繼承自TaskSet)步藕。事實上惦界,在Locust的測試腳本中,所有業(yè)務(wù)測試場景都是在Locust和TaskSet兩個類的繼承子類中進(jìn)行描述的咙冗。

Locust重要屬性介紹

task_set: 指向一個TaskSet類沾歪,TaskSet類定義了用戶的任務(wù)信息,該屬性為必填雾消;

max_wait/min_wait: 每個用戶執(zhí)行兩個任務(wù)間隔時間的上下限(毫秒)灾搏,具體數(shù)值在上下限中隨機(jī)取值,若不指定則默認(rèn)間隔時間固定為1秒立润; 由于性能測試往往希望給出的壓力越高越好狂窑,測試中可以將此參數(shù)調(diào)低。

host:被測系統(tǒng)的host桑腮,當(dāng)在終端中啟動locust時沒有指定--host參數(shù)時才會用到泉哈;

weight:同時運行多個Locust類時會用到,用于控制不同類型任務(wù)的執(zhí)行權(quán)重到旦。

Locust運行模式

no_web運行模式:

    locust -f happy.py --host=123.com --no-web -c 1

web運行模式:

    locust -f happy.py --host=123.com

這里的“-f”指定了要執(zhí)行的python文件路徑旨巷,“--host”指定了模擬用戶請求接口的host名。執(zhí)行該命令添忘,Locust項目就啟動了采呐。

當(dāng)并發(fā)壓力要求較高時,就需要用到Locust的多進(jìn)程分布式運行模式搁骑。
具體命令如下:
指定master:

locust -f happy.py --host=123.com --master

指定slave

locust -f happy.py --host=123.com --slave

Locust運行性能測試

在瀏覽器中輸入“http://localhost:8089/” 訪問斧吐,會看到如下頁面:

Number of users to simulate:設(shè)置需要模擬的用戶數(shù)量

Hatch rate:每秒需要啟動的用戶數(shù)量

這里我們按提示輸入要模擬的用戶總數(shù)和每秒鐘并發(fā)的用戶數(shù)量,點擊“Start swarming”就可以運行性能測試了:

Type:請求的類型仲器;

Name:請求的url或者自定義的統(tǒng)計分組名字煤率;

requests:當(dāng)前請求的數(shù)量;

fails:當(dāng)前請求失敗的數(shù)量乏冀;

Median:中間值蝶糯,一半的服務(wù)器響應(yīng)時間高于該值,而另一半的服務(wù)器響應(yīng)時間低于該值(毫秒)辆沦;

Average:所有請求的平均響應(yīng)時間(毫秒)昼捍;

Min:請求最小響應(yīng)時間(毫秒)识虚;

Max:請求最大響應(yīng)時間(毫秒);

Content Size:單個請求的大卸什纭(字節(jié))担锤;

reqs/sec:每秒請求的個數(shù);

斷言與別名

可以對返回response內(nèi)容自定義處理乍钻,因為即使返回code是200肛循,但從業(yè)務(wù)上講可能操作是失敗的,另外如果一個URL的參數(shù)是固定的,但是參數(shù)值是不定的, 也可以通過name來處理银择。

    with l.client.get("/api/v1/heroes/user/game/status", headers=headers, catch_response=True, name = "getTask") as response:
    if "成功" in response.text:
        response.success()
    else:
        response.failure("斷言失敗")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末多糠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浩考,更是在濱河造成了極大的恐慌熬丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀挠,死亡現(xiàn)場離奇詭異,居然都是意外死亡害捕,警方通過查閱死者的電腦和手機(jī)绿淋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尝盼,“玉大人吞滞,你說我怎么就攤上這事《苣” “怎么了裁赠?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赴精。 經(jīng)常有香客問我佩捞,道長,這世上最難降的妖魔是什么蕾哟? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任一忱,我火速辦了婚禮,結(jié)果婚禮上谭确,老公的妹妹穿的比我還像新娘帘营。我一直安慰自己,他們只是感情好逐哈,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布芬迄。 她就那樣靜靜地躺著,像睡著了一般昂秃。 火紅的嫁衣襯著肌膚如雪禀梳。 梳的紋絲不亂的頭發(fā)上杜窄,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音出皇,去河邊找鬼羞芍。 笑死,一個胖子當(dāng)著我的面吹牛郊艘,可吹牛的內(nèi)容都是我干的荷科。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼纱注,長吁一口氣:“原來是場噩夢啊……” “哼畏浆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狞贱,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刻获,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞎嬉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝎毡,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年氧枣,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐兵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡便监,死狀恐怖扎谎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烧董,我是刑警寧澤毁靶,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站逊移,受9級特大地震影響预吆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜螟左,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一啡浊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胶背,春花似錦巷嚣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春坝茎,著一層夾襖步出監(jiān)牢的瞬間涤姊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工嗤放, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留思喊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓次酌,卻偏偏與公主長得像恨课,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岳服,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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