6-on_start and on_stop方法
使用方法
on_start()
和on_stop()
定义在User类中,直接在你自己的测试User类里面继承重写即可- 这两个方法的执行时机分别是在@task任务执行前以及@task任务结束之后,相当于pytest中的
setup()
和teardown()
from locust import task, HttpUser
class TestSetUpUser(HttpUser):
host = 'https://www.baicu.com'
def on_start(self):
print('on_start 执行')
def on_stop(self):
print('on_stop 执行')
@task
def main_test(self):
print('main_test 执行')
self.stop()
- 运行结果
[2023-07-28 16:50:32,178] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: All users spawned: {"TestSetUpUser": 1} (1 total users)
on_start 执行
main_test 执行
on_stop 执行
!!!需要注意!!!
- 每一个User开始执行task前后都会执行
on_start()
和on_stop()
,比如设置10个并发,那么就会执行10次 - (这里是超纲了~简单看一看就好,后面会详细介绍)如果是想获取token这种整个测试只需要执行一次的步骤,可以考虑使用@events.test_start,例子
from locust import task, HttpUser, events
@events.test_start.add_listener
def on_test_start(environment, **kwargs):
setattr(environment, 'token', 'init_token')
print('on_test_start 执行')
class TestSetUpUser(HttpUser):
host = 'https://www.baicu.com'
# def on_start(self):
# print('on_start 执行')
#
# def on_stop(self):
# print('on_stop 执行')
@task
def main_test(self):
print(self.environment.token)
print('main_test 执行')
self.stop()
[2023-07-28 17:22:35,241] HUAWEI-MateBook-X-Pro.local/INFO/locust.main: Starting Locust 2.15.1
on_test_start 执行
[2023-07-28 17:22:40,972] HUAWEI-MateBook-X-Pro.local/INFO/locust.runners: All users spawned: {"TestSetUpUser": 5} (5 total users)
main_test 执行
main_test 执行
main_test 执行
main_test 执行
main_test 执行
- 可见
on_test_start()
只执行了一次,@events.test_start
相当于pytest中的setup_module()
- 在
on_test_start()
中使用setattr(environment, 'token', 'init_token')
,给environment对象创建一个token属性,赋值为‘init_token’
,这样我们当前environment中的所有user对象都能获取到token值了 - 关于environment、runner、client、user的关系,以及更多events的用法,我们后面再去探讨,这一篇笔记主要说的是
on_start()
和on_stop()
小结
on_start()
和on_stop()
在每个user执行task之前和之后执行,每个user都仅会执行一次