locust 壓測入門 - 2

分布式使用

如果要使用多進程/分布式的形式來進行壓測,啟動時需要增加以下參數:

主:locust -f test.py --master --host=http://example.com
從:locust -f test.py --slave --host=http://example.com

如果想在多臺機器上運行Locust惠呼,在啟動slaves時砸捏,我們應該指定master地址(當運行Locust分布式在同一臺機器時找御,master的默認地址是127.0.0.1):

locust -f test.py --slave --master-host=ip --host=http://example.

locust 測試程序的編寫

以前一篇中的示例程序 test.py 為例

from locust import HttpLocust, TaskSet, task, between

class UserBehavior(TaskSet):
    def on_start(self):
        """ on_start is called when a Locust start before any task is scheduled """
        self.login()

    def on_stop(self):
        """ on_stop is called when the TaskSet is stopping """
        self.logout()

    def login(self):
        self.client.post("/login", {"username":"ellen_key", "password":"education"})

    def logout(self):
        self.client.post("/logout", {"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
    wait_time = between(5, 9)

主要是兩個類,HttpLocust 和 TaskSet

  1. Locust 表示每個虛擬的用戶涤伐。
    HttpLocust 是繼承自 Locust 類, 且 client 綁定了自己的實現,如果不是http/https協議,我們需要繼承Locust后實現自己的client亚茬。

  2. TaskSet 描述了每個locust 實例要運行的任務集,并提供了調度浓恳,包括執(zhí)行順序刹缝、權重等等碗暗。
    @task 裝飾器表示權重屬性,即index()的執(zhí)行頻率是profile()的兩倍

自定義客戶端測試非http/https的系統(tǒng)

官網說明文檔

只需要編寫一個觸發(fā)request_success和request_failure事件的自定義客戶端即可梢夯。

以一個xml-rpc協議為例

import time
import xmlrpclib

from locust import Locust, TaskSet, events, task, between


class XmlRpcClient(xmlrpclib.ServerProxy):
    """
    Simple, sample XML RPC client implementation that wraps xmlrpclib.ServerProxy and 
    fires locust events on request_success and request_failure, so that all requests 
    gets tracked in locust's statistics.
    """
    def __getattr__(self, name):
        func = xmlrpclib.ServerProxy.__getattr__(self, name)
        def wrapper(*args, **kwargs):
            start_time = time.time()
            try:
                result = func(*args, **kwargs)
            except xmlrpclib.Fault as e:
                total_time = int((time.time() - start_time) * 1000)
                ###########################
                ## 1. 實現 request_failure 事件
                ###########################
                events.request_failure.fire(request_type="xmlrpc", name=name, response_time=total_time, exception=e)
            else:
                total_time = int((time.time() - start_time) * 1000)
                ###########################
                ## 2. 實現 request_success 事件
                ###########################
                events.request_success.fire(request_type="xmlrpc", name=name, response_time=total_time, response_length=0)
                # In this example, I've hardcoded response_length=0. If we would want the response length to be 
                # reported correctly in the statistics, we would probably need to hook in at a lower level
        
        return wrapper


class XmlRpcLocust(Locust):
    """
    This is the abstract Locust class which should be subclassed. It provides an XML-RPC client
    that can be used to make XML-RPC requests that will be tracked in Locust's statistics.
    """
    def __init__(self, *args, **kwargs):
        super(XmlRpcLocust, self).__init__(*args, **kwargs)
        self.client = XmlRpcClient(self.host)


class ApiUser(XmlRpcLocust):
    
    host = "http://127.0.0.1:8877/"
    wait_time = between(0.1, 1)
    
    class task_set(TaskSet):
        @task(10)
        def get_time(self):
            self.client.get_time()
        
        @task(5)
        def get_random_number(self):
            self.client.get_random_number(0, 100)

在上面的例子中言疗,關鍵之處,即自定義客戶端的實現中颂砸,當調用完成時噪奄,通過 events.request_failure 和 events.request_success 事件進行數據上報,從何locust可以完成數據統(tǒng)計人乓。

如果需要運行起來以上例子勤篮,可以查看官方文檔獲得svr端代碼。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末撒蟀,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子温鸽,更是在濱河造成了極大的恐慌保屯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涤垫,死亡現場離奇詭異姑尺,居然都是意外死亡,警方通過查閱死者的電腦和手機蝠猬,發(fā)現死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門切蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榆芦,你說我怎么就攤上這事柄粹。” “怎么了匆绣?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵驻右,是天一觀的道長。 經常有香客問我崎淳,道長堪夭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任拣凹,我火速辦了婚禮森爽,結果婚禮上,老公的妹妹穿的比我還像新娘嚣镜。我一直安慰自己爬迟,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布菊匿。 她就那樣靜靜地躺著雕旨,像睡著了一般扮匠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凡涩,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天棒搜,我揣著相機與錄音,去河邊找鬼活箕。 笑死力麸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的育韩。 我是一名探鬼主播克蚂,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筋讨!你這毒婦竟也來了埃叭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤悉罕,失蹤者是張志新(化名)和其女友劉穎赤屋,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體壁袄,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡类早,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了嗜逻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩僻。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖栈顷,靈堂內的尸體忽然破棺而出逆日,到底是詐尸還是另有隱情,我是刑警寧澤萄凤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布屏富,位于F島的核電站,受9級特大地震影響蛙卤,放射性物質發(fā)生泄漏狠半。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一颤难、第九天 我趴在偏房一處隱蔽的房頂上張望神年。 院中可真熱鬧,春花似錦行嗤、人聲如沸已日。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飘千。三九已至堂鲜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护奈,已是汗流浹背缔莲。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霉旗,地道東北人痴奏。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像厌秒,于是被迫代替她去往敵國和親读拆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容

  • Locust性能測試1-環(huán)境準備與基本使用 前言 提到性能測試鸵闪,大部分小伙伴想到的就是LR和jmeter這種工具檐晕,...
    Alano_Ones閱讀 344評論 0 0
  • 第一部分 Python3中性能測試工具Locust安裝使用 概述 Locust寓意蝗蟲,蝗蟲過境蚌讼,寸草不生辟灰;而Lo...
    子不語的花未眠閱讀 1,671評論 0 3
  • Locust文件就是一般的Python文件。唯一的需求就是它至少需要一個繼承于Locust的類. Locust類 ...
    Yuan_Jie閱讀 4,042評論 0 7
  • 文|老李 圖|老李 梅紅枝干蟄蟲舒啦逆, 水活魚游草色孤伞矩。 誰喚春光應趁早笛洛, 不需時日百花蘇夏志。
    長洪雜談閱讀 321評論 0 9
  • 消黯秋云渾是夢,為伊翻作漁陽弄苛让。寂寂秋燈人接踵沟蔑。秋葉動,蟾光千里誰與共狱杰? 遙想當年花雨重瘦材,與伊執(zhí)手長相送。芳草斜陽...
    瀟湘語文閱讀 2,104評論 40 119