什么是Locust

什么是Locust

Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。

在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。

Locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的。相反,它通过gevent使用轻量级的进程。每一个locust测试你的网站时,实际上是真实的在内部运行它自己的进程(或greenlet,准确的说)。这样就允许你不使用复杂的回调方法,而是使用Python编写复杂的场景。

分布式测试

分布式运行Locust

一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。

为了实现这个,你应该在master模式中使用--master标记来启用一个Locust实例。这个实例将会运行你启动测试的Locust交互网站并查看实时统计数据。master节点的机器自身不会模拟任何用户。相反,你必须使用--slave标记启动一台到多台Locustslave机器节点,与标记--master-host一起使用(指出master机器的IP/hostname)。

常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。

** !Note **

** master和每一台slave机器,在运行分布式测试时都必须要有locust的测试文件。**

编写一个Locust文件

Locust文件就是一般的Python文件。唯一的需求就是它至少需要一个继承于Locust的类.

Locust类

Locust类代表一个用户(如果愿意,也可以是一个准备出动的蝗虫)。Locust会为每一个模拟用户生成一个locust类实例。同时会有一些locust类属性被定义。

task_set属性

task_set属性是指向一个定义用户行为的TaskSet类,下面会有详细的介绍。

min_waitmax_wait属性

除了task_set属性,另外一个经常被使用的就是min_waitmax_wait属性。是用于各自以毫秒为单位的最小值和最大值,一个模拟用户将会在每个任务执行时的等待执行的时间间隔。min_waitmax_wait默认设置为1000,如果不声明的话,Locust会默认在每个任务间等待1秒

参考下面的代码,每个用户将会在每个任务间等待5至15秒:

1
2
3
4
5
6
7
8
9
10
11
from locust import Locust, TaskSet, task_set

class MyTaskSet(TaskSet):
@task
def my_task(self):
print "executing my_task"

class MyLocust(Locust):
task_set = MyTaskSet
min_wait = 5000
max_wait = 15000

min_waitmax_wait属性可以用于重写TaskSet类。

Locust快速入门

1
Locust,基于Python的性能测试工具。

示例locustfile.py

下面是一个简单的locustfile.py小示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from locust import HttpLocust, TaskSet

def login(l):
l.client.post("/login", {"username":"ellen_key", "password":"education"})

def index(l):
l.client.get("/")

def profile(l):
l.client.get("/profile")

class UserBehavior(TaskSet):
tasks = {index: 2, profile: 1}

def on_start(self):
login(self)

class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×