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

在路上 · March 18, 2018 · Last by Yingzhou1993 replied at July 06, 2019 · 3325 hits

背景介绍

由于公司内的性能测试一直使用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

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

干得漂亮!!!😼

果冻 回复

共勉!

Author only
jiangboss 回复

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

我是用源码的

jiangboss 回复

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

jiangboss 回复

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

Author only

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

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

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

ningquanshui 回复

你解决了么?

ligho 回复

自动启动的

from . import master
from .protocol import Message

15Floor has been deleted
Author only
Author only
18Floor has been deleted

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up