欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python性能測試工具locust的使用

 更新時(shí)間:2020年12月28日 16:08:40   作者:三只松鼠  
這篇文章主要介紹了python性能測試工具locust的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

一、簡介

  Locust 是一個(gè)易于使用,分布式,用戶負(fù)載測試工具。它用于負(fù)載測試 web 站點(diǎn)(或其他系統(tǒng)),并計(jì)算出一個(gè)系統(tǒng)可以處理多少并發(fā)用戶。在測試期間,一大群虛擬用戶訪問你的網(wǎng)站。每個(gè)測試用戶的行為由您定義,集群過程由 web UI 實(shí)時(shí)監(jiān)控。這將幫助您在讓真正的用戶進(jìn)入之前進(jìn)行測試并識(shí)別代碼中的瓶頸。

  Locust 完全是基于事件的,因此在一臺(tái)機(jī)器上支持?jǐn)?shù)千個(gè)并發(fā)用戶是可能的。與許多其他基于事件的應(yīng)用程序不同,它不使用回調(diào)。相反它通過 gevent 使用輕量級(jí)協(xié)程。這允許您用 Python 編寫非常有表現(xiàn)力的場景,而不用回調(diào)使代碼復(fù)雜化。

二、安裝

 用 pip 管理工具安裝: 

pip3 install locust

檢查是否安裝成功,執(zhí)行命令:locust --v

三、壓測過程

1.編寫腳本

      Locust 不同于 jmeter 可以用 GUI 來創(chuàng)建壓測腳本。Locust 需要自己編寫 python 腳本,壓測負(fù)載腳本主要包含兩個(gè)子類UserTask和WebsiteUser,分別繼承TaskSet和Httplocust類,擁有這兩個(gè)父類的公共屬性和方法。

from locust import HttpLocust, TaskSet, task, between
import os,json

# 定義用戶行為
class UserTask(TaskSet):
  def on_start(self):
    '''初始化數(shù)據(jù),每個(gè)虛擬用戶只執(zhí)行一次'''
    self.client.post("/login",{"username":"test","password":"123456"})

  @task(2)
  def home_index(self):
    r = self.client.get("/sz/Home/DefaultHomeV2Request")
    assert json.loads(r.text)['Error'] == 0

  @task(1)
  def sale(self):
    self.client.get("/sz/Home/FlashSaleRequest")
    assert json.loads(r.text)['Error'] == 0

  def on_stop(self):
    '''銷毀數(shù)據(jù),每個(gè)虛擬用戶只執(zhí)行一次'''
    self.client.post("/SignOut",{"CustomerGuid":"c7d7e646-9ce2-499b-a22e-a3c98d4545fe"})

class WebsiteUser(HttpLocust):
  host = 'http://10.1.62.126'
  task_set = UserTask
  wait_time = between(3, 5)


if __name__ == "__main__":
  os.system('locust -f stress_test.py ')

locust 運(yùn)行時(shí):

  • on_start()  :每個(gè)并發(fā)用戶在開始前各執(zhí)行一次
  • on_stop():每個(gè)并發(fā)用戶在結(jié)束后各執(zhí)行一次
  • @task: 通過裝飾器設(shè)置運(yùn)行權(quán)重,比如上面代碼中 執(zhí)行任務(wù) home_index 和 sale 的總請求為 2:1
  • assert:斷言設(shè)置
  • wait_time :每個(gè)任務(wù)之間設(shè)置間隔時(shí)間,隨機(jī)從3~5區(qū)間內(nèi)取,單位是 s
  • locust -f:指定 .py 壓測腳本路徑

2. Locust 監(jiān)控

 順帶提一下 locust web UI監(jiān)控是基于 flask 框架,不指定 port 的話,默認(rèn)地址:http://localhost:8089 

開始測試,Locust 提供一個(gè)簡易的監(jiān)控界面,可以看到 RPS、響應(yīng)時(shí)間 和 部分曲線圖

3.運(yùn)行模式

 1.web UI 模式

locust -f stress_test.py --web-host 10.1.44.31 --web-port 8090

--web-host:指定 web UI IP,默認(rèn) localhost

--web-port:指定 web UI 端口,默認(rèn) 8089

2. no web 模式

locust -f stress_test.py --no-web -c 100 -r 20 -t 120

--no-web:指定無 web UI模式

-c:起多少 locust 用戶(等同于起多少 tcp 連接)

-r:多少時(shí)間內(nèi),把上述 -c 設(shè)置的虛擬用戶全部啟動(dòng)

-t:腳本運(yùn)行多少時(shí)間,單位s

在 --no-web 模式下的報(bào)告如下:

