为什么单机要用Locust做接口压测而不是JMeter

/ 0评 / 1

为什么单机要用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控制台:
UTOOLS1584892651062.png
上面是并发用户数,下面是拉满用户时长,填好人就开始疯狂起刷了。gevent果然名不虚传。

更加详细

最后

其实这个东西对于了解python的人来书巨爽好嘛。尤其是自由度这方面,不管是配置或者流程都可以为所欲为。当然人各有喜好,但是高并发压测,Locust暴打Jmeter,毫无疑问。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注