今天介绍一个 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