
locust是一个使用简单的分布式负载测试工具。其目的是用于测试web或者其他系统,并确定系统能够处理多少并发用户数。locust的想法是一大群“蝗虫”去攻击你的服务器,每只“蝗虫”的行为是由你控制的,并且通过web界面上能够实时监控“蝗虫”的攻击情况。
locust是一个使用简单的分布式负载测试工具。其目的是用于测试web或者其他系统,并确定系统能够处理多少并发用户数。locust的想法是一大群“蝗虫”去攻击你的服务器,每只“蝗虫”的行为是由你控制的,并且通过web界面上能够实时监控“蝗虫”的攻击情况。
为何选择locust:
1、Locust是完全基于事件的,使用gevent库实现协程(微线程),所以它可以实现成千上万的并发用户数再单台负载机上
2、Locust可以使用Python编写场景,不必使用沉重的UI和臃肿的XML。
3、支持分布式、可扩展的
4、通过web界面能够实时监控测试情况
5、可以使用Python自己编写脚本测试任何协议的应用
注:协程可以理解为cpu的中断,只不过这个实现是在一个线程里实现的
locust安装:
1、pip install locustio
2、pip install pyzmq 需要使用分布式需安装
3、locust -V 如果正确查看到版本代表安装成功
4、设置系统打开文件数大于当前机子要模拟的用户数
#ulimit -n 65535
注:如果使用大规模的性能测试,不建议安装在Windows,因为协程库gevent在Windows下性能差。
hello world例子:
1、#vim a.py
from locust import HttpLocust,TaskSet,task
class User1Tasks(TaskSet):
def on_start(self):
print 'do on_start.......'
@task(1)
def index1(self):
r=self.client.get('/test/index.html')
print r.text
@task(2)
def search1(self):
r=self.client.get('/test/search.html')
print r.text
class User1(HttpLocust):
task_set = User1Tasks
min_wait = 5000
max_wait = 9000
weight = 2
2、说明:
class User1Tasks(TaskSet):定义用户的行为,业务脚本
on_start:在任何任务执行前执行,且只执行一次
@task(n):任务修饰器,代表该方法是一个任务。有多个task时,其中的n
代表执行该任务权重
self.client.get(path):采用Python的requests,使用方法一致。
class User1(HttpLocust):一个模拟用户
host:测试服务器地址
task_set:指定使用的用户行为
#一个用户执行每个任务之间的等待时间,从最小到最大中随机获取,默认是1,所以如果不等待 需要将这两个属性设置为0
min_wait:
max_wait:
weight:如果有多个模拟用户,当前这个模拟用户的权重(如有User1和User2分别设置权重1、2,如果测试时指定9个模拟用户数,那么会有3个模拟用户数执行User1任务,有6个模拟用户数执行User2任务)
注:
2.1、测试时会一个模拟用户会按task权重,随机选择一个task进行执行
2.2、请求方法除了get还有post、delete、put、options等
3、启动程序:locust -f filename.py --host=http://ip:port -P 8089
