• Locust:可能是一款最被低估的压测工具


    01、Locust介绍
    开源性能测试工具https://www.locust.io/,基于Python的性能压测工具,使用Python代码来定义用户行为,模拟百万计的并发用户访问。每个测试用户的行为由您定义,并且通过Web UI实时监控聚集过程。

    压力发生器作为性能测试工具的核心部分,两个核心要点有:一是真实模拟用户操作,二是模拟有效并发

    模拟用户请求操作上:
    只要我们能采用Python编写对应的请求客户端,就能方便地采用Locust实现压力测试;
    模拟有效并发方面:
    Locust完全基于事件,使用gevent (协程)提供的非阻塞IO和coroutine来实现网络层的并发请求,避免了系统级资源调度,大幅提高了性能,因此即使是单台压力机也能产生数千并发请求数。
    主流压测工具对比:

    02、基本原理
    主要的三个类:HttpLocust, TaskSet, task

    Locust类代表一群蝗虫,而每一只蝗虫就是一个类的实例,TaskSet类则可代表蝗虫的大脑,即实际业务场景测试对应的任务集。

    1、Locust类

    继承于Locust的类代表一个用户,Locust会为每一个模拟用户生成一个locust类实例。

    在Locust类中,还有几个属性需要关注下:

    2、TaskSet类

    TaskSet定义任务信息,是定义待测试的任务代码集。每一个Locust类中包含一个指向TaskSet的task_set属性设置。测试任务开始后,每个 Locust 用户会从 TaskSet 中随机挑选一个任务执行,然后随机等待 HttpLocust 类中定义的 min_wait和 max_wait 之间的一段时间,执行下一个任务。

    3、task

    通过@task()装饰的方法为一个事务。方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。

    tasks = {classname:2} 表示每个用户执行 classname 的频率是2

    4、执行原理

    测试开始后,每个虚拟用户(Locust实例)的运行逻辑都会遵循如下规律:

    先执行WebsiteTasks中的on_start(有则执行,只执行一次),作为初始化;
    从WebsiteTasks中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行;
    根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;
    重复2~3步骤,直至测试任务终止。
    03、实例
    实例

    V1.1 有些小改动,原理类似,QuickStartUser继承HttpUser,定义用户行为集。

    index() 、search() 方法访问百度首页,用@task() 装饰该方法为一个任务,1表示一个Locust实例被挑选执行的权重,数值越大,执行频率越高。

    运行结果:

    启动性能:

    locust -f demo_pt.py       #  --host=https://www.baidu.com   -f, --locustfile:指定执行的Locust脚本文件

    访问:http://127.0.0.1:8089

    • Number of users to simulate:设置模拟用户数
    • Hatch rate (users spawned/second) :每秒产生(启动)的用户数。

    展示结果:

    学习安排上

    如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  • 相关阅读:
    coding上的免费的编译、打包、推镜像工具(cicd)太强了,必须分享一下
    如何在ownCloud/NextCloud/丰盘ECM等免费企业网盘集成在线Office?
    二叉树的最大宽度
    css知识点总结
    消息队列概述
    常用的Layout布局元素(重点)
    prometheus day07
    测试设计场景题
    CSC青年骨干教师项目教师节当天开始申报
    快鲸scrm系统:助力母婴门店实现私域长效增长
  • 原文地址:https://blog.csdn.net/qq_73332379/article/details/134298531