效能測試工具Locust使用指南(二)
上一篇文章效能測試工具Locust使用指南(一)主要介紹了Locust的基本概念,主要功能和一個示例,這篇主要講進階的功能.
-
Locust類
一個locustfile至少包含一個繼承了Locust的類.Locust會為被模擬的每個使用者生成locust的例項,這些屬性是應該被實現的:
task_set
task_set屬性應該指向一個TaskSet類, 這個屬性定義了使用者的一些行為,例如執行任務的間隔時間min_wait
和max_wait
.(如果不定義,則預設1s)-
weight
可以在一個檔案裡執行兩個locusts:locust -f locust_file.py WebUserLocust MobileUserLocust
如果希望讓其中一個locust執行得更多,那麼以在這些類上設定一個權重屬性weight
。比如說,WebUserLocust比MobileUserLocust多三倍:class WebUserLocust(Locust): weight = 3 .... class MobileUserLocust(Locust): weight = 1 ....
host
如果在locust類中宣告瞭一個host屬性,那麼在命令列中沒有指定主機時將使用它。-
TaskSet類
每個Locust類必須有一個task_set
屬性,task_set
指向一個TaskSet類。TaskSet相當於Locust的大腦.
任務設定任務的典型方法是使用任務修飾器:
from locust import Locust, TaskSet, task
class MyTaskSet(TaskSet):
@task
def my_task(self):
print("Locust instance (%r) executing my_task" % (self.locust))
class MyLocust(Locust):
task_set = MyTaskSet
taskset的一個非常重要的特性是它們可以被巢狀,因為真正的網站通常是以分層的方式構建的,有多個子節。巢狀taskset將允許我們定義一個行為,以更現實的方式模擬使用者。例如,可以用以下結構定義taskset:
class ForumPage(TaskSet):
@task(20)
def read_thread(self):
pass
@task(1)
def new_thread(self):
pass
@task(5)
def stop(self):
self.interrupt()
class UserBehaviour(TaskSet):
tasks = {ForumPage:10}
@task
def index(self):
pass
在上面的例子中,如果ForumPage在執行UserBehaviour任務集時被選擇執行,那麼ForumPage任務集就會開始執行。ForumPage任務集將選擇它自己的任務之一執行它.
有一個重要的事情需要注意,那就是在ForumPage的stop方法中呼叫self.interrupt()
。這實際上是停止執行ForumPage任務集,但UserBehaviour例項將會繼續執行。如果沒有呼叫ForumPage的中斷()方法,那麼Locust一旦啟動就不會停止執行該ForumPage任務。通過使用中斷函式,我們可以結合任務權重定義一個模擬使用者離開測試網站的可能。
還可以使用@ task decorator宣告巢狀的TaskSet,就像宣告普通任務時一樣:
class MyTaskSet(TaskSet):
@task
class SubTaskSet(TaskSet):
@task
def my_task(self):
pass
-
使用Http請求
到目前為止,只討論了Locust使用者的任務排程部分。為了實際載入測試系統,我們需要發出HTTP請求。為了做到這一點,需要使用HttpLocust類。當使用這個類時,每個例項都會得到一個客戶端屬性,它將是HttpSession的一個例項,可用於發出HTTP請求。
在Locust例項化後建立的HttpSession例項。客戶端支援cookie,因此可以在HTTP請求之間保持會話。-
URL裡有動態引數的話,可以通過將名稱引數傳遞給HttpSession的不同請求方法來完成。
#Statistics for these requests will be grouped under: /blog/?id=[id] for i in range(10): client.get("/blog?id=%i" % i, name="/blog?id=[id]")
對共享公共庫的多個locustfile進行分組。在這種情況下,重要的是將
project root
定義為呼叫locust的目錄,並且建議所有的locustfiles都在project root
下的某個地方。
子目錄定義方法參見下面的例子,但是locust只會匯入於執行的locustfile所處的那個目錄的模組。如果是希望從project root
(即執行locust命令的位置)匯入,請確保在匯入任何公共庫之前,在locust檔案中加入sys.path.append(os.getcwd())
,這將使project root
(即當前工作目錄)是可匯入的。-
project root
- init.py
- common/
- init.py
- config.py
- auth.py
- locustfiles/
- init.py
- web_app.py
- api.py
- ecommerce.py
使用上述專案結構,你的本地化檔案可以使用以下方法匯入公共庫:
sys.path.append(os.getcwd()) import common.auth
相關文章
- 效能測試工具Locust
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- Locust效能測試實踐
- Locust效能測試工具核心技術@task和@events
- Python技術棧效能測試工具Locust入門Python
- Locust1.4.3版本效能測試工具案例分享
- 深入淺出開源效能測試工具 Locust (使用篇 2)
- 深入淺出開源效能測試工具 Locust (使用篇 1)
- [效能測試] locust學習-基礎篇
- 效能測試: 編寫一個 Locust 檔案
- 自己上手寫效能測試工具(二)
- 效能測試工具
- Locust效能測試設定持續時間(web-UI)WebUI
- ApiTestEngine 整合 Locust 實現更好的效能測試體驗API
- mysqlslap 效能測試工具MySql
- 效能測試工具supersmackMac
- 效能測試工具 - Siege
- c++效能測試工具:google benchmark入門(二)C++Go
- python輕量級效能工具-LocustPython
- 重新定義 Locust 的測試報告_效能監控平臺測試報告
- Locust+InfluxDB+Grafana 效能測試資料視覺化展示UXGrafana視覺化
- 【PG效能測試】pgbench效能測試工具簡單使用
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- ABAP Webdynpro效能測試工具Web
- 壓縮工具效能測試
- MySQL 效能測試工具mysqlslapMySql
- YCSB效能測試工具使用
- 效能測試工具的原理
- 效能測試總結(二)---測試流程篇
- Locust(Python負載測試工具)簡介和安裝方法Python負載
- 效能測試工具你知道多少?
- java 效能測試框架工具-junitperfJava框架
- 使用 fio 工具測試 EBS 效能
- Nginx效能測試工具之webbenchNginxWeb
- 效能測試:主流壓測工具介紹
- Locust 進行分散式負載測試分散式負載
- 面向開發的測試技術(二):效能測試
- 面向Web應用的併發壓力測試工具——Locust實用攻略Web