性能压测工具:Locust详解

一、Locust介绍

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

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

模拟用户请求操作上:

只要我们能采用Python编写对应的请求客户端,就能方便地采用Locust实现压力测试;

模拟有效并发方面:

Locust完全基于事件,使用gevent (协程)提供的非阻塞IO和coroutine来实现网络层的并发请求,避免了系统级资源调度,大幅提高了性能,因此即使是单台压力机也能产生数千并发请求数。

主流压测工具对比:

在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看 ,或者直接关注VX公众号:互联网杂货铺 ,这份测试文档资料也打包在里面啦,免费领取!

软件测试视频教程观看处:

2023完整版阿里大牛7天软件测试零基础速成内部教程,从基础到项目实战学完即入职。

二、基本原理

主要的三个类: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步骤,直至测试任务终止。

三、实例

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) :每秒产生(启动)的用户数。

展示结果:

四、写在最后

PS:这里分享一套软件测试的自学教程合集。 对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。 如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关推荐
VidDown2 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频4 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook6 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺6 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
启观川7 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦7 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!7 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net
钱栈up8 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析