性能测试工具 Locust 性能测试分布式调度平台

在路上 · 2018年03月18日 · 最后由 test666 回复于 2021年12月05日 · 3300 次阅读

背景介绍

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

主要功能

  • WEB 界面管理
  • Locust 的 master 和 slave 进程启停
  • 压测脚本分发
  • 压测客户端进程数控制
  • 压测客户端资源监控

安装使用

下载源码后,本地调试使用需要安装 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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞

干得漂亮!!!😼

果冻 回复

共勉!

仅楼主可见
jiangboss 回复

你是直接用源码运行的,还是用 docker 镜像运行的?

我是用源码的

jiangboss 回复

有报错吗?master 端能收到来自 slave 端的心跳消息吗?

jiangboss 回复

如果还不行,你留个 QQ 我加你远程排查一下吧

仅楼主可见

最新更新了 docker 镜像生成配置文件,适用于分布式压测客户机部署,master 主控一台的场景;

有个问题请教下,master.py 这个是在哪里启动的啊,我看了代码,还是找不到启动的地方

为什么启动服务端后,master 收不到心跳呢,是要启动 master 么?

ningquanshui 回复

你解决了么?

ligho 回复

自动启动的

from . import master
from .protocol import Message

仅楼主可见
仅楼主可见

为什么我在在主目录下运行命令:python manage.py runserver 0:8000 报错了,errno11001

牛逼,看不懂

仅楼主可见
仅楼主可见
仅楼主可见

@ 在路上 你好,请问下,我已经启动 python manage.py runserver 0:8000 和 python slave.py MASTER_IP 未报错
但列表客户端刷不出来是什么原因呢,多谢~~(QQ :1025702572)

15楼 已删除
18楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册