一. locust概述
1.locust官方介绍
Locust 官方网站:https://www.locust.io/
locust官网介绍是:
- An open source load testing tool.
- Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
locust是一个开源的性能测试工具,使用 Python 代码来定义用户行为,用它可以模拟百万计的并发用户访问你的系统。
locust翻译过来是蝗虫的意思,locust工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,以此检测系统在高并发压力下是否能正常运转。
2.locust是什么?
Locust是一个易于使用,可编写脚本且可扩展的性能测试工具。
您可以使用常规Python代码定义用户的行为,而不是使用笨拙的UI或特定于域的语言。
这使Locust可以无限扩展,并且对开发人员非常友好。
3.locust特征
- 用普通的Python编写用户测试方案
Locust在其自己的greenlet(轻量级进程/协程)中运行每个用户。不需要笨拙的UI或庞大的XML,只需像通常那样编码即可。基于协程而不是回调,您的代码看起来和行为都与普通(阻塞)Python代码一样。
- 分布式和可扩展-支持数十万用户
Locust使运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gevent),这使得单个进程可以处理成千上万的并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。
- 基于Web的UI
Locust具有用户友好的Web界面,可实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有UI的情况下运行,从而使其易于用于CI / CD测试。
- 可以测试任何系统
即使Locust主要与网站/服务一起使用,它也可以用于测试几乎所有系统或协议。只需为您要测试的内容编写一个客户端,或者浏览社区创建的一些客户端。
- 可控
locust很小,非常灵活,我们打算保持这种状态。如果您想将报告数据发送到您喜欢的数据库和制图系统,包装对REST API的调用以处理系统的细节或运行完全自定义的加载模式,那么没有什么可以阻止您!
二. locust优点

LoadRunner
- 商业软件,价格昂贵
- 只能在Windows平台使用
- 并发效率低,单台压力机难以产生较高的并发能力
- 功能是最全面的,用户群体多
Jmeter
- 并发机制同LoadRunner
- 脚本编写和描述方面是基于GUI操作
locust
- 开源免费
- 易用:Locust采用Pure Python脚本描述,并且HTTP请求完全基于Requests库,简单轻便
- 并发机制:摒弃了进程和线程,采用协程(gevent)的机制,所以不受进程和线程的限制,可以支持发起更高的并发数请求
- locust有一个整洁的 HTML+JS 的用户界面,实时显示相关测试细节
采用多线程模拟用户,线程数会随着并发数的增加而增加,而线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。而协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能。正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。
三. 安装locust
1.开发环境
- Windows 10
- python版本:3.7.6
2.安装命令
pip install locust
PS D:\> pip install locust
PS D:\> locust -V
locust 1.4.3
四. 编写性能测试脚本
创建 test.py 文件
from locust import HttpUser, task, TaskSet, between
class UserBehavior(TaskSet):
@task(1)
def task1(self):
self.client.get("/search/error.html")
@task(2)
def task2(self):
self.client.get("/")
class MyUser(HttpUser):
wait_time = between(0.5, 1)
host = "https://www.baidu.com"
tasks = [UserBehavior]
脚本解释:访问百度网页的两个页面,请求比例为1:2
1)UserBehavior:继承TaskSet类,TaskSet类好比蝗虫的大脑,控制着蝗虫的具体行为,即模拟实际业务场景操作
2)MyUser:继承HttpUser类, tasks = [UserBehavior]即是实例化
五. 执行脚本
终端命令行执行:locust -f test.py
- -f 指定性能测试脚本文件
通过浏览器访问locust服务:http://localhost:8089(Locust启动网络监控器,默认为端口号为: 8089)
image-20210402163920806.png
参数说明:
(1)Number of users to simulate :模拟用户数
(2)Hatch rate(users spawned/second): 每秒启动的用户数
(3)Host:被测接口的ip地址或域名(带http://)
点击 “Start swarming” 按钮,开始运行性能测试。
六. 测试数据展示
Locust在执行测试的过程中,我们可以在web界面中实时地看到结果运行情况。
相比于LoadRunner,Locust的结果展示十分简单,主要就四个指标:并发数、RPS、响应时间、异常率。但对于大多数场景来说,这几个指标已经足够了。
Top栏

1. HOST
2. STATUS:状态(两个用户正在运行)
3. RPS:单位时间内处理的请求数
4. FAILURES:失败率
5. STOP:停止运行
6. Reset Stats:重置
Statistics

参数说明
- Type: 请求的类型,即接口请求方法,例如GET/POST
- Name: 请求的路径
- request: 当前已完成的请求数量
- fails: 当前请求失败的数量
- Median: 响应时间的中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值
- 90%ile (ms):90%的响应时间,单位毫秒
- Average:平均响应时间,单位毫秒
- Min: 请求的最小服务器响应时间,单位毫秒
- Max: 请求的最大服务器响应时间,单位毫秒
- Average size (bytes) : 请求的平均大小,单位字节
- Current RPS: 当前的RPS
- Current Failures/s: 当前每秒钟请求失败率
最后一行:aggregated为汇总数据
Charts
(1) 每秒响应请求数(RPS)+ 失败率

(2)请求响应时间

(3)虚拟用户数

(4)Failures:失败的请求

(5)Exceptions:异常的请求

(6)Download Data:下载测试数据

七. 数据监测
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能

可以监控测试过程中,被测服务端的资源详情,如cpu、内存等
