溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python locust工具怎么用

發(fā)布時(shí)間:2021-03-09 13:50:29 來(lái)源:億速云 閱讀:234 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Python locust工具怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

python是什么意思

Python是一種跨平臺(tái)的、具有解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,其最初的設(shè)計(jì)是用于編寫(xiě)自動(dòng)化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開(kāi)發(fā)獨(dú)立的項(xiàng)目和大型項(xiàng)目。

一、簡(jiǎn)介

1、優(yōu)勢(shì)

locust是python語(yǔ)言開(kāi)發(fā)的一款的開(kāi)源的的性能測(cè)試框架,他比jmeter更加的輕量級(jí),主要是通過(guò)協(xié)程(gevent)的方式去實(shí)現(xiàn)并發(fā),通過(guò)協(xié)程的方式可以大幅提高單機(jī)的并發(fā)能力,同時(shí)避免系統(tǒng)級(jí)的資源調(diào)度。locust具有開(kāi)源性、分布式、支持高并發(fā),支持webUI的操作方式。

2、劣勢(shì)

locust的圖表功能較弱,只展示了很少的數(shù)據(jù)

locust不支持監(jiān)控服務(wù)端的狀態(tài),需要借助第三方工具,或者自己寫(xiě)代碼去實(shí)現(xiàn)

二、安裝

locust的安裝非常簡(jiǎn)單,直接通過(guò)pip的方式就可以安裝

	pip install locust

三、locust的庫(kù)和方法介紹

1、from locust import task

通過(guò)task可以把某個(gè)函數(shù)指定為任務(wù),直接@task裝飾對(duì)應(yīng)的函數(shù)即可,在@tast(n)中可以有一個(gè)參數(shù)n,意思是這個(gè)任務(wù)的占比是多少

2、from locust import TaskSet

需要定義一個(gè)類(lèi),繼承TaskSet這個(gè)類(lèi),這個(gè)是是一個(gè)任務(wù)集的概念,這個(gè)類(lèi)中可以包括多個(gè)task

3、from locust import HttpUser

需要定義一個(gè)類(lèi),這個(gè)類(lèi)要繼承HttpUser,通過(guò)這個(gè)定義的類(lèi)我們可以執(zhí)行具體的任務(wù)集

看了上面的介紹,可能大家有點(diǎn)云里霧里的,下面我們由淺入深看代碼

四、實(shí)戰(zhàn)代碼V1.0(入門(mén)代碼)

1、代碼如下

from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet
#指定一個(gè)任務(wù)集
class My_task_set(TaskSet):
 
 
    #這是某個(gè)任務(wù),30是比例,比如這里是30/50
    @task(30)
    def getindex1(self):
        # client就是個(gè)requests對(duì)象
        # catch_response,告訴locust如何判斷請(qǐng)求失敗還是成功
        res  = self.client.get("/bainianminguo/p/10952586.html")
 
    @task(20)
    def getindex2(self):
        # client就是個(gè)requests對(duì)象
        res = self.client.get("/bainianminguo/p/7253930.html")
 
 
class WebSite(HttpUser):
    # 指定要執(zhí)行哪個(gè)任務(wù)集
    tasks = [My_task_set,]
    # 請(qǐng)求和請(qǐng)求之間最小的間隔時(shí)間
    min_wait = 1000
    # 請(qǐng)求和請(qǐng)求之間最大的間隔時(shí)間
    max_waif = 2000

2、進(jìn)入代碼的目錄,執(zhí)行如下命令

Python locust工具怎么用

3、打開(kāi)瀏覽器,輸入http://localhost:8089/

Python locust工具怎么用

4、參數(shù)講解

Number of total users to simulate 模擬的總的用戶數(shù)

Spawn rate 每秒鐘新增的用戶數(shù)

五、實(shí)戰(zhàn)代碼V1.1(入門(mén)代碼)

1、任務(wù)集類(lèi)中的on_start方法

class My_task_set(TaskSet):
 
    #添加初始化方法
    def on_start(self):
        print("類(lèi)似類(lèi)中的構(gòu)造方法,每個(gè)用戶在任務(wù)開(kāi)始前,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")

這個(gè)方法類(lèi)似pytest框架中的前置條件或者說(shuō)是面向?qū)ο笾械臉?gòu)造方法

2、任務(wù)集類(lèi)中的on_start方法

def on_stop(self):
    print("類(lèi)似類(lèi)中的后置方法,每個(gè)用戶在任務(wù)開(kāi)始后,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")

六、實(shí)戰(zhàn)代碼V1.2(入門(mén)代碼)

1、如何判斷請(qǐng)求是失敗還是成功

Python locust工具怎么用

