IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Locust性能自动化-Locust介绍 -> 正文阅读

[开发测试]Locust性能自动化-Locust介绍

1、Locust基本介绍

1.1 引言

??现在不管是互联网行业或者是传统行业,对性能的要求,都日渐增多,为了能更快更准确的定位问题,发现问题,解决问题,市面上出现了越来越多的性能测试工具,例如Jmeter,Loadrunner,Locust等。
??而今天,我们主要介绍的,就是Locust!很多人并不知道什么是Locust,包括使用python的人,因为不涉及到,所以不会去可以了解。那么,什么是Loucst,以及Locust的功能,大家接着往下看。

1.2 简介

??Locust直译是“蝗虫”的意思,意在压测时产生的压力就像是漫天蝗虫一样,铺天盖地。Locust是用Python实现的开源性能测试框架,不同于其他压测工具基于进程/线程产生压力,Locust是完全基于事件,支持分布式,一个Locust节点可以在一个进程中轻松支持上千并发用户。从这一点来看,它的设计思路要远优于Jmeter、Loadrunner之类的工具。

  1. Locust 与Jmeter占用资源比较
    Locust之所以在资源占用方面完胜开源的Jmeter,主要是因为:

两者的模式用户方式不同:
①Jmeter是通过线程来作为虚拟用户
②Locust借助gevent库对协程的支持,以greenlet来实现对用户的模拟。
所以,在相同配置下,Locust能支持的并发用户数相比Jmeter,就不止提升了一个Level。

  1. Locust使用语言
    Locust使用的是Python代码定义测试场景,目前支持Python2.7,3.3~3.7。
    它自带一个Web UI,用于定义用户模型,发起测试,实时测试数据,错误统计等。

  2. 官方文档
    更多更详细的内容,可以参考:
    (1)文档内容,点击:官方文档
    (2)源代码,点击:Github

2、Locust安装方式

2.1 安装 locust

  • 安装Python,建议使用Python3.6+
  • 安装Locust及其依赖:pip3 install -i https://pypi.douban.com/simple locust
  • 验证是否安装成功,执行命令:locust -V,如果能看到版本信息,即代表安装成功

如果安装 locust-1.2.3 以下版本,还需要pip install pyzmq安装pyzmq,支持运行Locust 分布在多个进程/进程

2.2 安装成功确认

locust --help

安装成功:
在这里插入图片描述

3、Locust 参数说明

3.1 参数信息

-h, --help    查看帮助
-H HOST, --host=HOST    指定被测试的主机,采用以格式:http://10.21.32.33
--web-host=WEB_HOST    指定运行 Locust Web 页面的主机,默认为空 ''。
-P PORT, --port=PORT, --web-port=PORT    指定 --web-host 的端口,默认是8089
-f LOCUSTFILE, --locustfile=LOCUSTFILE    指定运行 Locust 性能测试文件,默认为: locustfile.py
--csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE    以CSV格式存储当前请求测试数据。
--master    Locust 分布式模式使用,当前节点为 master 节点。
--slave    Locust 分布式模式使用,当前节点为 slave 节点。
--master-host=MASTER_HOST    分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 --slave 节点一起运行时使用,默认为:127.0.0.1.
--master-port=MASTER_PORT    分布式模式运行, 设置 master 节点的端口号,只在与 --slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
--master-bind-host=MASTER_BIND_HOST    Interfaces (hostname, ip) that locust master should bind to. Only used when running with --master. Defaults to * (all available interfaces).
--master-bind-port=MASTER_BIND_PORT    Port that locust master should bind to. Only used when running with --master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558.
--expect-slaves=EXPECT_SLAVES    How many slaves master should expect to connect before starting the test (only when --no-web used).
--no-web    no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, --clients=NUM_CLIENTS    指定并发用户数,作用于 --no-web 模式。
-r HATCH_RATE, --hatch-rate=HATCH_RATE    指定每秒启动的用户数,作用于 --no-web 模式。
-t RUN_TIME, --run-time=RUN_TIME    设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 --no-web 模式。
-L LOGLEVEL, --loglevel=LOGLEVEL    选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
--logfile=LOGFILE    日志文件路径。如果没有设置,日志将去 stdout/stderr
--print-stats    在控制台中打印数据
--only-summary    只打印摘要统计
--no-reset-stats    Do not reset statistics once hatching has been completed。
-l, --list    显示测试类, 配置 -f 参数使用
--show-task-ratio    打印 locust 测试类的任务执行比例,配合 -f 参数使用.
--show-task-ratio-json    以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.
-V, --version    查看当前 Locust 工具的版本.

