hello 大家好我是Monday,今天在上一篇文章fastapi 数据库操作之数据库操作 | 菜鸟童靴 (boyyongxin.github.io)的基础上,给大家带来一篇利用locust对接口进行性能测试的文章。
首先介绍一下今天主角locust
一、locust介绍
官方网站:locust · PyPI
Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。
在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。
Locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的。相反,它通过gevent使用轻量级的进程。每一个locust测试你的网站时,实际上是真实的在内部运行它自己的进程(或greenlet,准确的说)。这样就允许你不使用复杂的回调方法,而是使用Python编写复杂的场景。
正如官网【https://docs.locust.io/en/latest/writing-a-locustfile.html】所说,[Locust](http://locust.io/)是一个 open source load testing tool,Define user behaviour with Python code,哈,一看是 Python 就对它有天然的好感。
Locust 的使用很简单也很方便,它提供了一个 python lib、一个命令行工具和一个 web UI,用户通过自己写 code 来定义测试用例,通过运行 locust cli 来执行测试,通过 web 界面查看测试结果。
对于程序员(特别是 Python 程序员)来讲,Locust另外一个优势就是,你不用去学不同工具为了定义测试用例而设计的不同的 DSL,直接写 code,通俗易懂。
以上介绍文字来源于官网和网络博客
二、loucst的安装和使用
1 | pip install locustio |
三、编写测试接口代码
1 | from locust import HttpUser, task, between |
on_start:开始前执行;
on_stop:结束后执行。
这两个方法可以帮助我们在进行性能测试时,把一些前置操作和后置处理进行规范化管理。
例如在on_start获取登录的token,在on_stop清理运行产生的冗余数据。
具体用例:
(59条消息) locust2.0+教程:005 - onstart和on_stop三爷带你飞的博客-CSDN博客
四,命令行执行
1 | locust -f ceshi_server.py --host=http://localhost:8000 |
五、开启web界面:
locust的web界面
locust的web界面分析:
第一行Number of users to simulate是模拟用户的数量(虚拟用户数)
第二行Hatch rate (users spawned/second)表示产生模拟用户的速度
填写完成后点击“Start swarming”即可开始测试
懒惰的我直接,网页翻一下:
性能测试参数
1 | Type: 请求的类型,例如GET/POST。 |
其他功能导航栏显而易见
六,命令行执行(取消web显示界面)
命令行执行
1 | locust -f ceshi_server.py --host=http://localhost:8000 --no-web -c 20 -r 20 -t 100s --csv=example --loglevel=INFO --logfile=test.log |
启动参数:
1 | --csv:保存运行结果 |
Locust也可以做分布式执行,需要装一个pyzmq(未做测试,记录下来留作以后备用)。
性能测试首先而在于分析性能测试的需求,设计性能测试场景,尽可能的模拟真实环境中的压力(正常和异常情况)。然后结果是考察并发用户数、响应时间、tps这类指标。
项目完整代码:
BoyYongXin/wx_pub_article_code: 博客发文使用的代码 (github.com)
参考文献:
基于web界面的locust性能测试 - 云+社区 - 腾讯云 (tencent.com)
如何利用Python对服务器的接口进行压力测试 (qq.com)
结束语:
今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童靴“