Locust 1.X 系列教程:目录大纲(QQ 交流群:1044725943)
教程版本
基于版本:1.0.3
最近更新:2020年07月
目录大纲
01、快速开始
Locust 系列教程:目录大纲
Locust 简介、环境、安装
Locust 快速开始:一个简单的登录、页面浏览脚本
02、脚本开发实现
Locust 脚本开发入门(1)
Locust 脚本开发入门(2)
Locust 脚本开发入门(3)
Locust 脚本开发入门(4)
03、测试场景执行
Locust 场景执行:Web UI 中执行
Locust 场景执行:命令行中执行
Locust 场景执行:分布式执行
Locust 场景增强:
Locust 场景增强:
04、结果查看&增强
Locust 结果增强:
Locust 结果增强:
Locust 结果增强:
05、进阶应用
Locust 进阶应用:WebSocket 协议测试
Locust 进阶应用:消息队列中间件压测(RabbitMQ)
Locust 进阶应用:解决图片验证码
06、常见问题 & 实践
Locust 常见问题
关于教程
0、什么是 Locust
无需多讲,引用官网文案
Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
—— 用Python代码定义用户行为,让数百万并发用户涌入您的系统。
1、为什么百度找到的大部分 Locust 教程(包括B站视频)都不适用了?
Locust 自从1.X 版本号开始有了大量重要变更(breaking changes),目前百度前面几页的结果和教程基本上都是基于0.14.6之前,甚至大量基于0.10编写的,甚至还有发布时间为上个月的0.10教程,萌新如果觉得 Locust 啃不下去是自然的。
2、官方在 1.0 以后的重要变更包括哪些?
包括了 类的重命名、任务规划策略的丰富、启动传参:
- 类的重命名,比如:Locust 重命名为 user,HttpLocust 重命名为 HttpUser 等
- 启动参数的变更,比如:-c 修改为 -u,--no-web 修改为 --headless 等
- 多个环境变量的重命名,比如 LOCUST_MASTER 变更为 LOCUST_MODE_MASTER 等
- 可以直接在 user 类下面直接使用 @task 进行任务规划
- 增加了新的 装饰器 @tags 进行任务规划
- ……
(这意味着这次大版本升级,之前的脚本、启动命令都必须做出一些修改)
3、Locust 目前仍然是我最推荐测试工程师学习的压测框架(为什么不是 Jmeter)
下面纯粹从学习成本和收益的角度来讲几个个人观点:
- 首先,它的脚本语言使用了 python,虽然我也不明白为什么 python 如今在测试群体里面这么火,也许是主流的测试框架基本都支持 python?如果你已经简单了解过 requests 库,只要看几个脚本 demo ,那 Locust (HTTP)脚本的开发几乎就毫无难度。
- 其次,Locust 不像 LoadRunner、Jmeter 这种压测工具通过线程对应一个用户/并发的方式产生负载,而是基于协程的 gevent 网络库(以协程+IO多路复用的方式),这就意味着,同样配置的机器,你可以轻易创建远超 Jmeter 所能创建的负载(LoadRunner 一个 Vuser 占用内存数M甚至数十MB,而 Jmeter 最高并发数受限于 JVM 大小),因此,你很少需要在需要高并发测试场景中花费额外时间去解决负载机资源不足的问题了。
- 再其次,虽然我们日常压测的大部分场景都是针对 HTTP 接口,但是随着你对“压测”这两个字的理解加深,你会渐渐发现末端(指接口)的压测只是整个压测过程的冰山一角。如果需要对 WebSocket 做压测,你要用 Jmeter 那套死板的插件吗?如果需要做消息队列中间件压测呢?如果是数据库中间件压测呢?如果是RPC协议呢?如果是直播的推拉流呢?只能干等着插件出来吗?但如果这时候你用的是 Locust,那你就能自行实现 Client 进而实现其压测脚本!
- 最后,(如果你不会 java 的话)你不觉得在 Jmeter UI界面上来来回回拖放的脚本“开发”方式十分无趣吗?你是否体会过一个压测脚本的实现居然受限于 UI 界面的无奈?在 Jmeter 上只要是稍微复杂的业务逻辑如果没有逻辑组件,那就得依赖代码实现,难道你还会专门去学 beanshell?
当然,为了学习性能测试而去学习 Jmeter 也并没有任何毛病,我本人从 09年开始用 Jmeter 到今天也没觉得它不称手,最大的问题其实是遇到问题没有 Plan B。
4、学习过程中遇到问题,如何解决?
- 在页面下方提问,我尽快以博文方式阐述清楚进行答复
- 交流 QQ 群(性能与自动化交流):1044725943