背景:
locust 压测是以模拟一定用户数量完成指定操作实现的压测。
它的基础维度是用户数量(HttpUser),压测时指定多少用户数,就会有相应的HttpUser
实例。
用户的操作行为定义,是通过一个个@task
装饰的方法实现。
当模拟比较复杂的用户行为时,只是依赖@task
,不便于行为管理。这时可以使用TaskSet
,完成用户的行为管理。
HttpUser与行为的分开定义:
import os
from logging import getLoggerfrom locust import HttpUser
from locust import TaskSet
from locust import events
from locust import task
from locust.log import setup_loggingsetup_logging("INFO", None)
logger = getLogger(os.path.basename(__file__))class Behavior(TaskSet):def on_start(self):logger.info('开始访问活动')@taskdef index(self):self.client.get("/")def on_stop(self):logger.info('结束访问活动')class MyUser(HttpUser):host = "https://docs.locust.io"tasks = [Behavior]def on_start(self):logger.info('用户开始行动')def on_stop(self):logger.info('用户结束行动')
通过一次压测日志分析程序调用:
配置100个用户,每次增加1个用户的压测:
[2024-01-06 18:28:46,258] Qredsun/INFO/locust.runners: Ramping to 100 users at a rate of 1.00 per second
[2024-01-06 18:28:46,260] Qredsun/INFO/demo.py: 用户开始行动
[2024-01-06 18:28:46,261] Qredsun/INFO/demo.py: 开始访问活动
[2024-01-06 18:28:47,261] Qredsun/INFO/demo.py: 用户开始行动
[2024-01-06 18:28:47,261] Qredsun/INFO/demo.py: 开始访问活动
[2024-01-06 18:28:48,265] Qredsun/INFO/demo.py: 用户开始行动
[2024-01-06 18:28:48,266] Qredsun/INFO/demo.py: 开始访问活动
[2024-01-06 18:28:49,269] Qredsun/INFO/demo.py: 用户开始行动
[2024-01-06 18:28:49,269] Qredsun/INFO/demo.py: 开始访问活动
[2024-01-06 18:28:50,272] Qredsun/INFO/demo.py: 用户开始行动
[2024-01-06 18:28:50,272] Qredsun/INFO/demo.py: 开始访问活动
过程中手动终止压测后,控制台日志输出:
[2024-01-06 18:28:51,132] Qredsun/INFO/demo.py: 结束访问活动
[2024-01-06 18:28:51,132] Qredsun/INFO/demo.py: 用户结束行动
[2024-01-06 18:28:51,133] Qredsun/INFO/demo.py: 结束访问活动
[2024-01-06 18:28:51,133] Qredsun/INFO/demo.py: 用户结束行动
[2024-01-06 18:28:51,134] Qredsun/INFO/demo.py: 结束访问活动
[2024-01-06 18:28:51,134] Qredsun/INFO/demo.py: 用户结束行动
[2024-01-06 18:28:51,135] Qredsun/INFO/demo.py: 结束访问活动
[2024-01-06 18:28:51,135] Qredsun/INFO/demo.py: 用户结束行动
[2024-01-06 18:28:51,136] Qredsun/INFO/demo.py: 结束访问活动
[2024-01-06 18:28:51,137] Qredsun/INFO/demo.py: 用户结束行动
结论:
- 依次增加一个用户,先调用HttpUser的on_start
- 用户执行操作,先调用TaskSet的on_start
- 结束压测,结束操作,调用TaskSet的on_stop
- 结束用户实例,调用HttpUser的on_stop