Locust压测框架入门


首先客套的来介绍一些Locust是啥:

 

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

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

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

 

关于Locust:

1、locust作为一款性能测试工具,没有单独的ui界面,可以说是python下的一些库的集成

locust完全基于python作为编程语言,采用pure python描述测试脚本,其中的http请求也是完全基于Requests库,除了HTTP/HTTPS协议,locust也可以测其他协议的系统,只需要采用python调用对应的库进行请求描述即可,可以说python对应的库还是非常齐全的。

2、与jmeter相比较而言,locust更加的轻量化,采用的是不同于jmeter中进程和线程的处理机制(协程【微线程】),有效避免了系统的资源调度,由此可以大幅度的提高单击系统的并发能力

3、Github地址:

注:如果想查看python下依赖了哪些库的话,可以进入github,点击setup.py进入查看

上述标红的地方就是依赖的第三方库及支持版本(详细的介绍见下方),安装这些库的时候也应遵循其显示的版本号,如果与当前支持的版本号不一致或者小于当前版本号的时候就会安装失败。

4、locust组成模块(所依赖的库)【gevent】是python下实现协程的一个第三方库,能够使系统获取极高的并发性能(locust基础模块)

 

简而言之,它的特点就是协程,web管理工具,超级好用。

 

第一步,安装

依然是老伙伴pip工具(完美安装依赖)

pip install Locust

Locust有六个依赖的python模块

1.gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;

2.flask:Python的一个web开发框架,和django相当;

3.requests:支持http/https访问的库;

4.msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;

5.six:提供了一些简单的工具封装Python2和Python3 之间的差异;

6.pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)

安装结束了之后我们就开启Locust之旅了。

 

第二步,使用

如何快速的创建一个Locust Demo。

import time
from locust import HttpUser, task, between, events
import urllib3
from locust.contrib.fasthttp import FastHttpLocust
urllib3.disable_warnings()


@events.test_start.add_listener
def on_test_start(**kwargs):
print('===测试最开始提示===')


@events.test_stop.add_listener
def on_test_stop(**kwargs):
print('===测试结束了提示===')


class TestTask(HttpUser):
wait_time = between(1, 5)
# host = 'https://www.baidu.com'

def on_start(self):
print('这是SETUP,每次实例化User前都会执行!')

@task(1)
def getBaidu(self):
self.client.get(url="/", verify=False)

def on_stop(self):
print('这是TEARDOWN,每次销毁User实例时都会执行!')

# class MyLocust(FastHttpLocust):
# task_set = TestTask
# min_wait = 1000
# max_wait = 60000
if __name__ == "__main__":
import os

os.system("locust -f locust1.py --host=https://www.baidu.com")



 

脚本说明

新建一个类MyBlogs(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息;

self.client调用get和post方法,和requests一样;

@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;

WebsiteUser()类用于设置生成负载的基本属性:

属性 说明
task_set  指向定义了用户行为的类
min_wait  模拟负载的任务之间执行时的最小等待时间,单位为毫秒
max_wait  模拟负载的任务之间执行时的最大等待时间,单位为毫秒

PS:默认情况下,时间是在min_wait和max_wait之间随机选择,但是可以通过将wait_function设置为任意函数来使用任何用户定义的时间分布。

 

四、启动Locust

1、如果启动的locust文件名为locustfile.py并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过cmd,执行如下命令:

 locust --host=https://www.cnblogs.com 

2、如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:

 locust -f testscript/locusttest.py --host=https://www.cnblogs.com 

3、如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :

 locust -f testscript/locusttest.py --master --host=https://www.cnblogs.com 

4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:

 locust -f testscript/locusttest.py --salve --host=https://www.cnblogs.com 

5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1):

 locust -f testscript/locusttest.py --slave --master-host=192.168.0.100 --host=https://cnblogs.com 

6、启动locust文件成功后,编译器控制台会显示如下信息:

 [2018-10-09 01:01:44,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089

[2018-10-09 01:01:44,729] IMYalost/INFO/locust.main: Starting Locust 0.8 

PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;

之后就可以打开locust了

在浏览器中输入地址:

http://localhost:8089/

你会看到这样的页面

 

 

 

 

 

 

我们看图介绍一下数据:

Type                    访问类型
Name                   任务名(python中定义的方法名)
Requests                请求的总次数
Fails                   失败的次数
Median (ms)             中间数耗时
Average (ms)            平均耗时
Min (ms)                最低耗时
Max (ms)                最大耗时
Average size (bytes)    平均耗时
Current RPS             每秒钟处理的访问的次数

 

 

这就是locust最基本的使用方法和用途了!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM