Locust介绍
Locust是基于事件的分布式负载测试工具。名字和logo都代表蝗虫/蚂蚱,解释是因为它们总是成群。
特点
- 基于协程,资源占用率小,效率高
补充说明 进程、线程、协程区别 进程:进程是资源分配的单位,程序运行时系统就会创建一个进程,并为它分配资源。然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。 线程:线程是系统调度的单位,是程序执行时的最小单位。它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 协程:又称微线程,协程是程序级别的,由程序员根据需要自己调度。协程无需线程上下文切换的开销,只是单纯的操作CPU的上下文,所以资源占有率很小。缺点是协程阻塞时可能会使整个程序都阻塞。 举个简单的例子便于理解 一个生产车间需要生产线。老板【CPU】刚开始投资【花费资源】买了一条生产线【创建了一个进程】,然后招聘了一个工人【创建单线程】进行生产,为了提高效率,老板又招聘了一些工人【多线程】。人多了老板【CPU】发现总会有工人因为没有活干或者等待上一个工序的完成而闲下来无事可做,于是就分配这些恰好空闲的工人去完成其他的工作【协程】。根据这个例子可以发现,切换进程需要资源较多,协程则只需要很少的资源(找他聊聊天,跟他说一下干什么)。
- 基于webUI界面,可以实时显示相关的测试结果
- 支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点
- 所有繁琐的I/O和协同程序都被委托给gevent,替代其他工具的局限性
- 官网说:这个很简单,你快来学吧
入门
现在下载Locust 你的python版本至少要3.6的。
安装pip install locust
即可。
我们先写一个简单的例子,看一下界面
# coding: utf-8
from locust import HttpUser, task
class TestIndex(HttpUser):
@task
def getIndex(self):
self.client.get('/s?wd=性能')
然后在terminal输入
locust -f testindex.py --host=https://www.baidu.com
回车执行,就可以看到
点击生成的链接:http://0.0.0.0:8089
跳转到浏览器
上面6和2代表每秒增加2个用户,最多增加到6个(3秒增加完成)
点击Start swarming
开始执行
可以看到数据是不停的在变动,点击红色Stop按钮,即可停止
切换标签页到Charts
即可查看图表
在Download Data页签可以下载csv数据或者测试报告
【提醒】做demo时建议不要把用户数做的太大,法律认为,在明知道有可能将对方服务器搞崩溃的情况下仍然进行操作,并对对方造成损失就属于违法。
标签解释
- Type:请求类型,即接口的请求方法
- Name:请求路径
- Requests:当前已完成的请求数量
- Fails:当前失败的数量
- Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒
- 90%ile:90%响应时间,单位为毫秒
- 99%ile:99%响应时间,单位为毫秒
- Average:平均响应时间,单位为毫秒
- Min:最小响应时间,单位为毫秒
- Max:最大响应时间,单位为毫秒
- Average Size:平均响应数据大小,单位为字节;
- Current RPS:当前每秒请求数量
- Current Failures/s:每秒失败数量
这些名词可以在F12里查看解释