Python測試框架 - Locust

參考:locust官網

1、簡介

1、作用

  • Locust是易於使用的分佈式用戶負載測試工具。它旨在對網站(或其他系統)進行負載測試,並確定系統可以處理多少個併發用戶。
  • Locust完全基於事件,因此可以在一臺計算機上支持數千個併發用戶。
  • 與許多其他基於事件的應用程序相比,它不使用回調。相反,它通過gevent使用輕量級進程。

2、特性

  • 用普通的Python編寫用戶測試方案
  • 分佈式和可擴展-支持數十萬用戶
  • 基於Web的UI
  • 可以測試任何系統
  • Hackable(可破解可侵入)

3、對比

1、對比JMeter

  • JMeter帶有一個UI,雖然不錯但是糟糕的是,想要通過一些點擊Api來實現你的代碼是比較繁瑣的。
  • JMeter是線程綁定的。這意味着對於每個要模擬的用戶,您都需要一個單獨的線程。不用說,在一臺計算機上對成千上萬的用戶進行基準測試是不可行的。

2、對比Tsung

  • Tsung沒有用Erlang編寫的線程問題。它可以利用BEAM自身提供的輕量級流程,並且可以愉快地擴展規模。但是在定義測試場景時,Tsung和JMeter一樣有限。
  • 它提供了基於XML的DSL來定義用戶在測試時的行爲方式。這種方式需要書寫的XML量會非常大
  • 完成後顯示各種圖形或報告要求您對測試生成的日誌文件進行後處理。

2、安裝

1、在windows上安裝

在Windows上,運行應該可以。

	pip install locustio

2、修改打開文件最大數量限制

       機器上的每個HTTP連接都會打開一個新文件(技術上是文件描述符)。操作系統可能會爲可以打開的最大文件數設置一個下限。如果該限制小於測試中模擬用戶的數量,則會發生故障。

       將操作系統的默認最大文件數限制增加到大於您要運行的模擬用戶數的數量。如何執行此操作取決於所使用的操作系統。

3、快速入門

1、測試實例

推薦使用簡單的通過@task來聲明任務的方式

第一種是不通過註解的方式來處理的:
在這裏插入圖片描述
第二種是通過註解的方式來聲明的:
在這裏插入圖片描述

2、啓動Locust

1、當前目錄下啓動

	locust

2、子目錄下啓動

	locust -f locust_files/my_locust_file.py

3、多進程分佈啓動

主進程

	locust -f locust_files/my_locust_file.py --master

備進程

	locust -f locust_files/my_locust_file.py --slave

4、多主機分佈式啓動
需要指明對應host

	locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100

3、Locust的Web界面

打開瀏覽器並將其指向http://127.0.0.1:8089(如果在本地運行Locust)。會出現這樣的提示:
在這裏插入圖片描述

4、書寫locustfile

locustfile是普通的python文件。唯一的要求是它聲明至少一個從Locust類繼承的類

1、Locust類

一個Locust類代表一個用戶。Locust將爲正在模擬的每個用戶生成Locust類的一個實例。Locust類通常應該定義一些屬性。

1、WAIT_TIME屬性

用於確定模擬用戶在執行任務之間等待多長時間。Locust帶有一些內置函數,這些函數返回一些常用的wait_time方法。

最常見的是between。它用於使模擬用戶在每次執行任務後等待介於最小值和最大值之間的隨機時間。其他內置的等待時間函數是constant和 constant_pacing。

wait_time方法應該返回秒數(或幾分之一秒),並且也可以在TaskSet類上聲明,在這種情況下,它將僅用於該TaskSet。

2、weight屬性

如果希望使這些蝗蟲之一更常執行,可以在這些類上設置一個weight屬性。

	class WebUserLocust(Locust):
	    weight = 3
	    ...
	
	class MobileUserLocust(Locust):
	    weight = 1
	    ...

3、host屬性

host屬性是要加載的主機的URL前綴(即“ http://google.com ”)。通常,這是在Locust--host啓動時在蝗蟲的Web UI或命令行中使用該 選項指定的。

如果在Locust類中聲明瞭主機屬性,則–host 在命令行或Web請求中未指定任何主機屬性的情況下將使用該屬性。

2、TaskSet類

每個Locust類必須設置一個task_set屬性,該屬性指向TaskSet。TaskSet是任務的集合。這些任務是普通的python可調用對象.

啓動負載測試時,產生的Locust類的每個實例將開始執行其TaskSet。然後,發生的情況是每個TaskSet將選擇其任務之一併調用它。然後,它將等待Locust類的wait_time方法指定的秒數(除非 已直接在TaskSet上聲明瞭wait_time方法,在這種情況下,它將使用自己的方法)。然後它將再次選擇要調用的新任務,再次等待,依此類推。

1、聲明任務

爲TaskSet聲明任務以使用task裝飾器的典型方式。
在這裏插入圖片描述

@task使用可選的weight參數,該參數可用於指定任務的執行率。

2、任務屬性

任務的屬性可以是一個可調用方法的列表,或者一個<調用方法:weight>的字典。

	from locust import Locust, TaskSet

	def my_task(l):
	    pass
	    
	def my_task2(l):
	    pass
	
	class MyTaskSet(TaskSet):
	    tasks = [my_task,my_task2]	
	    #也可以設置權重如:tasks = {my_task:1,my_task:2}
	
	class MyLocust(Locust):
	    task_set = MyTaskSet

如果將task屬性指定爲列表,則每次執行任務時,都會從task屬性中隨機選擇它。但是,如果任務是字典,則將可調用對象作爲鍵,將整數作爲值,則將隨機選擇要執行的任務,但將整數作爲比率。

5、運行

類似quick start說的,具體參數可查看官網文檔,在目錄上方鏈接中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章