前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >locust压测工具使用

locust压测工具使用

作者头像
测试加
发布2023-02-17 17:00:03
2.5K0
发布2023-02-17 17:00:03
举报

介绍

Locust是一款开源的性能测试工具,可以帮助您模拟大量用户访问Web服务器,跟踪和报告每个用户的响应时间。它使用Python编程语言编写,允许使用Python脚本编写测试脚本。Locust可以轻松扩展,以支持任何自定义断言,响应转换,模拟,分布式执行或第三方服务整合等。

Locust可以帮助您模拟用户负载,测试Web站点和服务的性能和可靠性。它可以帮助您发现在高负载下出现的延迟问题,并对其进行解决。Locust也可以帮助您找出低性能或不可靠的Web站点或应用程序,并为您提供一种可以使用的模拟负载环境来进行压力测试的方法。

Locust拥有一个强大的Python API,可以让您编写自定义的模拟用户行为,而不需要具有任何管理测试的知识。它的用户界面友好,可以帮助您快速实施重复性的压力测试并获得有用的报告。

官网地址: https://locust.io/

介绍使用: https://docs.locust.io/en/stable/

Locust和Jmeter对比

Locust 和 JMeter 都可以用来进行压力测试。但二者有一些明显的区别:

  • Locust 更容易上手。它使用 Python 作为脚本语言,在用户定义的用例上提供了非常友好的界面,而 JMeter 则需要手动编写 XML 脚本来运行测试。
  • Locust 可以模拟多个用户同时发起请求,而 JMeter 只能同时发起一个请求。
  • Locust 在性能测试和负载测试方面更易于实施,更容易调试,可以更轻松地构建任务和用户脚本。
  • Locust 可以将测试结果实时传输到web界面以及图表。
  • JMeter 可以根据不同的参数进行设置,可以很容易地模拟不同的用户行为,而 Locust 仅支持模拟特定的用户行为。
  • JMeter 可以有效地处理大量请求,而 Locust 在处理大量请求时会出现一些性能问题。
  • JMeter 可以在一台机器上设置压力测试,而 Locust 则需要分布式部署以支持大量的用户请求。
  • JMeter 允许基于多种协议(例如 JDBC、HTTP、FTP 和 SOAP)进行压力测试,而 Locust 仅限于 HTTP 协议。
  • JMeter 只能将测试结果保存到文本文件中,需要用户自行解析数据。

安装

github地址: https://github.com/locustio/locust

使用pip3命令安装如下:

代码语言:javascript
复制
pip3 install locust

如果linux安装失败,缺少 gcc 命令。

可以参考解决方案,安装 python 调试包。

代码语言:javascript
复制
sudo yum install python-devel
sudo yum install python3-devel

参数

在运行前,我们了解下 locust 的执行参数,locust在 1.x 版本和 2.x 版本参数有些不一样。所以学习的时候,大家使用 locust --version 命令看下工具版本号。

可以使用 locust --help 命令输出命令行参数,如下是一些常用的执行参数:

参数

描述

单位

-u NUM_USERS, --users NUM_USERS

并发用户的峰值数量

数字单位

-r SPAWN_RATE, --spawn-rate SPAWN_RAT

以(每秒用户数)生成用户的速率。主要与 --headless 或 --autostart 一起使用

数字单位

-t RUN_TIME, --run-time RUN_TIME

在指定的时间量(例如,20m、3h、1h30m等)。仅与--headless 或 --autostart启动。默认为永远运行。

数字单位

-H HOST, --host HOST

接口域名地址

字符串

-f LOCUSTFILE

脚本文件

绝对地址

--config CONFIG

配置文件

绝对地址

介绍完工具参数,另外我们看下压测结果相关参数。

参数

描述

Type

请求的类型,如GET/POST

Name

请求的路径

request

已发出请求数量

fails

请求失败的数量

Median

响应时间的中间值(单位:毫秒)

Average

平均响应时间(单位:毫秒)

Min‍

请求的最小响应时间(单位:毫秒)

Max

