参考:locust官网
文章目录
1、简介
1、作用
- Locust是易于使用的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户。
- Locust完全基于事件,因此可以在一台计算机上支持数千个并发用户。
- 与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过gevent使用轻量级进程。
2、特性
- 用普通的Python编写用户测试方案
- 分布式和可扩展-支持数十万用户
- 基于Web的UI
- 可以测试任何系统
- Hackable(可破解可侵入)
3、对比
1、对比JMeter
- JMeter带有一个UI,虽然不错但是糟糕的是,想要通过一些点击Api来实现你的代码是比较繁琐的。
- JMeter是线程绑定的。这意味着对于每个要模拟的用户,您都需要一个单独的线程。不用说,在一台计算机上对成千上万的用户进行基准测试是不可行的。
2、对比Tsung
- Tsung没有用Erlang编写的线程问题。它可以利用BEAM自身提供的轻量级流程,并且可以愉快地扩展规模。但是在定义测试场景时,Tsung和JMeter一样有限。
- 它提供了基于XML的DSL来定义用户在测试时的行为方式。这种方式需要书写的XML量会非常大
- 完成后显示各种图形或报告要求您对测试生成的日志文件进行后处理。
2、安装
1、在windows上安装
在Windows上,运行应该可以。
pip install locustio
2、修改打开文件最大数量限制
机器上的每个HTTP连接都会打开一个新文件(技术上是文件描述符)。操作系统可能会为可以打开的最大文件数设置一个下限。如果该限制小于测试中模拟用户的数量,则会发生故障。
将操作系统的默认最大文件数限制增加到大于您要运行的模拟用户数的数量。如何执行此操作取决于所使用的操作系统。
3、快速入门
1、测试实例
推荐使用简单的通过@task来声明任务的方式
第一种是不通过注解的方式来处理的:
第二种是通过注解的方式来声明的:
2、启动Locust
1、当前目录下启动
locust
2、子目录下启动
locust -f locust_files/my_locust_file.py
3、多进程分布启动
主进程
locust -f locust_files/my_locust_file.py --master
备进程
locust -f locust_files/my_locust_file.py --slave
4、多主机分布式启动
需要指明对应host
locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100
3、Locust的Web界面
打开浏览器并将其指向http://127.0.0.1:8089
(如果在本地运行Locust)。会出现这样的提示:
4、书写locustfile
locustfile是普通的python文件。唯一的要求是它声明至少一个从Locust类继承的类
1、Locust类
一个Locust类代表一个用户。Locust将为正在模拟的每个用户生成Locust类的一个实例。Locust类通常应该定义一些属性。
1、WAIT_TIME属性
用于确定模拟用户在执行任务之间等待多长时间。Locust带有一些内置函数,这些函数返回一些常用的wait_time方法。
最常见的是between。它用于使模拟用户在每次执行任务后等待介于最小值和最大值之间的随机时间。其他内置的等待时间函数是constant和 constant_pacing。
wait_time方法应该返回秒数(或几分之一秒),并且也可以在TaskSet类上声明,在这种情况下,它将仅用于该TaskSet。
2、weight属性
如果希望使这些蝗虫之一更常执行,可以在这些类上设置一个weight属性。
class WebUserLocust(Locust):
weight = 3
...
class MobileUserLocust(Locust):
weight = 1
...
3、host属性
host属性是要加载的主机的URL前缀(即“ http://google.com ”)。通常,这是在Locust--host
启动时在蝗虫的Web UI或命令行中使用该 选项指定的。
如果在Locust类中声明了主机属性,则–host 在命令行或Web请求中未指定任何主机属性的情况下将使用该属性。
2、TaskSet类
每个Locust类必须设置一个task_set属性,该属性指向TaskSet。TaskSet是任务的集合。这些任务是普通的python可调用对象.
启动负载测试时,产生的Locust类的每个实例将开始执行其TaskSet。然后,发生的情况是每个TaskSet将选择其任务之一并调用它。然后,它将等待Locust类的wait_time方法指定的秒数(除非 已直接在TaskSet上声明了wait_time方法,在这种情况下,它将使用自己的方法)。然后它将再次选择要调用的新任务,再次等待,依此类推。
1、声明任务
为TaskSet声明任务以使用task装饰器的典型方式。
@task使用可选的weight参数,该参数可用于指定任务的执行率。
2、任务属性
任务的属性可以是一个可调用方法的列表,或者一个<调用方法:weight>的字典。
from locust import Locust, TaskSet
def my_task(l):
pass
def my_task2(l):
pass
class MyTaskSet(TaskSet):
tasks = [my_task,my_task2]
#也可以设置权重如:tasks = {my_task:1,my_task:2}
class MyLocust(Locust):
task_set = MyTaskSet
如果将task属性指定为列表,则每次执行任务时,都会从task属性中随机选择它。但是,如果任务是字典,则将可调用对象作为键,将整数作为值,则将随机选择要执行的任务,但将整数作为比率。
5、运行
类似quick start说的,具体参数可查看官网文档,在目录上方链接中。