编写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参数作用相反
欢迎大家关注我的订阅号,会定期分享一些关于测试相关的文章,有问题也欢迎一起讨论学习!订阅号每一条留言都会回复!