Python locust工具使用詳解
今年負(fù)責(zé)部門的人員培養(yǎng)工作,最近在部門內(nèi)部分享和講解了locust這個(gè)工具,今天再博客園記錄下培訓(xùn)細(xì)節(jié)。相信你看完博客,一定可以上手locust這個(gè)性能測(cè)試框架了。
一、簡(jiǎn)介
1、優(yōu)勢(shì)
locust是python語言開發(fā)的一款的開源的的性能測(cè)試框架,他比jmeter更加的輕量級(jí),主要是通過協(xié)程(gevent)的方式去實(shí)現(xiàn)并發(fā),通過協(xié)程的方式可以大幅提高單機(jī)的并發(fā)能力,同時(shí)避免系統(tǒng)級(jí)的資源調(diào)度。locust具有開源性、分布式、支持高并發(fā),支持webUI的操作方式。
2、劣勢(shì)
locust的圖表功能較弱,只展示了很少的數(shù)據(jù)
locust不支持監(jiān)控服務(wù)端的狀態(tài),需要借助第三方工具,或者自己寫代碼去實(shí)現(xiàn)
二、安裝
locust的安裝非常簡(jiǎn)單,直接通過pip的方式就可以安裝
pip install locust
三、locust的庫(kù)和方法介紹
1、from locust import task
通過task可以把某個(gè)函數(shù)指定為任務(wù),直接@task裝飾對(duì)應(yīng)的函數(shù)即可,在@tast(n)中可以有一個(gè)參數(shù)n,意思是這個(gè)任務(wù)的占比是多少
2、from locust import TaskSet
需要定義一個(gè)類,繼承TaskSet這個(gè)類,這個(gè)是是一個(gè)任務(wù)集的概念,這個(gè)類中可以包括多個(gè)task
3、from locust import HttpUser
需要定義一個(gè)類,這個(gè)類要繼承HttpUser,通過這個(gè)定義的類我們可以執(zhí)行具體的任務(wù)集
看了上面的介紹,可能大家有點(diǎn)云里霧里的,下面我們由淺入深看代碼
四、實(shí)戰(zhàn)代碼V1.0(入門代碼)
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í)行如下命令
3、打開瀏覽器,輸入http://localhost:8089/
4、參數(shù)講解
Number of total users to simulate 模擬的總的用戶數(shù)
Spawn rate 每秒鐘新增的用戶數(shù)
五、實(shí)戰(zhàn)代碼V1.1(入門代碼)
1、任務(wù)集類中的on_start方法
class My_task_set(TaskSet): #添加初始化方法 def on_start(self): print("類似類中的構(gòu)造方法,每個(gè)用戶在任務(wù)開始前,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")
這個(gè)方法類似pytest框架中的前置條件或者說是面向?qū)ο笾械臉?gòu)造方法
2、任務(wù)集類中的on_start方法
def on_stop(self): print("類似類中的后置方法,每個(gè)用戶在任務(wù)開始后,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性")
六、實(shí)戰(zhàn)代碼V1.2(入門代碼)
1、如何判斷請(qǐng)求是失敗還是成功
2、然后再響應(yīng)的消息中指定判斷邏輯即可,success即為成功,failure即為失敗
七、實(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。類似request.session(),所以如果我們登陸的時(shí)候,只需要在on_start中登陸一次就可以了 # 如果在locust中,如果url是不需要統(tǒng)計(jì),則我們不要用clent去訪問api,應(yīng)該用request去訪問,這樣就locust就不會(huì)統(tǒng)計(jì)request庫(kù)發(fā)起的請(qǐng)請(qǐng)求 #指定一個(gè)任務(wù)集 class My_task_set(TaskSet): #添加初始化方法 def on_start(self): print("類似類中的構(gòu)造方法,每個(gè)用戶在任務(wù)開始前,只執(zhí)行一次,在這里可以定義一個(gè)對(duì)象的屬性,這樣其它測(cè)試集就可以使用這個(gè)屬性") def on_stop(self): print("類似類中的后置方法,每個(gè)用戶在任務(wù)開始后,只執(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ù)
八、常見問題
1、cookies
locust中的client會(huì)自動(dòng)幫我們處理cookies。類似request.session(),所以如果我們登陸的時(shí)候,只需要在on_start中登陸一次就可以了
2、多統(tǒng)計(jì)api的問題
如果在locust中,如果url是不需要統(tǒng)計(jì),則我們不要用clent去訪問api,應(yīng)該用request去訪問,這樣就locust就不會(huì)統(tǒng)計(jì)request庫(kù)發(fā)起的請(qǐng)請(qǐng)求
九、分布式調(diào)用的問題
一旦單臺(tái)機(jī)器不夠模擬足夠多的用戶時(shí),Locust支持運(yùn)行在多臺(tái)機(jī)器中進(jìn)行壓力測(cè)試。 為了實(shí)現(xiàn)這個(gè),你應(yīng)該在 master 模式中使用--master標(biāo)記來啟用一個(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工具使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Python locust工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來越大的原因詳析
最近在跑python程序時(shí),出現(xiàn)占用的內(nèi)存不斷增加的情況,下面這篇文章主要給大家介紹了關(guān)于python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來越大的原因詳析,本文通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Python中使用sklearn進(jìn)行特征降維的方法
在Python中,可以使用sklearn庫(kù)中的特征降維方法對(duì)數(shù)據(jù)進(jìn)行處理。主要包括基于PCA算法的降維、基于LDA算法的降維、以及利用特征選擇方法進(jìn)行降維。這些方法可以提高模型的訓(xùn)練效率和預(yù)測(cè)準(zhǔn)確率,特別是在高維數(shù)據(jù)集中具有重要的作用2023-04-04Python Numpy數(shù)組擴(kuò)展repeat和tile使用實(shí)例解析
這篇文章主要介紹了Python Numpy數(shù)組擴(kuò)展repeat和tile使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python sleep和wait對(duì)比總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python sleep和wait對(duì)比總結(jié)內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。2021-02-02python內(nèi)置函數(shù)sorted()用法深入分析
這篇文章主要介紹了python內(nèi)置函數(shù)sorted()用法,結(jié)合實(shí)例形式較為深入的分析了Python內(nèi)置函數(shù)sorted()功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10一些讓Python代碼簡(jiǎn)潔的實(shí)用技巧總結(jié)
隨著項(xiàng)目代碼行數(shù)的增加,不可避免的遇到軟件架構(gòu)腐敗的問題,所以如何寫出簡(jiǎn)潔的代碼至關(guān)重要,這篇文章主要給大家介紹了一些讓Python代碼簡(jiǎn)潔的實(shí)用技巧,需要的朋友可以參考下2021-08-08Python 解決logging功能使用過程中遇到的一個(gè)問題
這篇文章主要介紹了Python 解決logging功能使用過程中遇到的一個(gè)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04python 實(shí)現(xiàn)自動(dòng)遠(yuǎn)程登陸scp文件實(shí)例代碼
這篇文章主要介紹了python 實(shí)現(xiàn)自動(dòng)遠(yuǎn)程登陸scp文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03