Locust Web测压工具

- 简介

- 官网介绍:
Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。 这个想法是,在测试期间,一群蝗虫 会攻击你的网站。您定义了每个蝗虫(或测试用户,如果您愿意)的行为,并且实时地从Web UI监视群集过程。
这将有助于您在让真正的用户进入之前对您的代码进行测试和识别瓶颈。 Locust完全基于事件,因此可以在一台机器上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过gevent使用轻量级过程。
每个蝗虫蜂拥到你的网站实际上是在自己的进程内运行(或者是greenlet,这是正确的)。这允许您在Py​​thon中编写非常富有表现力的场景,而不会使代码复杂化。

 

  - 基于 flask 与 gevent 开发的一款带web界面的测试工具,支持分布式,功能很强大。

  - 官方文档

 

- 安装

pip install locustio

 

  - 安装成功后使用命令  locust --help  查看是否安装成功

    - ps: 若mac出现报错: -bash: locust: command not found 就切换目录到pip的管理包下运行命令 locust

  

- 使用

  - 使用 locust 测试 利用tornado起的demo服务:

  - server

import random

import tornado.ioloop
import tornado.web
from tornado import gen
from tornado.web import RequestHandler


class AsyncSleepHandler(RequestHandler):
    @gen.coroutine
    def get(self):
        yield gen.sleep(random.random() / 10.0)
        self.write('sleep')


class Async2SleepHandler(RequestHandler):
    @gen.coroutine
    def get(self):
        yield gen.sleep(random.random() / 10.0 * 2)
        self.write('sleep')


if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/sleep", AsyncSleepHandler),
        (r"/sleep2", Async2SleepHandler),
    ], debug=1)
    application.listen(8888)
    try:
        tornado.ioloop.IOLoop.current().start()
    except KeyboardInterrupt:
        tornado.ioloop.IOLoop.current().stop()

 

  - 简单的locustfile.py

from locust import HttpLocust, TaskSet, task


class UserBehavior(TaskSet):
    @task
    def sleep(self):
        self.client.get("/sleep")

    @task
    def sleep2(self):
        self.client.get("/sleep2")


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 0  # ms
    max_wait = 1


# locust --host=http://localhost:8888

 

  - 启动命令:

    - 当 Locust 文件的名字为  locustfile.py 且命令行在当前工作目录下:

locust --host=http://localhost:8888 --port=8989

--host 指定监听的API服务

--port 指定Locust跑的端口

 

    - 当Locust文件位于子目录下和/或名称不同于locustfile.py,请使用-f以下命令指定

locust -f locust_files/my_locust_file.py --host=http://example.com

 

    - 一台机器分布在多个进程中的Locust

# 主进程下的命令:
locust -f locust_files/my_locust_file.py --master --host=http://example.com

# 子进程下的命令:(子进程可启动任意数量)
locust -f locust_files/my_locust_file.py --slave --host=http://example.com

 

    - 多台服务器的分布式

# 主机下:
locust --host=http://localhost:8888

# 从机下需要指定主机的host
locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100 --host=http://example.com

 

- 参数介绍:

  ...

posted @ 2019-03-01 16:12  浮生凉年  阅读(889)  评论(0编辑  收藏  举报