请求的最大响应时间(单位:毫秒)

reqs/sec

每秒钟请求的个数

运行

locust 执行分为有页面的无页面的方式,大家可以根据需要选择不同的方式。‍

有页面

有页面的方式是 locust 工具的一大特性,可以实时查看压测情况,这点要比 jmeter 好一些,比较合适小白使用。

使用命令如下:

代码语言:javascript
复制
locust -f locust_test.py  --host=http://10.30.30.85:9200  --web-host=127.0.0.1 --web-port=8088

启动命令后,会在当前电脑的浏览器打开一个 web 页面,端口是 8088,如果端口被占用需要手动kill掉端口。

无页面

无页面也称为无头,在命令行增加 --headless 参数,特别之处在于不会打开 web 页面,执行结果输出在终点页面上。适合短时间压测或者有其他收集测试结果的平台,不需要 web 平台查看数据。‍

代码语言:javascript
复制
locust -f locust_test.py  --headless --host=http://10.30.30.85:9200   

脚本

locust 的另外一个特点是编写测试脚本可以使用python文件替代,相比 jmeter 编写 jmx 文件会自由一些,正因为 locust 是基于 python 语言开发的,所以非常适合已经掌握 python 语言的同学。

demo代码如下:

代码语言:javascript
复制
# coding=utf-8
import os
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
 # 禁用安全请求警告
 from locust import HttpUser, TaskSet, task

class DramaFinishTask(TaskSet):
   
    # 前置处理
    def on_start(self):
         print("开始调用")

     # 后置处理
    def on_stop(self):
        print("停止调用")

    # 权重,执行比例
    @task(1)
    # 待测试的方法
    def test(self):
     # 请求的接口url
         req = self.client.head("/xxxxx", verify=False)
         if req.status_code == 200:
            print("success")
        else:
             print("fails")

 class DramaFinish(HttpUser):
    tasks = [DramaFinishTask]
    min_wait = 100
    max_wait = 800
    # 设置每次请求间隔时间
    # wait_time = between(1, 1)
    wait_time = constant(1)

上面代码可以看到,locust 的脚本编写通过继承 HttpUser 属性并且编写测试方法,self.client 的使用和 python requests 库比较相似。最终执行是通过 locust -f 执行脚本运行。

分布式

locust 同样也支持分布式压测,尤其当一台发压机能力不足的情况下,可以联动多台机器一起压测,master 和 slave 的方式压测 。

在主控机器执行master命令

代码语言:javascript
复制
locust -f locust_test.py --web-host=10.30.130.91 --web-port=9088 --master

在 slave 命令执行如下命令

代码语言:javascript
复制
locust -f locust_test.py --worker --master-host=10.30.130.91

如果有多个 slave 工作的话,会展示多个 slave client编号。

结语

本文主要介绍下 Locust 工具的初级使用,如果对 jmeter 有一定掌握的同学,学习起来会非常容易。

另外就是很多同学会问,jmeter 不是可以压测吗? 为什么还要学些 Locust 工具呢? 那我从几个维度回答下。

  • 对自己: 1、多掌握一门工具,在找工作上有一定优势,最起码简历中可以多写点。 2、每个工具都有自己的优点,可以对性能测试了解更深。
  • 对公司: 1、可以快速的完成工作,团队中可能大部分同学都是用 Locust 工具,如果你能提前掌握会更好的融入工作。 2、Locust 可以更好开发成压测平台,在工作上提高压测效率。

当然 Locust 也不是新工具,在业内使用的比较普遍,本文就介绍到这里了,祝各位元宵节快乐~,新一年工作顺利、身体安康。

相关推荐

记一次MQTT协议压测

接口自动化测试多场景实践 - 上篇

接口自动化测试多场景实践 - 下篇

为什么国内接口测试工具很多,却没有出现一站式平台呢?

locust可视化压测平台

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • Locust和Jmeter对比
  • 安装
  • 参数
  • 运行
    • 有页面
      • 无页面
        • 脚本
          • 分布式
            • 结语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档