我是蝗虫的新手,我正在尝试编写负载测试。 我想知道将我想要做的任务定义为可调用函数而不是将它们定义为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
上面的2有什么区别? 感谢
答案 0 :(得分:0)
<强> TL; DR 强>
在负载分配方面,两者之间存在巨大差异。
详细说明
想象一下以下设置,其中一个任务比另一个任务慢得多:
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
以下是嵌套TaskSet的相同设置:
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的权重,看起来好像是将Locust(=用户)分配给TaskSet,但是当Locust完成得更快时,它可以更快地从Fast TaskSet安排下一个任务。好。
我不确定这是错误还是功能,因为文档中没有具体提及。