我是蝗虫新手,我正在尝试编写负载测试。我想知道将我想要执行的任务定义为可调用函数,而不是将它们定义为locust TaskSet类之间有什么区别。例如:
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或者:
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以上两条有什么区别?谢谢
发布于 2017-09-04 12:21:16
TL;博士
两者在负载分配上有很大的不同。
详细解释
假设以下设置,其中一个任务比另一个任务慢得多:
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的相同设置:
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还是一个特性,因为在文档中没有具体提到它。
https://stackoverflow.com/questions/46022068
复制相似问题