6-on_start and on_stop方法

发布时间 2023-07-28 17:53:23作者: 威力Kami

使用方法

  • 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都仅会执行一次