首页 > 其他分享 >Locust 运行原理分析

Locust 运行原理分析

时间:2024-03-16 21:34:18浏览次数:15  
标签:Locust 任务 client TaskSet 原理 属性 运行 wait

从脚本中可以看出,脚本主要包含两个类,一个是 `UserLocust`(继承自 `HttpLocust`,而 `HttpLocust`继承自 `Locust`),另一个是 `UserCollects`(继承自 `TaskSet`)。事实上,在 `Locust`的测试脚本中,所有业务测试场景都是在 `Locust`和 `TaskSet`两个类的继承子类中进行描述的。
那如何理解 `Locust`和 `TaskSet`这两个类呢?
简单地说,`Locust类`就好比是一群蝗虫,而每一只蝗虫就是一个类的实例。相应的,`TaskSet类`就好比是蝗虫的大脑,控制着蝗虫的具体行为,即实际业务场景测试对应的任务集。
接下来,我将分别对 `Locust`和 `TaskSet`两个类进行详细介绍。
**class HttpLocust(Locust)**
在 `Locust类`中,具有一个 `client`属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我们常说的请求方法。通常情况下,我们不会直接使用 `Locust`类,因为其 `client`属性没有绑定任何方法。因此在使用 `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`完全一致。另外,由于 `requests.Session`的使用,因此 `client`的方法调用之间就自动具有了状态记忆的功能。常见的场景就是,在登录系统后可以维持登录状态的 `Session`,从而后续HTTP请求操作都能带上登录态。
而对于 `HTTP(S)`以外的协议,我们同样可以使用 `Locust`进行测试,只是需要我们自行实现客户端。在客户端的具体实现上,可通过注册事件的方式,在请求成功时触发 `events.request_success`,在请求失败时触发 `events.request_failure`即可。然后创建一个继承自 `Locust类`的类,对其设置一个 `client`属性并与我们实现的客户端进行绑定。后续,我们就可以像使用 `HttpLocust类`一样,测试其它协议类型的系统。
原理就是这样简单!
在 `Locust类`中,除了 `client`属性,还有几个属性需要关注下:
* `task_set`: 指向一个 `TaskSet`类,`TaskSet`类定义了用户的任务信息,该属性为必填; * `max_wait/min_wait`: 每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间固定为1秒; * `host`:被测系统的host,当在终端中启动 `locust`时没有指定 `--host`参数时才会用到; * `weight`:同时运行多个 `Locust类`时会用到,用于控制不同类型任务的执行权重。
测试开始后,每个虚拟用户(`Locust实例`)的运行逻辑都会遵循如下规律:
1. 先执行 `userCollects`中的 `on_start`(只执行一次),作为初始化; 2. 从 `userCollects`中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行; 3. 根据 `Locust类`中 `min_wait`和 `max_wait`定义的间隔时间范围(如果 `TaskSet类`中也定义了 `min_wait`或者 `max_wait`,以 `TaskSet`中的优先),在时间范围中随机取一个值,休眠等待; 4. 重复 `2~3`步骤,直至测试任务终止。
**class TaskSet**
再说下 `TaskSet类`。
性能测试工具要模拟用户的业务操作,就需要通过脚本模拟用户的行为。在前面的比喻中说到,`TaskSet类`好比蝗虫的大脑,控制着蝗虫的具体行为。
具体地,`TaskSet类`实现了虚拟用户所执行任务的调度算法,包括规划任务执行顺序(`schedule_task`)、挑选下一个任务(`execute_next_task`)、执行任务(`execute_task`)、休眠等待(`wait`)、中断控制(`interrupt`)等等。在此基础上,我们就可以在 `TaskSet`子类中采用非常简洁的方式来描述虚拟用户的业务测试场景,对虚拟用户的所有行为(任务)进行组织和描述,并可以对不同任务的权重进行配置。

标签:Locust,任务,client,TaskSet,原理,属性,运行,wait
From: https://www.cnblogs.com/yongheng999/p/18077656

相关文章

  • Locust 多种运行方式
    运行`Locust`时,通常会使用到两种运行模式:**单进程运行**和**多进程分布式运行**。**单进程运行模式**`Locust`所有的虚拟并发用户均运行在单个`Python`进程中,具体从使用形式上,又分为`no_web`**和**`web`**两种形式。该种模式由于**单进程的原因,并不能完全发挥压力机所......
  • conda 安装R以及在 Jupyter Notebook中运行 R 代码
    1.打开命令行工具,输入以下命令,创建一个新的conda环境并激活:condacreate-nmyenvr-base==4.2.2condaactivatemyenv如碰到PackagesNotFoundError问题解决,使用以下命令,将conda-forge通道添加到通道列表中:condaconfig--appendchannelsconda-forge2.在conda环境中安......
  • Hadoop集群之运行环境搭建
    克隆虚拟机的准备工作1,修改主机名为hadoop101[root@hadoop100~]#hostnamectlset-hostnamehadoop101[root@hadoop100~]#bash[root@hadoop101~]# 2,使用root用户在/opt目录下创建 software(软件)和module(组件)文件[root@hadoop101~]#suroot[root@hadoop101~......
  • 深度解析Sora视频生成原理
    在当今数字时代,视频内容已经成为人们生活中不可或缺的一部分。Sora视频生成技术的出现,为视频内容的创作和生产带来了全新的可能性。Sora是一种基于人工智能的视频生成技术,它能够以惊人的速度和精度生成高质量的视频内容,为视频制作人员提供了强大的工具。本文将深度解析Sora视频生......
  • QSVRMGMT.DLL文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个QSVRMGMT.DLL文件(挑选合适的版本文件)把它......
  • provsvc.dll文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个provsvc.dll文件(挑选合适的版本文件)把它放......
  • 在 Ubuntu 和 Linux Mint 上更改运行级别的简单方法
    在Ubuntu和LinuxMint等基于Linux的操作系统中,运行级别(runlevel)是指系统的工作状态或运行模式。每个运行级别都对应着一组特定的服务和进程,用于满足用户或系统的不同需求。通过更改运行级别,用户可以控制系统启动时所加载的服务和进程,从而实现定制化的系统配置。运行......
  • 带你了解USB Type-C的原理!!!
    USBType-C是一种通用串行总线接口标准,主要用于连接智能手机、平板电脑、笔记本电脑等便携式电子设备。它具有正反插、传输速度快、数据传输能力强、支持大功率充电等优点。USBType-C是一种通用的串行总线接口标准,它具有24个引脚,这些引脚的功能和用途如下: 1. VBUS:电......
  • 前端React篇之React setState 调用的原理、React setState 调用之后发生了什么?是同步
    目录ReactsetState调用的原理ReactsetState调用之后发生了什么?是同步还是异步?ReactsetState调用之后发生了什么?setState是同步还是异步的ReactsetState调用的原理在React中,setState方法是用于更新组件状态的重要方法。当setState被调用时,React会对组件进......
  • win10 运行搜索的历史记录 记不下来
    win10系统,运行窗口中总是不记录使用过的命令,每次都要重新输入一遍很麻烦,我们一起看看,怎么解决这个问题。工具/原料win10方法/步骤 在电脑左下角winows图标,在弹出的快捷菜单中选择“设置” 弹出的windows设置窗口,选择“隐私” ......