You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust/Python:SequentialTaskSet中按条件拆分tasks数组实现登录异常处理

实现方案

你可以通过新增登录状态标记+子任务前置判断的方式实现需求,不需要拆分tasks数组,改动成本很低:

  • 第一步:在主SequentialTaskSet中新增自定义状态变量login_success,默认值为False,用于记录登录是否成功
  • 第二步:修改login_taskset的逻辑,登录请求成功后将父级TaskSet的login_success设为True;如果登录失败,不要抛出终止任务链的异常,保证后续任务可以继续执行
  • 第三步:修改folder_enter_taskset的入口逻辑,首先判断父级TaskSet的login_success状态,若为False直接跳过当前任务的所有执行逻辑
  • 第四步:保持logout_taskset的原有逻辑即可,SequentialTaskSet会按顺序执行到该任务,不管前面登录是否成功

修改后的代码示例

主SequentialTaskSet调整:

class folder_enter_scalability_taskset(SequentialTaskSet):
    # 新增登录状态标记
    login_success = False

    def on_start(self):
        self.tm = TransactionManager()

    @task
    def seedata_config(self):
        seeddata = next(seeddata_reader)
        self.client.username = seeddata['username']
        self.client.password = seeddata['password']
        # 每次新迭代重置登录状态,避免上一次结果影响
        self.login_success = False

    tasks = [login_taskset, folder_enter_taskset, logout_taskset]

login_taskset调整:

class login_taskset(SequentialTaskSet):
    @task
    def login(self):
        resp = self.client.post("/你的登录接口路径", json={
            "username": self.parent.client.username,
            "password": self.parent.client.password
        })
        # 登录成功时修改父级的状态标记,可根据实际业务判断规则调整
        if resp.status_code == 200 and "success" in resp.text:
            self.parent.login_success = True
        # 注意不要调用interrupt()之类的中断方法,保证任务链继续执行

folder_enter_taskset调整:

class folder_enter_taskset(SequentialTaskSet):
    @task
    def enter_folder(self):
        # 前置判断登录状态,不成功直接跳过后续逻辑
        if not self.parent.login_success:
            return
        # 原有进入文件夹的业务逻辑
        self.client.get("/你的进入文件夹接口路径")

logout_taskset无需特殊调整,你也可以在内部加一层登录状态判断,登录未成功时直接跳过接口请求,避免产生无效调用。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:06:04