【问题标题】:How works StopUser in Locust?蝗虫中的 StopUser 是如何工作的?
【发布时间】:2022-01-19 19:35:48
【问题描述】:

您能否帮助我了解 StopUser 在 Locust 中的工作原理 - 我创建了一个简单的示例,其中我有 4 个生成率为 2 的用户,这意味着在第二个 2 时我将有 4 个工作用户。但是如果我使用 StopUser,前两个用户必须在任务完成后停止工作,对吧?

class SimpleClass(HttpUser):
wait_time = between(1, 2)
host = "https://example.com"

@task()
def just_print(self):
    logging.debug(f"working {datetime.today().timestamp()}")
    raise StopUser

配置:

users: 4
spawn-rate: 2
run-time: 20

在日志中,还有另一种情况——最后,我有 6 个用户,前 2 个用户没有停止工作。

[2022-01-19 21:21:57,560] Andriis-MacBook-Pro.local/INFO/locust.main: Run time limit set to 20 seconds
[2022-01-19 21:21:57,560] Andriis-MacBook-Pro.local/INFO/locust.main: Starting Locust 2.5.1
[2022-01-19 21:21:57,561] Andriis-MacBook-Pro.local/INFO/locust.runners: Ramping to 4 users at a rate of 2.00 per second
[2022-01-19 21:21:57,561] Andriis-MacBook-Pro.local/DEBUG/locust.runners: Ramping to {"SimpleClass": 2} (2 total users)
[2022-01-19 21:21:57,561] Andriis-MacBook-Pro.local/DEBUG/locust.runners: Spawning additional {"SimpleClass": 2} ({"SimpleClass": 0} already running)...
[2022-01-19 21:21:57,562] Andriis-MacBook-Pro.local/DEBUG/locust.runners: 2 users spawned
[2022-01-19 21:21:57,562] Andriis-MacBook-Pro.local/DEBUG/locust.runners: All users of class SimpleClass spawned
[2022-01-19 21:21:57,562] Andriis-MacBook-Pro.local/DEBUG/locust.runners: 0 users have been stopped, 2 still running
[2022-01-19 21:21:57,562] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620117.562613
[2022-01-19 21:21:57,562] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620117.562741
[2022-01-19 21:21:58,567] Andriis-MacBook-Pro.local/DEBUG/locust.runners: Ramping to {"SimpleClass": 4} (4 total users)
[2022-01-19 21:21:58,567] Andriis-MacBook-Pro.local/DEBUG/locust.runners: Spawning additional {"SimpleClass": 4} ({"SimpleClass": 0} already running)...
[2022-01-19 21:21:58,568] Andriis-MacBook-Pro.local/DEBUG/locust.runners: 4 users spawned
[2022-01-19 21:21:58,568] Andriis-MacBook-Pro.local/DEBUG/locust.runners: All users of class SimpleClass spawned
[2022-01-19 21:21:58,568] Andriis-MacBook-Pro.local/DEBUG/locust.runners: 0 users have been stopped, 4 still running
[2022-01-19 21:21:58,568] Andriis-MacBook-Pro.local/INFO/locust.runners: All users spawned: {"SimpleClass": 4} (4 total users)
[2022-01-19 21:21:58,568] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620118.568855
[2022-01-19 21:21:58,569] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620118.569034
[2022-01-19 21:21:58,569] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620118.569189
[2022-01-19 21:21:58,569] Andriis-MacBook-Pro.local/DEBUG/root: working 1642620118.56934
[2022-01-19 21:22:17,147] Andriis-MacBook-Pro.local/INFO/locust.main: --run-time limit reached. Stopping Locust
[2022-01-19 21:22:17,149] Andriis-MacBook-Pro.local/DEBUG/locust.runners: Stopping all users
[2022-01-19 21:22:17,149] Andriis-MacBook-Pro.local/DEBUG/locust.runners: 0 users have been stopped, 0 still running
[2022-01-19 21:22:17,152] Andriis-MacBook-Pro.local/INFO/locust.main: Running teardowns...
[2022-01-19 21:22:17,152] Andriis-MacBook-Pro.local/INFO/locust.main: Shutting down (exit code 0), bye.
[2022-01-19 21:22:17,152] Andriis-MacBook-Pro.local/INFO/locust.main: Cleaning up runner...

【问题讨论】:

    标签: python locust


    【解决方案1】:

    StopUser 是 Locust 内部的,不能直接使用。用户不能真正被阻止。你可以通过调用time.sleep(999999)或其他方式达到同样的效果。

    【讨论】:

    • 但是为什么用户会在 2 秒后停止工作?运行时间为 20 秒。就像 Locust 等待用户 ==4 -> 然后停止所有用户。
    • 但无论如何我明白你的意思 -> 仅在这样的条件下使用 StopUser:使用 self.client.post(url_path, json=body, catch_response=True, name="request name") as test_requests: if test_requests.status_code != 200: raise StopUser
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多