首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >locust-TaskSet类vs函数任务

locust-TaskSet类vs函数任务
EN

Stack Overflow用户
提问于 2017-09-03 09:35:29
回答 1查看 3.5K关注 0票数 4

我是蝗虫新手,我正在尝试编写负载测试。我想知道将我想要执行的任务定义为可调用函数,而不是将它们定义为locust TaskSet类之间有什么区别。例如:

代码语言:javascript
复制
class MyTaskSet(TaskSet):
    @task(2)
    def index(self):
       self.client.get("/")

   @task(1)
      def about(self):
        self.client.get("/about/")

class MyLocust(HttpLocust):
    task_set = MyTaskSet

或者:

代码语言:javascript
复制
class about(TaskSet)
   @task
   def about(self):
        self.client.get("/about/")
        self.interrupter()

class index(TaskSet)
    @task
    def index(self)
        self.client.get("/")
        self.interrupter()

class MyTaskSet(TaskSet)
     tasks = {index:2 , about: 1}

class MyLocust(HttpLocust):
    task_set = MyTaskSet

以上两条有什么区别?谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-09-04 12:21:16

TL;博士

两者在负载分配上有很大的不同。

详细解释

假设以下设置,其中一个任务比另一个任务慢得多:

代码语言:javascript
复制
class MyTaskSet(TaskSet):
    @task(2)
    def fast(self):
        self.locust.client.get("/api",name="fast_check")

    @task(1)
    def slow(self):
        time.sleep(1)
        self.locust.client.get("/api",name="slow_check")

class MyLocust(HttpLocust):
    task_set = MyTaskSet

下面是嵌套TaskSets的相同设置:

代码语言:javascript
复制
class Fast(TaskSet):
    @task(1)
    def fast(self):
        self.locust.client.get("/api",name="fast_check")

class Slow(TaskSet):
    @task(1)
    def slow(self):
        time.sleep(1)
        self.locust.client.get("/api",name="slow_check")


class MyTaskSet(TaskSet):
    tasks = {Fast:2 , Slow: 1}


class MyLocust(HttpLocust):
    task_set = MyTaskSet

当您运行这两个脚本时,您会注意到,对于第一个设置,负载是在您权衡任务时大致分布的。1/3的HTTP调用转到slow_check任务,2/3调用到fast_check任务。

但是,在第二个设置中,更多的HTTP调用会转到fast_check。根据1/3-2/3的权重,蝗虫(=用户)似乎被分配给了TaskSet,但随着蝗虫完成速度更快,它也可以更快地从快速TaskSet调度下一个任务。

我不确定这是一个bug还是一个特性,因为在文档中没有具体提到它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46022068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档