• Locust:简介和基本用法


    我个人在性能测试工作中,负载生成工具使用的大多都是jmeter,现在来看看locust,因为可以用python编写脚本,进行定制化,而我自己就是用python比较多,所以用一下这个性能工具

    官网:https://www.locust.io/

    官方文档:https://docs.locust.io/en/stable/index.html

    一、认识Locust

    1、介绍

    Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。

    locust是蝗虫的意思,很影响,性能测试就好像蝗虫来袭的样子

    看看官网的介绍:

    An open source load testing tool.

    Define user behaviour with Python code, and swarm your system with millions of simultaneous users.

    一个开源性能测试工具。

    使用 Python 代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 

    ####

    2,和jmeter对比

    工具     区别

    jmeter  需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限

    locust  通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter

    PS:但locust的局限性在于,目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。

    二、安装Locust

    ###

    mac下安装Locust

    pip install locust

    检测locust是否安装成功

    locust --help

    ####

    安装依赖分析

    github地址:https://github.com/locustio/locust/blob/master/setup.py

    这里想简单介绍 Locust 都基于了哪些库。打开 Locust 安装目录下的 setup.py 文件。查看安装要求:

    install_requires=[
    "gevent>=20.9.0",
    "flask>=2.0.0",
    "Werkzeug>=2.0.0",
    "requests>=2.23.0",
    "msgpack>=0.6.2",
    "pyzmq>=22.2.1",
    "geventhttpclient>=1.5.1",
    "ConfigArgParse>=1.0",
    "psutil>=5.6.7",
    "Flask-BasicAuth>=0.2.0",
    "Flask-Cors>=3.0.10",
    "roundrobin>=0.0.2",
    "typing-extensions>=3.7.4.3",
    ],

    gevent 是在 Python 中实现协程的一个第三方库。协程,又称微线程(Coroutine)。使用gevent可以获得极高的并发性能。

    flask 是 Python 的一个 Web 开发框架。

    Requests 用来做 HTTP 接口测试。

    msgpack-python 是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据。

    six 提供了一些简单的工具用来封装 Python2 和 Python3 之间的差异性。

    pyzmq 如果你打算运行 Locust 分布在多个进程/机器,建议你安装pyzmq。

    当我们在安装 Locust 时,它会检测我们当前的 Python 环境是否已经安装了这些库,如果没有安装,它会先把这些库一一装上。并且对这些库版本有要求,有些是必须等于某版本,有些是大于某版本。我们也可以事先把这些库全部按要求装好,再安装Locust时就会快上许多。

    ####

    三、一个简单的示例

    准备脚本

    Locust 没有傻瓜式的脚本录制功能,要想用它来做性能测试,必须撸起袖子来写代码。

    我们看看官网的例子:

    from locust import HttpUser, task
    
    class HelloWorldUser(HttpUser):
        @task
        def hello_world(self):
            self.client.get("/hello")
            self.client.get("/world")

    ###

    脚本分析

    1,继承一个类

    2,使用@task装饰该方法为一个事务。

    3,client.get()用于指请求的路径“/”,

    ####

    启动界面

    Put the code in a file named locustfile.py in your current directory and run locust:

    也就是说,把上面的代码放到一个locustfile.py 的文件里面,然后在这个文件夹下面,直接命令行运行:locust

    Once you’ve started Locust, open up a browser and point it to http://localhost:8089. You will be greeted with something like this:

    _images/webui-splash-screenshot.png

     
    所以访问http://0.0.0.0:8089/,就可以看到locust给我们提供的界面了
    ###
    命令行启动可以指定文件和host

    locust -f .\load_test.py --host=https://www.baidu.com

    这样你打开页面,host是默认填充上的,

    ###

    界面的说明和使用

    Number of users to simulate:设置模拟的用户总数

    spawned rate (users spawned/second):每秒启动的虚拟用户数

    host,你要压测的地址host

    Start swarming:执行locust脚本

    ####

    测试结果界面

    我使用我的本地的一个接口地址,http://127.0.0.1:5000/
    然后再本地就可以看到刷刷的开始看到请求了

     PS:点击STOP可以停止locust脚本运行:

    Type:请求类型,即接口的请求方法;

    Name:请求路径;

    requests:当前已完成的请求数量;

    fails:当前失败的数量;

    Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;

    Average:平均响应时间,单位为毫秒;

    Min:最小响应时间,单位为毫秒;

    Max:最大响应时间,单位为毫秒;

    Content Size:所有请求的数据量,单位为字节;

    reqs/sec:每秒钟处理请求的数量,即QPS;

    ###

    各模块说明

    New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;

    Statistics:类似于jmeter中Listen的聚合报告;

    Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;

    Failures:失败请求的展示界面;

    Exceptions:异常请求的展示界面;

    Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;

    ###

    这是简单的介绍和使用,还需要深入一下,

     

  • 相关阅读:
    The Road to Ryu: Hi Ryu
    Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
    Python学习札记(三十四) 面向对象编程 Object Oriented Program 5
    Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
    Python学习札记(三十二) 面向对象编程 Object Oriented Program 3
    Coursera SDN M1.2.1 SDN History: Programmable Networks 2
    Python学习札记(三十一) 面向对象编程 Object Oriented Program 2
    Python学习札记(三十) 面向对象编程 Object Oriented Program 1
    Coursera SDN M1.2.1 SDN History: Programmable Networks 1
    Python学习札记(二十九) 模块2
  • 原文地址:https://www.cnblogs.com/andy0816/p/15618510.html
Copyright © 2020-2023  润新知