locust工具學習筆記(一)
編寫locustfile檔案
一份locustfile中,宣告至少一個從該類繼承的使用者類
User class(使用者類)
一個使用者類別代表一個使用者。locust將為每個正在模擬的使用者生成User類的一個例項。User類可以定義一些公共屬性。
公共屬性
wait_time
屬性
可選屬性,用於模擬使用者在執行任務之間等待指定的時間。
-
constant
在固定時間內 -
between
在最大值和最小值之間的隨機時間 -
constant_pacing
自適應時間,以確保任務每X秒執行一次
from locust import User, task, between, constant, constant_pacing class MyUser(User): @task def my_task(self): print("執行使用者任務!") # wait_time = between(0.5, 10) #每個使用者在每次任務執行之間等待0.5到10秒 # wait_time = constant(1) #每個使用者每次任務執行之間等待1秒 wait_time = constant_pacing(1) #每個使用者在1秒內執行1次
自定義wait_time
class MyUser(Use r):
'''
User類將休眠一秒鐘,然後休眠兩個,然後休眠三個,依此類推
'''
last_wait_time = 0
def wait_time(self):
self.last_wait_time += 1
return self.last_wait_time
weight
屬性
用來設定啟動的模擬特定型別的使用者比例,則可以在這些類上設定一個weight屬性
class WebUser(User): weight = 3 #... class MobileUser(User): weight = 1 #...
host
屬性
host屬性是要載入的主機的URL字首 ,可以在locustfile中指定host,若啟動時沒有指定就預設使用該設定。
environment
屬性
對使用者正在執行的環境的引用。使用它與環境或它所包含的執行器互動。例如,從一個任務方法中停止runner
self.environment.runner.quit()
如果在獨立locust例項上執行,則將停止整個執行。如果在工作程式節點上執行,它將停止該特定節點。
on_start和on_stop方法
使用者(TaskSets)可以宣告一個on_start
方法和/或on_stop
方法。使用者將on_start
在開始執行時呼叫其方法,並on_stop
對於TaskSet,當模擬使用者開始執行該TaskSet時呼叫on_start
方法,當模擬使用者停止執行該TaskSet時呼叫on_stop
方法(當interrupt()
被呼叫時,或者使用者被殺死時)。
Locust類有setup和teardown,TaskSet類有setup、teardown、on_start、on_stop。
每次啟動locust時執行setup方法,退出時執行teardown方法,locust執行TaskSet時執行TaskSet的setup方法,退出時執行teardown方法,每個虛擬使用者執行操作時執行on_start方法,退出時執行on_stop方法
from locust import HttpLocust, TaskSet, task
class MyUserBehavior(TaskSet):
def setup(self):
print('task setup 每個任務開始前執行')
def teardown(self):
print('task teardown 每個任務結束前執行')
def on_start(self):
# 虛擬使用者啟動Task時執行
print('start 虛擬使用者啟動Task時執行')
def on_stop(self):
# 虛擬使用者結束Task時執行
print('end 虛擬使用者結束Task時執行')
@task(2)
def index(self):
self.client.get("/")
@task(1)
def profile(self):
self.client.get("/index")
class WebsiteUser(HttpLocust):
def setup(self):
print('setup 開始測試前執行')
def teardown(self):
print('teardown 測試結束後執行')
task_set = MyUserBehavior
min_wait = 5000
max_wait = 9000
#執行順序
setup 開始測試前執行
task setup 每個任務開始前執行
on_start 虛擬使用者啟動Task時執行
tasks 使用者任務
on_stop end 虛擬使用者結束Task時執行
task teardown 每個任務結束前執行
teardown 測試結束後執行
tasks(任務)
當啟動負載測試時,將為每個模擬使用者建立一個User類的例項,它們將開始在自己的綠色執行緒中執行。當這些使用者執行時,他們選擇要執行的任務,休眠一段時間,然後選擇一個新任務,等等。
@task
裝飾器
使用@task裝飾器為使用者新增任務,@task可選指定引數,該引數用於指定任務的執行率。
from locust import User, task
class MyUser(User):
@task(1)
def user_task1(self):
pass
@task(5)
def user_task2(self):
pass
# user_task2任務執行機率是user_task1的5倍
task
屬性
定義使用者任務的另一種方法是設定tasks屬性
-
task屬性指定為列表,則每次執行任務時,都會從task屬性中隨機選擇
-
ask屬性指定為字典,則每次執行任務時,按照字典值比例執行任務
from locust import User, constant
def my_task0(user):
pass
def my_task1(user):
pass
class MyUser(User):
tasks = [my_task0,my_task1]
#tasks = {my_task0:1,my_task1:2} 執行不力是1:2
@tag裝飾器
使用@tag裝飾器標記任務後,使用--tags
和--exclude-tags
引數控制需要執行的任務
from locust import User, constant, task, tag
class MyUser(User):
@tag('tag0')
@task
def my_task0(self):
pass
@tag('tag0', 'tag1')
@task
def my_task1(self):
pass
@tag('tag2')
@task
def my_task2(self):
pass
啟動測試時若指定引數--tags tag0,則測試只會執行my_task0,my_task1任務,若指定--tags tag2,則測試只會執行my_task2任務。
引數--exclude-tags與--tags引數作用相反
歡迎大家關注我的訂閱號,會定期分享一些關於測試相關的文章,有問題也歡迎一起討論學習!訂閱號每一條留言都會回覆!