• 性能测试工具Locust的使用----TaskSet类~~task任务嵌套


    内容来自网络

    http://blog.sina.com.cn/s/blog_a7ace3d80102w9r0.html

    TaskSet类

    正如字面意思,TaskSet类定义了每个用户的任务集合,测试任务开始后,每个Locust用户会从TaskSet中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行,然后随机等待Locust类中定义的min_wait和max_wait(如果TaskSet类中也定义了min_wait或者max_wait,按照TaskSet中的为准)之间的一段时间,执行下一个任务。 

    定义TaskSet中的任务有多种方式,比如使用@task修饰符、使用tasks属性。 

     1 from locust import Locust, TaskSet, task
     2 
     3 class UserTask(TaskSet):
     4     @task(1)
     5     def job1(self):
     6         print 'This is job 1'
     7 
     8     @task(2)
     9     def job2(self):
    10         print 'This is job 2'
    11 
    12 class User(Locust):
    13     task_set = UserTask

    TaskSet的定义是可以嵌套的,因为考虑到现实中有很多任务其实也是有嵌套结构的,比如:

     1 from locust import Locust, TaskSet, task
     2 
     3 class UserTask(TaskSet):
     4     @task(2)
     5     class stay(TaskSet):
     6         @task(3)
     7         def readBook(self):
     8             print 'I am reading a book.'
     9 
    10         @task(7)
    11         def listenMusic(self):
    12             print 'I am listening to music.'
    13 
    14         @task(1)
    15         def logOut(self):
    16             self.interrupt()
    17 
    18     @task(1)
    19     def leave(self):
    20         print 'I don not like this page.'
    21 
    22 class User(Locust):
    23     task_set = UserTask

    上面的例子中,要么用户不喜欢这个网页直接离开,要么喜欢就留下来,留下来的话,可以选择看书、听音乐、或者离开。

    在stay这个类中,对interrupt()方法的调用是非常重要的,这可以让一个用户跳出stay这个类有机会执行leave这个任务,否则他一旦进入stay任务就会一直在看书或者听音乐而难以自拔。

    除了使用@task修饰符完成嵌套,也可以使用tasks属性,效果是一样的:

     1 from locust import Locust, TaskSet, task
     2 
     3 class stay(TaskSet):
     4     @task(3)
     5     def readBook(self):
     6         print 'I am reading a book.'
     7 
     8     @task(7)
     9     def listenMusic(self):
    10         print 'I am listening to music.'
    11 
    12     @task(1)
    13     def logOut(self):
    14         self.interrupt()
    15 
    16 class UserTask(TaskSet):
    17     tasks = {stay:2}
    18 
    19     @task(1)
    20     def leave(self):
    21         print 'I don not like this page.'
    22 
    23 class User(Locust):
    24     task_set = UserTask

    TaskSet类还有其他的有用方法:

    • on_start()函数 
      定义每个locust用户进入TaskSet之后开始做的第一件事。
    • locust属性 
      指向每个TaskSet所属的loucst用户实例。
    • parent属性 
      指向每个TaskSet所属的父类TaskSet,用在TaskSet有嵌套的情况,如果调用parent的TaskSet是最顶层的,则返回它所属的locust用户实例。
    • client属性 
      指向TaskSet所属的父HttpLocust类的client属性,self.client与self.locust.client效果是一样的。如果TaskSet所属的父类是个Locust类,则没有这个client属性。 
    • interrupt(reschedule=True) 
      顶层的TaskSet(即被绑定到某个Locust类的task_set的第一层TaskSet)不能调用这个方法。reschedule置为True时,从被嵌套任务出来马上选择新任务执行,如果置为False,从被嵌套任务出来后,随机等待min_wait和max_wait之间的一段时间,再选择新任务执行。
    • schedule_task(task_callable, args=None, kwargs=None, first=False) 
      将一个可调用的对象task_callable添加进Locust对象(注意是针对某个Locust实例,而不是所有的Locust实例)的任务选择队列,其中args和kwargs是传递给可调用对象的参数,如果first置为True,则将其加到队首。
  • 相关阅读:
    Linux内核分析第十八章读书笔记
    Linux内核分析作业 NO.5
    Linux内核分析第五章读书笔记
    Linux内核分析 一二章读书笔记
    Linux内核分析作业 NO.4
    Linux内核分析 NO.3
    Linux内核分析作业 NO.2
    Linux内核分析作业 NO.1
    论自我,论异类——《无声告白》
    愿随命运颠沛流离——《孤儿列车》读后感
  • 原文地址:https://www.cnblogs.com/monogem/p/10715637.html
Copyright © 2020-2023  润新知