内容来自网络
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,则将其加到队首。