`
angelguo
  • 浏览: 118188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

locust 一个分布式负载测试工具

 
阅读更多

Locust简介

Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。

Locust特性

  • 使用Python编写模拟用户行为的代码,无需繁琐的配置
  • 分布式可扩展,能够支持上百万用户
  • 自带Web界面
  • 不仅能测试web系统,也可以测试其它系统

Locust思想

在测试过程中,一群用户将访问你的网站。每个用户的行为由你编写的Python代码定义,同时可以从Web界面中实时观察到用户的行为。

Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。每个用户实际上运行在自己的greenlet中。

Locust安装

Locust可以通过pip或者easy_install安装:

pip install locustio
或者
easy_install locustio

安装完Locust后,shell命令locust就可以使用了,可以查看locust命令有哪些选项:

locust --help

如果打算以分布式模式运行Locust,建议同时安装pyzmq:

pip install pyzmq
或者
easy_install pyzmq

Locust初步使用

locustfile.py例子

下面是一个简单的locustfile.py文件。

from locust import HttpLocust, TaskSet

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

defindex(l):
    l.client.get("/")

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

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

    defon_start(self):
        login(self)

classWebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=5000
    max_wait=9000

在上面的代码中,定义了一些locust任务,这些任务是用Python函数定义的。这些函数传入一个参数,也就是Locust类的实例。这些任务然后被聚集在TaskSet类的tasks属性中,用来表示一个用户访问网站的行为。接着,HttpLocust类表示一个用户,这个用户具有哪些行为,以及该用户在执行下一个任务之前应该等待多长时间。

HttpLocust类继承于Locust类,它增加了一个client属性,这个client实际上是HttpSession实例,可以用来发起HTTP请求。

上面的代码示例了一种定义任务的方式,下面是一种更方便的方式,该方式使用了task装饰器。

from locust import HttpLocust, TaskSet, task

classUserBehavior(TaskSet):
    defon_start(self):
        """ on_start is called when a Locust start before any task is scheduled """
        self.login()

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

    @task(2)
    defindex(self):
        self.client.get("/")

    @task(1)
    defprofile(self):
        self.client.get("/profile")

classWebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=5000
    max_wait=9000

启动Locust

在shell中执行locust命令即可启动Locust。如果locustfile.py文件在当前目录,那么直接执行locust命令即可。如果locustfile.py文件在别的地方,可以执行

locust -f /path/to/locustfile.py

至于如何在分布式模式下运行Locust,请参考Running Locust distributed

打开Web界面

在shell中执行locust命令,如果没有问题的话,命令输出会提示可以在浏览器中打开Locust的Web界面,访问地址默认是http://127.0.0.1:8089。在浏览器中打开该地址,就可以看到像下面这样的Web界面:Locust的Web界面

这里记录下学习道路, 防止忘了

操作系统是centos:

首先是linux系统, 装有Python 和 Python-devel (否则安装软件会提示python.h找不到, gcc error等问题...... )

1 yum install -y python
2yuminstall -y python-devel

然后安装pip

  下载 get-pip.py 文件到linux

  运行Python 命令执行该文件: 

python get-pip.py

安装 greenlet (协程/微线程)

pip install greenlet

安装 gevent (网络io用)

pip install gevent

安装locustio: 

pip install locustio

进行压测

locust --host=http://127.0.0.1 --port=8089 -f ./test.py

locustio有自己的web页面, 上边的命令意思是: 在浏览器里打开 http://127.0.0.1:8089 显示locustio的web控制页面, 需要被压测的网站域名和URL放在test.py里

====================

下边列出缺少python-devel(Ubuntu: python-dev)包时的错误信息, 可以通过百度搜索, 让出错的同学搜索到本篇文章解决类似的问题

Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-6zEhZN/greenlet/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-dEs44u-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-6zEhZN/greenlet

============

概念理解(翻译):

1. 超级类是 locust 类,它的每一个实例代表了一个用户, 守护程序会为每一个模拟用户生成一个实例

2. httplocust 继承了locust 类, 添加了可以发送http请求的功能

3. locust 有一个属性(成员变量)是 task_set , 它可以定义用户的行为, 就是访问哪些URL, post还是get, 每个连接占总访问量比是多少

这个task_set 是类TaskSet(或其子类)的一个实例, 上边说的各种行为就是在这个类里边定义的

4. locsut类:

属性: min_wait/max_wait  模拟用户有在上边说的类中定义了好多任务/行为, 每个任务/行为间隔多久执行一次, 单位是毫秒, 默认1000, 也即隔一秒种后执行下一个任务

属性: weight 权重: 模拟时, 同一段时间, 手机用户的访问量要比PC的访问量大, 那么对应的locust(或其子类)的weight值就大小不一

属性: host 就是需要被压测的网站的域名(或域名前缀), 如果启动服务时没有通过参数-host来指定域名, 那么就用使用该host属性指定的值

TaskSet类:

1. 推荐的是, 在taskset类(或子类)中通过在行为(回调函数)前加@task(weight)描述符来指定某一个行为被执行的频率

2. 或者先定义行为(回调函数), 然后通过属性tasks来指定每一个行为被执行的频率 tasks=[fun1, fun2....] 或者 tasks={fun1:weight1, fun2:weight2......}

3. 不管怎样定义, 里边的行为或函数是被随机调用/执行的, 只是根据weight的不通, 随机到的频率不通而已

4. 而且, 行为/任务可以嵌套执行, 先执行task1(也就是 fun1 下同), 然后执行task2 ..... 这样会更真实的模拟,

其写法就是, 将这些有关联任务定义/封装到一个taskset子类中, 然后通过上边介绍的 tasks属性tasks={classname:weight}, 在另一个TaskSet子类中去关联该类以达到嵌套的目的

5. 在执行子任务时, 通过 self.interrupt() 来终止子任务的执行, 来回到父任务类中执行, 否则子任务会一直执行

6. 成员函数, on_start(), 如果定义的话, 就会在开始的时候执行

HttpLocust类

1. 他可以发送http请求, 他有一个属性叫client(实例化的时候自动生成), 存储HttpSession类的实例(HttpSession类在实例化Locust的时候自动创建), 用来保存请求session

2. TaskSet类里也有属性client: self.client.get()或者self.client.post(), 这个client内部就是httplocust里的client

3. 请求返回一个对象, 他有两个成员, response.status_code 和 response.content

4. 如果因连接失败, 超时等等原因造成请求失败, 不会发出异常, 而是将上边的content置为空, status_code 置为0

5. 可以对返回content内容自定义处理, 因为有的时候返回404是你希望得到的

1 with client.get("/does_not_exist/", catch_response=True) as response:
2     if response.status_code == 404:
3         response.success()

6.对网站来说, 一个URL的参数是固定的, 但是参数值是不定的, 也可以处理

1 # Statistics for these requests will be grouped under: /blog/?id=[id]
2 for i in range(10):
3     client.get("/blog?id=%i" % i, name="/blog?id=[id]")
分享到:
评论

相关推荐

    Locust负载测试工具 v2.15.1

    Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发...

    Locust负载测试工具 v2.24.1.zip

    综上所述,Locust v2.24.1 是一个强大的负载测试工具,通过Python脚本编写测试逻辑,可以方便地进行分布式性能测试,帮助开发者评估和优化系统的承载能力。对于软件测试人员来说,熟练掌握Locust的使用是提升工作...

    Locust负载测试工具 v2.23.1.zip

    Locust 是一个开源的负载测试工具,专门用于模拟大量用户并发对系统进行压力测试,以评估系统的性能和稳定性。在版本 v2.23.1 中,它提供了丰富的功能和改进,使得它成为开发者和运维人员进行性能测试的理想选择。 ...

    Python-locust用Python编写的可伸缩的用户负载测试工具

    Locust 是一个由 Python 编写的开源负载测试工具,专为分布式用户负载测试而设计,能够模拟大量用户对应用程序进行并发访问,以评估系统的承载能力和响应时间。其核心设计理念是易用性、可扩展性和实时监控,使得...

    Locust负载测试工具 v1.4.1

    为您提供Locust负载测试工具下载,Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行...

    Locust负载测试工具 v1.2.3

    为您提供Locust负载测试工具下载,Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行...

    Locust负载测试工具 v1.3.1

    为您提供Locust负载测试工具下载,Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行...

    locust, 在 python 中,可以扩展的用户负载测试工具编写.zip

    locust, 在 python 中,可以扩展的用户负载测试工具编写 链接网站:locust.io文档:docs.locust.io支持/问题:松弛注册...描述Locust是一个 easy-to-use,分布式,用户负载测试工具。 它用于负载测试网站( 或者其他系统

    Locust负载测试工具-其他

    Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。 Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发...

    PyPI 官网下载 | locust-swarm-0.0.41.tar.gz

    《PyPI官网下载 | locust-swarm-0.0.41.tar.gz——探索Python分布式负载测试工具Locust Swarm》 在IT行业中,性能测试是评估应用程序或系统稳定性、响应速度以及可扩展性的重要环节。当涉及到大规模并发用户场景时...

    PyPI 官网下载 | locust-2.5.2.dev16.tar.gz

    《PyPI官网下载 | locust-2.5.2.dev16.tar.gz——分布式负载测试工具解析》 PyPI(Python Package Index)是Python开发者获取和分享软件包的主要平台,这里我们关注的是其中的一个名为“locust”的软件包,其版本为...

    PyPI 官网下载 | locust-nest-0.23.tar.gz

    总之,“locust-nest-0.23.tar.gz”是一个针对云原生环境的分布式负载测试工具,它结合了Locust的灵活性和ZooKeeper的协调能力,帮助开发者在大规模、分布式场景下进行性能验证,确保应用在高并发情况下依然能够保持...

    Linux版WEB网站压力测试工具locust使用教程

    Linux版的Web网站压力测试工具Locust是一款轻量级且高度可扩展的负载测试工具,专为模拟大量并发用户而设计。与传统的压力测试工具如LoadRunner和JMeter不同,Locust提供了一种事件驱动的模型,使得它更加灵活且易于...

    WEB网站压力测试工具Locust使用教程.zip

    Locust 是一个开源的负载测试工具,专门设计用于对 Web 应用进行大规模的压力测试。它的特点是基于事件驱动,能够并行模拟大量用户,且易于扩展。本教程将详细介绍 Locust 的基本用法和功能,帮助你理解如何利用它来...

    locust api 文档

    Locust是一个易于使用的分布式用户负载测试工具,它用Python编写,主要用于网站或其他系统的负载测试,以便找出系统能够处理的并发用户数。Locust的主要特点在于它的工作模式,即许多“locusts”(测试者)会像蝗虫...

    PyPI 官网下载 | locust-2.4.2.dev9.tar.gz

    《PyPI官网下载 | Locust-2.4.2.dev9.tar.gz——分布式负载测试工具深入解析》 Locust是一款开源、Python编写的轻量级负载测试工具,它专为性能测试而设计,尤其适用于模拟大规模用户并发行为,对Web应用进行压力...

    locust-1.1.1.tar定制版.gz

    ocust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。 Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发...

    locust.pdf

    Locust 是一个基于 Python 的分布式性能测试工具,通过模拟用户行为来测试系统的性能和负载能力。 Locust 允许用户使用 Python 语言编写测试场景,支持分布式和可扩展,能够模拟数十万用户,提供基于 Web 的用户界面...

    用Python编写的可扩展用户负载测试工具-Python开发

    docs.locust.io)代码/问题:Github支持/问题:StackOverflow聊天/讨论:松弛注册描述蝗虫是易于使用的-使用,分布式的用户负载测试工具,旨在对网站(或其他系统)进行负载测试,并弄清系统可以处理多少个并发用户...

Global site tag (gtag.js) - Google Analytics