3.2 Locust主要库

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

  2. flask
    Python编写的轻量级Web应用框架。

  3. requests
    Python的HTTP库,如requests.get()、requests.post()

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

  5. six
    Python2和3兼容库,用来封装Python2和Python3之间的差异性。

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

4、Locust类说明

4.1 client属性

  • 在Locust类中,静态字段client即客户端的请求方法,这里的client字段没有绑定客户端请求方法,因此在使用Locust时,需要先继承Locust类class HttpLocust(HttpUser),然后在self.client =HttpSession(base_url=self.host)绑定客户端请求方法。

  • 对于常见的HTTP(s)协议,Locust已经实现了HttpLocust类,其self.client=HttpSession(base_url=self.host),而HttpSession继承自requests.Session。

  • 在测试HTTP(s)的Locust脚本中,可以通过client属性来使用Python requests库的所有方法,调用方式与reqeusts完全一致。

  • 由于requests.Session的使用,client的方法调用之间就自动具有了状态记忆功能。

  • 常见的场景就是,在登录系统后可以维持登录状态的Session,从而后续HTTP请求操作都能带上登录状态。

4.2 其他属性

4.2.1 task_set

指向一个TaskSet类,TaskSet类定义了用户的任务信息,该静态字段为必填。

4.2.2 max_wait/min_wait

每个用户执行两个任务间隔的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间为1秒。

4.2.3 host

被测试系统的host,当在终端中启动locust时没有指定–host参数时才会用到。

4.2.4 weight

同时运行多个Locust类时,用于控制不同类型的任务执行权重。

5、Loucst执行流程

具体流程如下:

①先执行WebsiteTasks中的on_start(只执行一次),作为初始化;

②从WebsiteTasks中随机挑选(如果定义了任务间的权重关系,那么就按照权重关系随机挑选)一个任务执行;

③根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;

④重复2~3步骤,直到测试任务终止。

执行顺序:
Locust setup → TaskSet setup → TaskSet on_start →
TaskSet tasks → TaskSet on_stop → TaskSet teardown →
Locust teardown

6、性能测试工具比较

项目JmeterLoadrunnerLocust
授权方式开源商业收费开源
开发语言JavaC/JavaPython
测试脚本形式GUIJavaC/JavaPython
并发机制线程进程/线程协程
单机并发能力
分布式压力支持支持支持
资源监控不支持支持不支持
报告与分析简单图表完善简单图表
支持二次开发支持不支持支持

通过对比,可以看到Locust并不占优,但是,采用Locust原因在于:

  1. 首先是模拟用户操作
    ①Locust采用Pure Python脚本描述,并且HTTP请求完全基于Requests库。
    ②Requests这个库非常简洁易用,但功能十分强大,很多其它编程语言的HTTP库都借鉴了它的思想和模式,如果将其评选为最好用的HTTP库之一(不限语言),应该也不会有太大的争议。
    ③除了HTTP(S)协议,Locust也可以测试其它任意协议的系统,只需要采用Python调用对应的库进行请求描述即可。

  2. 并发机制
    ①Locust的并发机制采用协程(gevent)的机制。
    ②采用多线程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。
    ③而协程和线程的区别在于:协程避免了系统级资源调度,由此大幅提高了性能。
    ④正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。

原文链接:https://www.cxybb.com/article/wuyoudeyuer/108596264

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:52:24  更:2022-03-08 22:53:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 3:00:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码