Python性能压测神器 : Locust!

发布时间:2024-11-30 01:47

Python程序员认证:通过学习Python语言并通过编程测试 #生活技巧# #工作学习技巧# #技能认证指南#

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类中,还有几个属性需要关注下: 

属性

含义

client属性

虚拟用户作为客户端所具备的请求能力,也就是常说的请求方法。HTTP(S)协议,Locust已经实现了HttpLocust类。其client属性绑定了HttpSession类,而HttpSession又继承自requests.Session。因此在测试HTTP(S)的Locust脚本中,我们可以通过client属性来使用Python requests库的所有方法,包括GET/POST/HEAD/PUT/DELETE/PATCH等,调用方式也与requests完全一致。

task_set

指向一个TaskSet类,TaskSet类定义了用户的任务信息,该属性为必填

min_wait/max_wait

以ms为单位的最小值和最大值,一个模拟用户将会在每个任务执行时的等待执行的时间间隔。默认设置为1000,如果不声明的话,Locust会默认在每个任务间等待1秒。

weight

一个测试用例中添加多个locust实例,每个locust实例执行占的比重,数值越大,执行频率越高.

图片

host

被测系统的host,要加载目标URL的前缀(如:'http://google.com'),当在终端中启动locust时没有指定--host参数时才会用到。

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

图片

展示结果:

图片

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网址:Python性能压测神器 : Locust! https://www.yuejiaxmz.com/news/view/318671

相关内容

Python压力测试工具——Locust
压力测试(QPS)及测试工具Locust
压测工具哪个好?LoadRunner、Jmeter、Locust、Wrk 全方位对比....
压测工具如何选择? ab、locust、Jmeter、go压测工具【单台机器100w连接压测实战】
几种常用的压力测试工具
哪款网站压力测试工具值得推荐
压力测试及常用的压测工具!
压力测试工具的比较:选择最适合您的解决方案# 1.背景介绍 压力测试,也被称为性能测试或性能验证,是一种对软件系统或网络
5款软件压力测试工具分享,上海专业的软件测评中心安利
2023年10个最受欢迎的性能测试工具

随便看看