性能测试工具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,则将其加到队首。

 

posted @ 2019-04-16 10:59  Monogem  阅读(2411)  评论(0编辑  收藏  举报