Locust快速手册

背景

Locust 相比于 Jmeter,扩展性更强,可以自定义开发函数,支持 grpc & tcp & udp 等协议的压测,且在相同配置服务器机器资源下,能产生更大的压力,因为线程所消耗的资源,比协程要多得多。

Locust 部署的时候,主要是采取分布式的部署方式,1 个 Master 搭配若干个 worker,这里 worker 的数量主要取决于系统的 CPU 核数,比如是 4 核 CPU 的服务器,就可以开启 4 个 worker 来实现并发。

Locust Master 常用的两个默认端口,与 worker 通信的 5557 端口,以及 Web 端数据展示的 8089 端口。

Locust 相比于 Jmeter在相同配置服务器机器资源下,能产生更大的压力,因为线程所消耗的资源,比协程要多得多。

操作路径

1、申请流量发起服务器,部署环境:Python3.7.*、Locust(最新版本)

2、部署目标服务器监听程序:Grafana & Prometheus

3、编写 Locust 脚本:1> 核心请求;2>请求参数构造;3>断言构造;4>请求模式与配置

4、流量发起服务器启动 Master、worker*3(根据服务器配置确定启动 worker 数,过多都会导致进程等待,反而影响加压)

5、控制台访问 Master 启动后获取的地址,配置场景策略,开始执行。

6、监控 Grafana 与控制台机器 Locust 前端、业务响应日志:分析并调整场景策略,最终完成预期测试。

安装

pip install locustio
locust --help
pip install pyzmq  ## 多进程机器部署需要安装

脚本依赖 & 关键参数

# 引入 locust 依赖包
from locust import HttpLocust, TaskSet, task,FastHttpLocust
# 用户(压力线程)会随机等待 5-15s 发起请求
wait_time = between(5, 15)
# 注意 FastHttpLocust 模式 post 请求参数中 URL 需要改为 url=[]
# 建议使用 VIM$:%s/[oldstr]/[newstr]/g

执行

调试

locust 支持直接在脚本页面进行调试,需要引入 run_single_user ,通过直接执行进行场景脚本调试

from locust import HttpUser, task, run_single_user

class QuickstartUser(HttpUser):
    host = "http://localhost"
    @task
    def hello_world(self):
        with self.client.get("/hello", catch_response=True) as resp:
            pass  # maybe set a breakpoint here to analyze the resp object?

# if launched directly, e.g. "python3 debugging.py", not "locust -f debugging.py"
if __name__ == "__main__":
    run_single_user(QuickstartUser)

单进程运行

为了方便调试,先在 no-web 模式下执行,看看脚本是否正常,参数信息通过 locust -h 查看,可以直接通过 print 打印调试。

无网页模式启动, -c 是设置并发用户数,-r 是设置每秒进入用户数, -t 设置运行时长

$ locust  -f locust_test.py  --no-web -c 1 -r 1 -t 10

确认脚本没有问题后,通过 web 模式执行测试

 $ locust  -f locust_test.py -P 8899

多进程/分布式运行

执行压力测试时,可能单个进程或者一台机器无法产生足够的压力,此时需要多进程或者在多台机器上输出压力。不管是多进程模式还是多机模式,都需要先启动一个 master,然后在启动多个 worker。

启动 master, master 不输出压力,需要指定 --master, web 访问端口等参数。

$ locust -f ./locust_test.py --master -P 8899

启动 slaver,同一台机器执行多次启动多个进程,多机分布式通过在不同机器上执行命令,需要指定 --worker和 master 的 ip。

$ locust -f ./locust_test.py --worker

多机分布式运行

启动 master, master 不输出压力,需要指定 --master, web 访问端口等参数。

$ locust -f ./locust_test.py --master -P 8899

启动 worker,多机分布式通过在不同机器上执行命令,需要指定 --worker和 master 的 ip。

$ locust -f ./locust_test.py --worker --master-host=127.0.0.1

多机多进程分布式运行

同上,启动多个机器并每个机器多进程运行

# 隐式(后台运行)后端运行
> cd /usr/local/locust/project/locust-platform-dev/xpro/
# master进程
>nohup locust -f business-config_reqType_xpro.py --master > locust.log 2>&1 &
# worker进程
>nohup locust -f business-config_reqType_xpro.py --worker > locust.log 2>&1 &

辅助动作

# 根据进程关键字杀进程
> pkill -9 locust
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值