一 Locust的介绍

现在不管是互联网行业还是传统行业,对性能的要求,都日渐增多,为了能更快更准确的定位问题,发现问题,以及解决问题,市面上出现了越来越多的性能测试工具,例如Jmeter,LoadRunner,Locus,而今天,我们主要介绍就是Locust,locust官网如下:https://www.locust.io

简介:

先从 `Locust`的名字说起。`Locust`的原意是蝗虫,原作者之所以选择这个名字,估计也是听过这么一句俗语,“蝗虫过境,寸草不生”。我在网上找了张图片,大家可以感受下

![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/15480/1679988457057/c3cf320cd1c94b2289d18c02f1c973c2.png)

而 `Locust`工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,以此检测系统在高并发压力下是否能正常运转。

服务端性能测试工具最核心的部分是压力发生器,而压力发生器的核心要点有两个,**一是真实模拟用户操作**,**二是模拟有效并发**。

二 Locust是什么?

Locust是一个易于使用、可编写脚本且可扩展的性能测试工具。

您可以使用常规Python代码定义用户的行为,而不是使用笨拙的UI或DSL。

这使Locust可以无限扩展,并且对开发人员非常友好。

要开始使用 Locust,请转到[安装](# 安装)。

https://docs.locust.io/en/stable/index.html

三**Locust 特性**

* 使用纯Python代码编写用户测试场景 * 分布式&可伸缩——支持数十万用户

Locust使得运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gevent),这使得单个进程可以处理数千并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。

* 基于Web的UI

Locust具有用户友好的Web界面,可实时显示测试进度。 您甚至可以在测试运行时更改负载。 Locust也可以在没有UI的情况下运行,从而使其易于用于CI / CD测试。

* 可以测试任何系统

尽管Locust是面向 站点/服务 的,但也可以用于测试几乎所有系统或协议。只需为您要测试的系统编写一个客户端,或者浏览社区创建的针对特定需求的客户端即可。

* 可拓展

Locust 非常小,非常灵活,我们打算使其一直保持这种特点。如果你想将报告数据发送到你喜欢的数据库&图形系统,请包装对REST API的调用以便处理系统的细节,或运行一个完全自定义的加载模式,那么你就可以无往不利。

## 1.2 Locust的主要核心库

1)gevent gevent是一种基于协程的python网络库,它用到了Greenlet提供的封装了libevent事件循环的高层同步api

2)flask python编写的轻量级Web应用框架

3)requests python http库

4)msgpack-python MessagePack是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据格式。msgpack-python主要提供MessagePack数据序列化及反序列化的方法。

5)pyzmq pyzmq是zeromq(一种通信队列)的Python实现,主要用来实现Locust的分布式模式运行  

四  Loust的运行原理

* 第一步首先,执行WebsiteTasks中的on_start()方法(只执行一次),进行初始化的操作 * 第二步从WebsiteTasks中随机挑选一个任务进行执行,如果是定义了任务的权重,那么会按照定义的权重进行执行 * 第三,根据losust类中的 min_wait和max_wait定义的间隔,如果TaskSet类中也定义了min_wait或者max_wait,\以TaskSet中的优先,在时间范围中随机取下一个值进行休眼等待 * 最后的话是重复第二步和第三步直到我们的测试任务结束

五  Locust和与其它常见的性能测试工具的区别

![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/15480/1679988457057/650b4522ef5c4bc1b5a54a5313276c5f.png)

不同细节表现如下:

* 脚本

  locust使用写脚本的方式,方便对于python有一定基础的人,可以随着自己的想法进行脚本的编写

  jmeter通过可视化工具,填写后保存。上手难度低,适合所有人员。 * 运行

  locust有两种启动,一种通过web模式控制,还有一种通过命令行控制

  jmeter有两种启动,一种通过可视化工具控制,还有一种也是通过命令行控制 * 调试

  locust脚本编写时,几乎无调试方式,只能靠运行查看,不方便

  jmeter脚本编写时,使用查看结果树就能查看到具体的结果 * 分布式

  locust无论是否使用web,分布式执行指令即可,可以按照分布机的情况,控制分布worker的数量。

  jmeter分布式命令行模式控制稍繁琐,可视化界面需要配置文件中指定机器,而且https互通时,还需要互相传递秘钥。

  综上,jmeter可以指定运行的机器,但是需要配置。locust被动接受运行机器,但是当一个机器断开后,不会重新分配。分布方法都还可以,挺简单。 * 报告

  locust真的是简陋,只有tps、响应时间、并发数的图,还有错误信息,但是80%的信息都包含了,只能满足可用。

  jmeter可以生产html的报告,乍一看很强大,很详细,但是可用的数据不多,io使用情况以及少量图表可以借鉴。

  综上,报告都一般,主要的信息都提供了,其余的需要自己汇总和参考。 * 运行时

  如果 想监控我们的服务器资源 ,Locust和我们的jmeter都需要进行第三方软件的支持。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。