例如,我有以下课程。如果未执行get_entity
任务,如何防止执行create_entity
任务?
class MyTaskSequence(TaskSequence):
@seq_task(1)
def create_entity(self):
self.round += 1
with self.client.post('/entities', json={}, catch_response=True) as resp:
if resp.status_code != HTTPStatus.CREATED:
resp.failure()
# how to stop other tasks for that run?
self.entity_id = resp.json()['data']['entity_id']
@seq_task(2)
def get_entity(self):
# It is being always executed,
# but it should not be run if create_entity task failed
resp = self.client.get(f'/entities/{self.entity_id}')
...
我在文档中找到了TaskSet.interrupt
方法,但不允许取消根TaskSet。我尝试为任务序列创建父TaskSet,因此TaskSet.interrupt
可以工作。
class MyTaskSet(TaskSet):
tasks = {MyTaskSequence: 10}
但是现在我看到在我调用interrupt
之后ui中的所有结果都被清除了!
我只需要按此顺序跳过相关任务。我需要结果。
答案 0 :(得分:0)
解决此问题的最简单方法是使用单个@task,其中包含多个请求。然后,如果请求失败,只需在resp.failure()之后执行return
答案 1 :(得分:0)
self.interrupt()
可能是您想要的吗?
请参阅https://docs.locust.io/en/latest/writing-a-locustfile.html#interrupting-a-taskset以供参考。
答案 2 :(得分:0)
为什么不使用on_start(self):
,只要它在蝗虫创建时就运行一次,它可以设置一个可以检查蝗虫是否执行任务的全局变量
class MyTaskSequence(TaskSequence):
entity_created = false
def on_start(self):
self.round += 1
with self.client.post('/entities', json={}, catch_response=True) as resp:
if resp.status_code != HTTPStatus.CREATED:
self.entity_created = true
resp.failure()
self.entity_id = resp.json()['data']['entity_id']
@seq_task(2)
def get_entity(self):
if self.entity_created:
resp = self.client.get(f'/entities/{self.entity_id}')
...