4.分布式進(jìn)程

       Locust 是由 python 編寫的,由于GIL的限制,單進(jìn)程不能利用CPU多核的優(yōu)勢(實(shí)際測試結(jié)果也是一樣,8核心的虛擬機(jī),只有一核達(dá)到了95%以上的使用率,其余7核只圍觀,不出力)。所以單臺(tái)機(jī)器上想要盡可能的壓榨 CPU,只能開啟多進(jìn)程,一般有多少個(gè)核心啟多少進(jìn)程。

單臺(tái)多進(jìn)程:

 先啟一個(gè) master

locust -f /home/script/stress_test.py --web-host 10.1.62.223 --master

 再啟 8 個(gè) slave

locust -f /home/script/stress_test.py --slave

slave 節(jié)點(diǎn)啟動(dòng)后,在 locust 監(jiān)控中能看到

多臺(tái)多進(jìn)程:

 多臺(tái)機(jī)器搭建 Locust 分布式 和 單臺(tái)搭建多進(jìn)程差不多。只有一個(gè)區(qū)別,如果 slave 和 master 不在一臺(tái)機(jī)器上, slave 需要指定 --master-host 參數(shù):

更多功能使用請查看Locust官方文檔,形成良好的習(xí)慣 :官方文檔 

四、總結(jié)

  Locust 基于 python 腳本定制化壓測,使用 python 語言來實(shí)現(xiàn) 參數(shù)化、關(guān)聯(lián)參數(shù)、斷言和一些復(fù)雜的壓測場景非常方便。Locust 使用協(xié)程來構(gòu)建tcp連接,本身單機(jī)并發(fā)能力強(qiáng),但內(nèi)部是由requests庫的httpclient 發(fā)起網(wǎng)絡(luò)請求,requests庫功能挺全面,性能卻很一般,好在 Locust 支持分布式,彌補(bǔ)了一定的性能缺陷。根據(jù)自己做的測試,同樣幾臺(tái)客戶機(jī),jmeter搭建分布式測出的 qps 比 Locust分布式 高1/3。如果要提升 locust 單進(jìn)程性能,可以將 httpclient 的實(shí)現(xiàn)方式從 requests 換成 geventhttpclient ,這個(gè)下一篇再講述。

以上就是python性能測試工具locust的使用的詳細(xì)內(nèi)容,更多關(guān)于python性能測試工具locust的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 中 f-Strings 的作用

    Python 中 f-Strings 的作用

    這篇文章主要介紹了Python 中 f-Strings 的作用, f-strings 是用來非常方便的格式化輸出的,覺得它的使用方法無外乎就是 print(f'value = { value }',其實(shí),f-strings 遠(yuǎn)超你的預(yù)期,今天來梳理一下它還能做那些很酷的事情
    2021-10-10
  • Python2.7實(shí)現(xiàn)多進(jìn)程下開發(fā)多線程示例

    Python2.7實(shí)現(xiàn)多進(jìn)程下開發(fā)多線程示例

    這篇文章主要為大家詳細(xì)介紹了Python2.7實(shí)現(xiàn)多進(jìn)程下開發(fā)多線程示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python中json.dumps()函數(shù)使用和示例

    Python中json.dumps()函數(shù)使用和示例

    這篇文章主要介紹了Python中json.dumps()函數(shù)使用和示例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用pycharm將自己項(xiàng)目代碼上傳github(小白教程)

    使用pycharm將自己項(xiàng)目代碼上傳github(小白教程)

    github是一個(gè)代碼托管平臺(tái),本文主要介紹了使用pycharm將自己項(xiàng)目代碼上傳github,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于Python的EasyGUI學(xué)習(xí)實(shí)踐

    基于Python的EasyGUI學(xué)習(xí)實(shí)踐

    這篇文章主要介紹了基于Python的EasyGUI學(xué)習(xí)實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python實(shí)現(xiàn)三子棋游戲

    python實(shí)現(xiàn)三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入理解Python中各種方法的運(yùn)作原理

    深入理解Python中各種方法的運(yùn)作原理

    這篇文章主要介紹了深入理解Python中各種方法的運(yùn)作原理,包括抽象方法和靜態(tài)方法和類方法等之間異同的比較,需要的朋友可以參考下
    2015-06-06
  • Django中使用Celery的方法示例

    Django中使用Celery的方法示例

    這篇文章主要介紹了Django中使用Celery的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • python模擬實(shí)現(xiàn)分發(fā)撲克牌

    python模擬實(shí)現(xiàn)分發(fā)撲克牌

    這篇文章主要為大家詳細(xì)介紹了python模擬實(shí)現(xiàn)分發(fā)撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python為何不支持switch語句原理詳解

    Python為何不支持switch語句原理詳解

    這篇文章主要介紹了Python為何不支持switch語句原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評論