为什么单机要用Locust做接口压测而不是JMeter
由于上周在工作中需要对一款插件进行压测,但是鄙人设备和软件上都不是很健全,所以需要寻找一款性能优秀的压测软件,当然我可以肯定的是这软件肯定不是Java写的。这种事情绝对是Go/Python/C在单机暴打Java,所以本着这个思路,我直接去GitHub搜了下:
果然三翻两翻就翻出了今天的宝藏:Locust。
首先说点,JMeter对于Java程序员而言,功能健壮且监控完善,自带UI,依赖JDK。但是今天的场景我觉得Jmeter Hold不住。因为我用过。很早之前我有一个内存4G的华硕K550d,然后至今这台电脑依旧能回忆起那天被Jmeter支配的恐惧,当时我年幼无知,以为只是单纯的电脑8行。后来我上来神舟16G+512SSD的性能野兽本,他还是没有顶住几十个用户的并发配置。。但是人家有人家的优点:可以使用完整的内置函数和第三方插件,在一个地方创建所有内容的性能测试。 无需编码即可测试不同的协议甚至数据库。 这些包括JDBC,FTP,LDAP,SMTP等。JMeter还可以通过jar包扩展,比如加载jython,可以使用python脚本。不过今天是接口测试,抱歉,他有的这些我都用不到。况且我挺讨厌靠着ui点点点的,测试工具应该是脚本比GUI来的快的。
Locust
题目和上面都说了,今天要做的是接口压测,所以我只聚焦到接口压测本身
先附上Github:https://github.com/locustio/locust
再附上官网:https://locust.io/
总的来说文档还是很完整的,除了打开很慢,总是504之外都挺好的。
安装
Locust依赖python环境,2/3皆可,不巧的是,我已经装了。这里我们直接安装
可以通过pip install:
pip install locustio
也可以偷懒直接在pycharm 直接点点点了,但是我的电脑有点抽风(py环境复杂不太对),需要指定版本:
pip install locustio==0.13.5
但是最终安装完在解析编译的时候提示我C++14的工具箱没有...无奈之下我又安装了Visual Studio Win10 SDK....2.3G。。我他喵成本也太高了吧....
使用
安装完赶紧编一个接口试试(他的文档也太慢了,我等了十分钟才出来Quick Start):
from locust import HttpLocust, TaskSet, task, between
class UserBehavior(TaskSet):
@task
def postTest(self):
json = {
"gasId":"DF886548646",
"payDtStartStr":"2019-01-01 00:00:00",
"forwardPayFlag":1,
"payDtEndStr":"2020-03-01 00:00:00",
"rows":200,
"startIndex":0
}
header ={
"Content-Type": "application/json;charset=UTF-8"
}
self.client.post("http://ip:port/uri",json=json)
class WebsiteUser(HttpLocust):
host = "http://ip:port"
# 我们首先给task_set赋值
task_set = UserBehavior
# 设定下次调用等待时间,单位为秒
wait_time = between(5, 9)
这里测试类分为用户行为和任务顺序,我这里只有一个,也比较简单,你可以在UserBehavior中通过@task来确定用户操作顺序(比如先点按钮A,然后请求B,类似Jmeter的顺序自动化脚本),当然这里还有一些全局变量(token之类),但是我这里因为只是单接口,所以就简单写写。
启动
当然,安装完你的命令行即可支持locust,可以通过locust --help看下帮助,当然嫌麻烦可以直接去看官网文档,然后启动:
locust -f postTest.py
然后会出现:
[2020-03-21 20:52:20,815] KelovpString/INFO/locust.main: Starting web monitor at http://*:8089
[2020-03-21 20:52:20,822] KelovpString/INFO/locust.main: Starting Locust 0.13.5
这时候你可以访问:http://localhost:8089/ 可以看到他的web控制台:
上面是并发用户数,下面是拉满用户时长,填好人就开始疯狂起刷了。gevent果然名不虚传。
更加详细
最后
其实这个东西对于了解python的人来书巨爽好嘛。尤其是自由度这方面,不管是配置或者流程都可以为所欲为。当然人各有喜好,但是高并发压测,Locust暴打Jmeter,毫无疑问。