背景介绍

由于公司内的性能测试一直使用 Locust 作为工具,线上压测时需要用到多个分布式的压测客户端,这就导致压测期间对各客户端的启停,脚本更新频繁操作,特别是在云上的压测时客户端数量一多,调度效率低下而且很容易弄错,就萌发做一个简易的调度系统,一方面便于管理压测客户端,另一方面对测试人员的使用也图形化减少错误;
项目 git 地址:https://github.com/biyunfei/locustM

主要功能

安装使用

下载源码后,本地调试使用需要安装 locustio==v0.8.1, Django==1.11.10, psutil==5.4.3 这三个 python 依赖包,python 环境 2.7 即可;
主控 Master 端运行:
在主目录下运行命令:python manage.py runserver 0:8000,浏览器打开http://localhost:8000 即可进入分布式客户端调度页面,locust 的加压孵化调度为http://localhost:8089 与 locust 保持不变;

客户端 Slave 运行:
在加压客户机上的./hztest/rpc 目录下运行:python slave.py MASTER_IP(MASTER_IP 为主控 Master 端 IP)

基本操作流程如下:
1.打开调度页面后,刷新客户端列表;
2.选择压测脚本发送给客户端;
3.获取客户端脚本列表,选择要执行的压测脚本文件 (可多选);
4.设置客户端 locust 压测进程数,点击 ‘ready’ 启动进程;如果所有压测进程执行同一场景则只需选择一个脚本,如果不同则需选择多个脚本文件对应进程数;
5.点击 ‘启动 Locust Master 服务’;
6.浏览器打开http://localhost:8089进行压测执行;
7.压测过程中回到调试页面勾选 ‘监听客户端资源’ 并点击 ‘刷新客户端列表’ 即可查看压测机的资源使用率,以便控制压测进程和并发数避免客户端瓶颈对压测数据的影响;
8.压测完成后点击 ‘停止 Locust Master 服务’;
9.再次执行其它压测,直接从头开始步骤即可;

调度页面示例:

镜像分发

考虑到使用时每台客户端要安装 python 环境和依赖包,还是很繁琐;而且有时主机安装环境运行时会遇到各种错误,导致花费很多时间要分发上;为了保证分发的环境无关性,就把整个压测系统做成了 Docker 镜像;需要的童鞋可通过 docker 环境进行下载运行;
目前制作了两个镜像文件,分别是 master 和 slave 端;具体可见https://hub.docker.com/r/biyunfei/locust/

Master 镜像下载与运行:
docker pull biyunfei/locust:master
docker run -p 8000:8000 -p 6666:6666 -p 6667:6667 -p 5557:5557 -p 5558:5558 -p 8089:8089 -it --rm biyunfei/locust:master
如果 docker 是基于 VirtualBox 虚拟 toolbox 版本则需要在 VirtualBox 的虚拟机网卡配置中添加端口转发:8000,6666,6667,5557,5558,8089

Slave 镜像下载与运行:
docker pull biyunfei/locust:slave
docker run -e HOST={MASTER_IP} -it --rm biyunfei/locust:slave 其中{MASTER_IP}为 master 主机 IP


↙↙↙阅读原文可查看相关链接,并与作者交流