目标
构建一个分布式的 Http 接口的压力测试平台,核心基于开源的 locust,因为 python 的压测能力较低,slaver 端采用开源的用 go 改写的 boomer。
原版需要提供完整的 go 脚本/python 脚本,一次一用,对他人使用难度大。
设想可以提供 postman 类似的界面来构造接口描述信息,由 master 推送给各个 worker。
各个 worker 解析接口描述信息生成满足 boomer 要求的请求并运行。
通过 locust 的 api 获取指标信息,可以绘制实时折线图(可以改造为 推送 prometheus,配合 grafana 查看历史记录)
想要达到分担压力测试的 worker 可随意增加的目的,所以 master(flask)需要自动发现 woker(boomer)的功能
因为为了日后官方更新后好维护,不想改动 locust 源码和 boomer 源码。
只想在其上层包装,那 master 端依然 python 改写,slaver 依然使用 go 改写。要解决两者信息传递问题。
无责任草图
完成的结果
- 有 1 个类似 Postman 一样的事务管理页面:
- 可以设置全局代理是全局 session
- 可以设置全局性的前置步骤(其实就是请求链,比如:先获取 token 并保存参数,再带上此 token 参数提交登录请求)
- 可以编写并行的事务及对应权重,
- 每个事务也可编写事务内前置请求链及需要测试的 API 请求
- 提供多种参数保存方式(xpath 解析 html、json 字段获取、正则获取、固定字符串...)
- 保存好事务,或备份事务到本地
- 提供压测机管理页面
- 提供编译好的压测端(window64,linux64,注:macOS 的在文件夹 slaveEXE 中)下载
- 按照说明(见 readme)执行压测命令(页面上的我写死了 ip,勿理会)
- 将事务保存后,选择压测端提交
- 剩余就和原 locust 的操作一致了
- 只是实现了简单的有 UI 的事务管理及分布式压测器管理,其他的没做