溫馨提示×

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

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

locust性能測(cè)試工具怎么在python中使用

發(fā)布時(shí)間:2020-12-29 09:14:05 來(lái)源:億速云 閱讀:222 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了locust性能測(cè)試工具怎么在python中使用,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

一、簡(jiǎn)介

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

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

二、安裝

 用 pip 管理工具安裝: 

pip3 install locust

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

locust性能測(cè)試工具怎么在python中使用

三、壓測(cè)過(guò)程

1.編寫(xiě)腳本

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

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

# 定義用戶(hù)行為
class UserTask(TaskSet):
  def on_start(self):
    '''初始化數(shù)據(jù),每個(gè)虛擬用戶(hù)只執(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):
    '''銷(xiāo)毀數(shù)據(jù),每個(gè)虛擬用戶(hù)只執(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ā)用戶(hù)在開(kāi)始前各執(zhí)行一次

  • on_stop():每個(gè)并發(fā)用戶(hù)在結(jié)束后各執(zhí)行一次

  • @task: 通過(guò)裝飾器設(shè)置運(yùn)行權(quán)重,比如上面代碼中 執(zhí)行任務(wù) home_index 和 sale 的總請(qǐng)求為 2:1

  • assert:斷言設(shè)置

  • wait_time :每個(gè)任務(wù)之間設(shè)置間隔時(shí)間,隨機(jī)從3~5區(qū)間內(nèi)取,單位是 s

  • locust -f:指定 .py 壓測(cè)腳本路徑

2. Locust 監(jiān)控

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

locust性能測(cè)試工具怎么在python中使用

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

locust性能測(cè)試工具怎么在python中使用

locust性能測(cè)試工具怎么在python中使用

locust性能測(cè)試工具怎么在python中使用

locust性能測(cè)試工具怎么在python中使用

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:指定無(wú) web UI模式

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

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

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

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

locust性能測(cè)試工具怎么在python中使用

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

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

locust性能測(cè)試工具怎么在python中使用

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

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

locust性能測(cè)試工具怎么在python中使用

上述內(nèi)容就是locust性能測(cè)試工具怎么在python中使用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(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