【问题标题】:Locust/Python: Splitting a tasks array with if conditions in a SequentialTaskSetLocust/Python:使用 SequentialTask​​Set 中的 if 条件拆分任务数组
【发布时间】:2021-12-25 02:33:15
【问题描述】:

我是 Locust 和 Python 的新手。我已经使用 JMeter 好几年了,我正在尝试实现与我在那里用于处理登录失败的逻辑类似的逻辑。

我想运行一个简单的场景:登录、输入文件夹、注销

我遇到问题的地方是实现这个逻辑:

如果任何登录调用失败,我不想尝试进入文件夹(避免登录后级联失败),但我仍然想运行注销以确保没有活动会话。

我当前的 SequentialTask​​Set 是这样的,它适用于执行子任务集:

class folder_enter_scalability_taskset(SequentialTaskSet):

    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']

    tasks = [login_taskset, folder_enter_taskset, logout_taskset]

有没有办法在同一个 SequentialTask​​Set 中将任务数组拆分为多个步骤?

  1. 始终登录
  2. 如果登录成功,进入文件夹
  3. 始终退出

【问题讨论】:

  • 是否有任何理由无法使用登录、文件夹输入和注销功能创建一项任务?然后,您可以将您的登录名和 folder_enter 包装在一个 try-finally 中,而您的 finally 块正在注销
  • 感谢您的建议,我明白这将如何运作。但是这些被保存为单独的脚本,因为我们希望每个事务在不同的场景中都是可重用的。比如这个场景有Login、Folder Enter、Logout的事务。另一种情况可能是登录、创建文件夹、删除文件夹、注销。所以我们想要一个只有登录的脚本,它可以被任何场景调用,同样用于注销等等,这样就不必跨多个脚本维护相同的调用
  • 您仍然可以将它们作为单独的脚本保存,但将它们包装到一个任务中。我假设这是为了测试
  • 当时我可能误解了最初的建议。只要可重用事务作为单独的脚本保存,我就可以以任何适用于给定逻辑的方式编写它。您是否有示例代码说明如何将它们包装到一项任务中?这会涉及在没有数组的情况下调用子任务集吗?

标签: python locust


【解决方案1】:

感谢 cmets 中的 phil 为我指明了正确的方向,我现在有了一个带有 try-finally 和 if-else 的工作代码,而不是任务数组。希望这可以帮助其他人:

class folder_enter_scalability_taskset(SequentialTaskSet):
    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.client.userrole = seeddata['userrole']

    @task
    def folder_enter_scalability(self):
        try:
            login_taskset.login(self)
            if self.client.loginFail is False:
                folder_enter_taskset.folder_enter(self)
            else:
                logging.error("Login failed, skipping to logout")
        finally:
            logout_taskset.logout(self)

如果我把它放在 try-else-finally 条件下,我没有运气让它跳过文件夹输入,所以我在登录任务集中添加了这个 self.client.loginFail 以支持 if-else试试看。

它被初始化为“False”,并在任务集中失败的情况下翻转为“True”。

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2017-05-11
    相关资源
    最近更新 更多