性能好不好,压测少不了。Python 压测工具 Locust 简介[视频]

227 阅读1分钟
原文链接: zhuanlan.zhihu.com

今天介绍一个 Python 接口压测工具 locust。 平常如果是访问量比较大的接口,我们一般会在上线前预估一下 qps 然后执行压力测试,防止接口访问量太大上线就跪了。

Locust 是基于 gevent 编写的一个压力测试工具,支持 web 界面。可以模拟多个用户同时对接口进行访问,并且在 locust python 脚本里我们可以实现自定义 header,修改请求参数,模拟登录等,功能要比 ab 等命令行测试工具要丰富。

视频里我会简单介绍下 locust 的安装和使用,并且用 tornado 启动一个简单的本地服务器来进行测试。

python locust 压测工具


下边是视频中用到的文件:

# server.py
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