2、然后再響應(yīng)的消息中指定判斷邏輯即可,success即為成功,failure即為失敗

Python locust工具怎么用

七、實(shí)戰(zhàn)代碼V1.3(全量代碼)

from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet
 
# locust中的client會(huì)自動(dòng)幫我們處理cookies。類(lèi)似request.session(),所以如果我們登陸的時(shí)候,只需要在on_start中登陸一次就可以了
 
# 如果在locust中,如果url是不需要統(tǒng)計(jì),則我們不要用clent去訪問(wèn)api,應(yīng)該用request去訪問(wèn),這樣就locust就不會(huì)統(tǒng)計(jì)request庫(kù)發(fā)起的請(qǐng)請(qǐng)求
#指定一個(gè)任務(wù)集
class My_task_set(TaskSet):
 
    #添加初始化方法
    def on_start(self):
        print("類(lèi)似類(lèi)中的構(gòu)造方法,每個(gè)用戶在任務(wù)開(kāi)始前,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")
 
    def on_stop(self):
        print("類(lèi)似類(lèi)中的后置方法,每個(gè)用戶在任務(wù)開(kāi)始后,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")
 
    #這是某個(gè)任務(wù),30是比例,比如這里是30/50
    @task(30)
    def getindex1(self):
        # client就是個(gè)requests對(duì)象
        # catch_response,告訴locust如何判斷請(qǐng)求失敗還是成功
        res  = self.client.get("/bainianminguo/p/10952586.html",catch_response=True)
        if res.code == 200:
            res.success()
        else:
            res.failure("ff")
        print(res)
    @task(20)
    def getindex2(self):
        # client就是個(gè)requests對(duì)象
        res = self.client.get("/bainianminguo/p/7253930.html")
        print(res)
 
class WebSite(HttpUser):
    # 指定要執(zhí)行哪個(gè)任務(wù)集
    # task_set = My_task_set
 
    tasks = [My_task_set,]
    # 請(qǐng)求和請(qǐng)求之間最小的間隔時(shí)間
    min_wait = 1000
    # 請(qǐng)求和請(qǐng)求之間最大的間隔時(shí)間
    max_waif = 2000
 
 
# Number of total users to simulate   模擬的用戶數(shù)
# Spawn rate                          每秒鐘產(chǎn)生的用戶數(shù)

八、常見(jiàn)問(wèn)題

1、cookies

locust中的client會(huì)自動(dòng)幫我們處理cookies。類(lèi)似request.session(),所以如果我們登陸的時(shí)候,只需要在on_start中登陸一次就可以了

2、多統(tǒng)計(jì)api的問(wèn)題

如果在locust中,如果url是不需要統(tǒng)計(jì),則我們不要用clent去訪問(wèn)api,應(yīng)該用request去訪問(wèn),這樣就locust就不會(huì)統(tǒng)計(jì)request庫(kù)發(fā)起的請(qǐng)請(qǐng)求

九、分布式調(diào)用的問(wèn)題

一旦單臺(tái)機(jī)器不夠模擬足夠多的用戶時(shí),Locust支持運(yùn)行在多臺(tái)機(jī)器中進(jìn)行壓力測(cè)試。
 
為了實(shí)現(xiàn)這個(gè),你應(yīng)該在 master 模式中使用--master標(biāo)記來(lái)啟用一個(gè) Locust 實(shí)例。這個(gè)實(shí)例將會(huì)運(yùn)行你啟動(dòng)測(cè)試的 Locust 交互網(wǎng)站并查看實(shí)時(shí)統(tǒng)計(jì)數(shù)據(jù)。<br>master 節(jié)點(diǎn)的機(jī)器自身不會(huì)模擬任何用戶。相反,你必須使用 --slave 標(biāo)記啟動(dòng)一臺(tái)到多臺(tái) Locustslave 機(jī)器節(jié)點(diǎn),與標(biāo)記 --master-host 一起使用(指出master機(jī)器的IP/hostname)。
 
常用的做法是在一臺(tái)獨(dú)立的機(jī)器中運(yùn)行master,在slave機(jī)器中每個(gè)處理器內(nèi)核運(yùn)行一個(gè)slave實(shí)例。
 
注意:master 和每一臺(tái) slave 機(jī)器,在運(yùn)行分布式測(cè)試時(shí)都必須要有 locust 的測(cè)試文件。
在 master 模式下啟動(dòng) Locust:
 
locust -f my_loucstfile.py --master
 
在每個(gè) slave 中執(zhí)行(192.168.0.14 替換為你 msater 的IP):
 
locust -f my_locustfile.py --slave --master-host=192.168.0.14

Python locust工具怎么用

看完了這篇文章,相信你對(duì)“Python locust工具怎么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI