在Rainbond上使用Locust进行压力测试

简介: Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。并且有一个用户友好的 Web 界面,可以实时显示测试进度。甚至可以在测试运行时更改负载。它也可以在没有 UI 的情况下运行,使其易于用于 CI/CD 测试。

Locust简介

Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。并且有一个用户友好的 Web 界面,可以实时显示测试进度。甚至可以在测试运行时更改负载。它也可以在没有 UI 的情况下运行,使其易于用于 CI/CD 测试。


Locust 使运行分布在多台机器上的负载测试变得容易。Locust 基于事件(gevent),因此可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过gevent使用轻量级进程。并发访问站点的每个Locust(蝗虫)实际上都在其自己的进程中运行(Greenlet)。这使用户可以在Python中编写非常有表现力的场景,而不必使用回调或其他机制。

快速部署Locust

Locust 应用已发布到 开源应用商店,搜索 locust 安装最新2.5.1版本即可。

install-locust.png

安装完成后,您将会得到一个Locust主从集群,其中,master组件负责提供UI界面,和并发任务的调度;slave组件负责执行并发任务,slave组件同时支持横向伸缩,当产生的测试并发达到一定的限额时,只需扩展 slave 组件实例即可,例如:

tp.png

如何使用

Locust_Master 提供了一个基于WEB-UI的图形化管理界面,首次登陆,会提示输入一些信息:

默认用户密码:locust locust,可配置 Locust_Master 组件的环境变量 LOCUST_WEB_AUTH进行修改。

locust-index.png

Number of users 填写模拟的并发用户数量,经过测试,单个slave实例可以轻松提供上千个用户并发的压力。

Spawn rate 填写蝗虫的孵化率,即每秒产生多少用户。

Host 填写想要压测的站点地址。

当Host以及用户,并发量定义完毕以后,还需要去定义一下测试用例,即用户访问Host之后的行为,Locust是通过一个名为/locustfile.py 的Python脚本来定义用户行为,在Rainbond平台的 Locust_Master 组件内 环境配置 -> 配置文件设置 进行编辑修改。

locustfile.png

代码示例如下:

from locust import HttpUser, task, between

classMyUser(HttpUser):
   wait_time = between(5, 15)

   @task(2)
   defindex(self):
       self.client.get("/")

   @task(1)
   defabout(self):
       self.client.get("/docs/")

这个脚本将按照顺序模仿以下行为:

  1. 请求Host的 / 路径两次
  2. 请求Host的 /docs/ 路径一次
  3. 每次执行任务之间,间隔5-15秒

之所以要这么设计的原因,是Locust的设计者们认为,真正的用户行为,不会像脚本一样接连不断的执行完所有的请求然后退出。更多的情况是,用户做完一件事后,会停顿一会,比如读读说明,思考下一步要干嘛。所以会在每个步骤之间留下一个随机时长的空白期。这种假设实际上更符合用户实际行为。

这个文件,将会以配置文件的方式挂载到 locust_master 组件上,并且共享挂载给所有的locust_slave组件。这意味着,如果你想要更改这个文件的内容,只需要去编辑 locust_master 组件中,环境配置下所挂载的配置文件即可。然后更新整个 Locust 集群即可生效。

结果分析

借助Locust提供的WEB-UI界面,我们可以非常方便的分析压力测试结果。

locust-result.png

Statistics页面,将向我们展示所有被压测接口的汇总报告。结果包括:

Type 请求类型;

Name 请求路径;

Requests 请求总数;

Fails 失败次数;

Median 中位数响应时间;

90%ile 90%请求响应时间;

Average 平均响应时间;

Min 最小响应时间;

Max 最大响应时间;

Average size 请求的平均大小;

Current PRS 当前吞吐率;

Current Failures 当前错误率;

locust-charts.png

Charts页面将主要结果绘制成为随时间变化的图表,能够在趋势上给予用户指引。

除了这些之外,还有几项值得关注的值会在最上面一排全局展示,包括当前请求的主机域名、当前产生的并发用户数量、slave节点数量、当前所有请求接口的总吞吐率、错误率。以及停止测试的按钮。

其它的几个页面会提供:

Failures 请求失败的接口及失败原因;

Expections 测试中意外的错误以及错误原因

Download Data csv格式的测试数据下载地址

Workers 所有slave实例的信息

更多教程请参考Locust官方文档

关于Rainbond

Rainbond 是一个开源的云原生应用管理平台,使用简单,不需要懂容器和Kubernetes,支持管理多个Kubernetes集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。

🌟 Github:https://github.com/goodrain/rainbond

😊 官网:https://www.rainbond.com?channel=aliyun

😉 微信群:请搜索微信公众号 Rainbond 关注并添加群助手入技术交流群

🤔 钉钉群:请搜索钉钉群号 31096419

相关文章
|
8月前
|
消息中间件 Java 测试技术
深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust
深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust
177 1
|
JSON 网络协议 Java
图文详解压力测试工具JMeter的安装与使用
压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性能优化,也可以帮助我们预估系统的承载能力,使我们能根据其做出一些应对措施。
912 0
图文详解压力测试工具JMeter的安装与使用
|
9月前
|
开发框架 JSON 资源调度
Locust压测框架入门
Locust压测框架入门
99 0
|
测试技术 C++
5分钟内快速搞定Jmeter集群压测环境~
5分钟内快速搞定Jmeter集群压测环境~
|
安全 测试技术 Apache
JMeter软件压力测试,软件压力测试工具和流程有哪些
JMeter软件压力测试,软件压力测试工具和流程有哪些
227 0
JMeter软件压力测试,软件压力测试工具和流程有哪些
|
测试技术
深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试
深聊性能测试,从入门到放弃之:Locust性能自动化(四)自定义客户端测试
221 0
|
数据采集 Web App开发 JSON
深聊性能测试,从入门到放弃之:Locust性能自动化(三)如何提高Locust性能
深聊性能测试,从入门到放弃之:Locust性能自动化(三)如何提高Locust性能
305 0
|
测试技术 Python
【性能测试系列】Locust - 一款开源的负载测试工具
最近做系统性能调优,发现了一款比较好用的性能测试工具Locust;在此推荐给各位同学。
188 0
【性能测试系列】Locust - 一款开源的负载测试工具
|
测试技术 编译器 Python
性能专题:Locust工具实战之创建性能测试
性能专题:Locust工具实战之创建性能测试
182 0
性能专题:Locust工具实战之创建性能测试