暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Locust性能测试-API调用详解3-TaskSet属性

TimTest 2021-02-16
809

一:TaskSet任务执行逻辑:

当一个任务集合(TaskSet)开始执行时,会随机选取一个task进行执行(带有task的装饰器的方法);执行完毕后;停顿一段时间(时间长短在wait_time属性中定义,如果TaskSet集合没有定义wait_time,那么会获取User类中定义的wait_time值),然后继续执行TaskSet集合中的任务。


二:TaskSet嵌套任务执行:

通常情况下,在进行脚本编写时,需要用到TaskSet的嵌套写法。这样做的目的主要是逻辑的可读性和完整性,比如在一个页面上可能有不同种类的任务操作等,那么不同种类,可以在写在不同的嵌套类中进行管理,这样条理更清晰。如下示例:

    from locust import task,between,TaskSet, User


    class TaskSetP(TaskSet):


    @task(2)
    class TaskSetC1(TaskSet):
    @task(2)
    def TaskC_1(self):
    print("This is TaskC_1")


    @task(1)
    def TaskC_2(self):
    print("This is TaskC_2")


    @task(1)
    def logout(self):
    print("This is logout task")


    class MyUser(User):
    wait_time = between(2,3)
    tasks = [TaskSetP]


    复制

    脚本执行结果如下,说明当任务执行到嵌套子类TaskSetC1中,就会一直在此子类中执行。

      [2021-02-16 22:54:54,634] jasondeMacBook-Pro.local/INFO/locust.runners: All users hatched: MyUser: 1 (0 already running)
      This is TaskC_1
      This is TaskC_1
      This is TaskC_2
      This is TaskC_2
      This is TaskC_1
      This is TaskC_1
      This is TaskC_1
      This is TaskC_1
      This is TaskC_2
      This is TaskC_1
      This is TaskC_2
      This is TaskC_1
      复制

      继续以上的问题,脚本中缺少了中断机制,我们可以在一些需要的方法中设置中断函数去实现这样的目的"当触发到这样的函数,将脚本执行的权力交还给父类"。示例代码如下,可以发现在第14行,在任务函数TaskC_2中添加了中断函数 self.interrupt()。

        from locust import task,between,TaskSet, User


        class TaskSetP(TaskSet):


        @task(2)
        class TaskSetC1(TaskSet):
        @task(2)
        def TaskC_1(self):
        print("This is TaskC_1")


        @task(1)
        def TaskC_2(self):
        print("This is TaskC_2")
        self.interrupt()


        @task(1)
        def logout(self):
        print("This is logout task")


        class MyUser(User):
        wait_time = between(2,3)
        tasks = [TaskSetP]






        复制

        场景运行结果输出如下,可以发现,除了执行子类中的方法外,也会执行父类中的方法"logout"。

          [2021-02-16 22:59:31,473] jasondeMacBook-Pro.local/INFO/locust.runners: All users hatched: MyUser: 1 (0 already running)
          This is TaskC_2
          This is TaskC_1
          This is TaskC_1
          This is TaskC_2
          This is logout task
          This is logout task
          This is TaskC_1
          This is TaskC_2
          复制




          文章转载自TimTest,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论