locust介绍
locust是一款可以用于分布式用户负载测试的工具,可以对网站或其他系统进行负载测试
可以定义每个用户的行为,通过web UI监视过程,可以更方便的看出系统的瓶颈
locust完全基于事件,可以用一台计算机支持数千个用户
测试代码使用python编写,可以自己编写需要测试的页面 与该页面的权重
locust安装
可以使用pip进行安装
pip -V #可以查看pip的版本,如果没有,进行安装pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
python get-pip.py
#python get-pip.py 将pip关联到python上
#python3 get-pip.py 将pip关联到python3上
#根据需要关联对应的python版本
#Debian 和 Ubuntu 可以用包管理器安装
apt-get install python-pip
#centos等可以进行搜索 查看后选择安装
yum search pip
#pip升级
pip install -U pip
#pip 安装包
pip install ***
pip安装完成后,可以通过pip安装locust
pip install locustio
locust支持python 2.7和3.4以上的版本
locust也可以在windows上进行使用,但是Windows无法进行大规模测试,gevent在Windows上的性能很差
locust --help
如果有输出 locust安装成功
需要修改服务器的最大打开文件数的限制
ulimit -n #查看当前最大文件限制
ulimit -n 65535 #可以临时修改当前进程的最大打开文件数,重启后失效
vim /etc/security/limits.conf #在最后添加或修改成下面
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
#可以永久修改最大打开文件数限制,root代表为root账号的设置
# * 代表对所有用户的限制
使用locust
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def on_stop(self):
""" on_stop is called when the TaskSet is stopping """
self.logout()
def login(self):
self.client.post("/login", {"username":"ellen_key", "password":"education"})
def logout(self):
self.client.post("/logout", {"username":"ellen_key", "password":"education"})
@task(2)
def index(self):
self.client.get("/")
@task(1)
def profile(self):
self.client.post("/profile")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
host = "http://example.com"
min_wait = 5000
max_wait = 9000
文件名保存为 locustfile.py
,在当前目录运行locust,就可以启动压力测试,默认端口为8089,服务器ip:8089可以打开web页面 进行压力测试
可以运行指定的文件
locust -f locust_files/my_locust_file.py
-f filename
使用对应的测试文件运行locust-H | --host
指定运行需要测试的主机域名,不指定或者指定为no将使用测试文件中的host--master
将蝗虫设置为以分布式模式运行,并将此进程设置为主进程--slave
将蝗虫设置为以分布式模式运行,并将此进程设置为从进程--master-host
指定主机 可以设置分布式 主机默认为127.0.0.1 (不同机器配置分布式时,必须指定)--no-web
不使用web界面 直接运行 需要指定以下参数-c |--no-web
模拟的用户数量 (必须)-r | --hatch-rate
设置同时请求数 (必须)-t | --run-time
运行时间 (可选)--print-stats
打印执行状态
编写测试脚本
from locust import Locust, TaskSet, task
class MyTaskSet(TaskSet):
@task
def my_task(self):
print("executing my_task")
class MyLocust(Locust):
weight = 3
task_set = MyTaskSet
min_wait = 5000
max_wait = 15000
class WebUserLocust (Locust):
weight = 1
task_set = MyTaskSet
min_wait = 5000
max_wait = 15000
#运行两个
locust -f locust_file.py WebUserLocust MyLocust
task_set
指定用户行为min_wait
指定用户最小的等待时间max_wait
指定用户最大的等待时间weight num
可以指定运行的权重,数字越大 权重越高,执行的次数也越多@task(num)
可以指定权重,数字越大 权重越高,执行的次数也越多on_start
在用户开始执行该类方法的时候被调用on_stop
在该taskset 停止的时候 方法被调用
运行顺序
- Locust setup
- TaskSet setup
- TaskSet on_start
- TaskSet tasks…
- TaskSet on_stop
- TaskSet teardown
- Locust teardown