Locust性能-零基础入门系列(5)

一:tasks属性另外一种写法:


首先上脚本示例代码

from locust import User, constant

def task_1(l):
    print("This is task 1")

def task_2(l):
    print("this is task_2")

class MyUser(User):
    tasks = {task_1: 1 , task_2: 2} 
    wait_time = constant(1)


代码解读:

第1-7行,之前有介绍过,这里略过。

第9行,是定义了一个用户类。

第10行,是定义了tasks属性值,这里的属性值和文章 Locust性能-零基础入门(4) -tasks属性值的用法  中介绍tasks属性不太一样,这里运用的是字典形式,除了定义任务的范围之外,还设置了每个任务的权重,比如task_1的权重为1,task_2的权重为2,那么也即是三分之一的流量会执行task_1,剩下的流量会执行task_2。这种模式更简单,也更容易理解。其实通过笔者的实验,tasks属性附带权重的写法,其实还有一种更容易理解的方式。具体如下:

tasks = [task_1,task_2,task_2]

tasks属性还是以列表的方式来赋值,只是在其列表中,大家会发现task_2有两次出现,其实也间接实现了权重设置的目的。只是这种方式稍显笨拙,其实更易理解。


二:User实例化展示

我们知道Locust模拟虚拟用户必须要继承User类,或者其子类,比如HttpUser类。那么在复杂的场景模拟中,当有不同的用户类出现时,怎么去定位或者识别当前虚拟用户的身份呢?Locust提供了获取虚拟用户身份的方式,具体如下代码:

from locust import User,task,constant

class MyUser(User):
    wait_time = constant(1)
    @task
    def my_task(self):
        print("User instance (%r) executing my_task" % self)

如上图代码中的第7行,其中 %r 占位符,就可以获取User instance的上下文信息,注意必须是 %r。脚本运行之后,我们会得到的用户上下问信息如下,我们可以清晰地看到有2个虚拟用户,而这2个虚拟用户都是继承了MyUser用户类。

All users hatched: MyUser: 2 (0 already running)
User instance (<file6.MyUser object at 0x10a61b2e8>) executing my_task
User instance (<file6.MyUser object at 0x10a688748>) executing my_task
User instance (<file6.MyUser object at 0x10a61b2e8>) executing my_task
User instance (<file6.MyUser object at 0x10a688748>) executing my_task
User instance (<file6.MyUser object at 0x10a61b2e8>) executing my_task
User instance (<file6.MyUser object at 0x10a688748>) executing my_task
User instance (<file6.MyUser object at 0x10a61b2e8>) executing my_task
...


猜你喜欢

转载自blog.51cto.com/13734261/2543011