浅谈locust 性能压测使用

1. 基本介绍

Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性。编写语言为Python,可通过Python来自定义构建性能压测场景脚本。Locust支持分

布式负载测试,可以通过多个机器协同工作来模拟大量用户并发访问。并提供了一个Web界面,可以实时监控并查看测试的性能指标和统计数据,并支持常见的协议,如HTTP、HTTPS、

FTP、WebSocket等,更重要的是具有良好的扩展性,用户可以编写自定义的扩展来满足特定需求。它还提供了多个钩子函数,可以在测试运行过程中插入自定义代码,高度灵活,随心创造。

2. 基本组成

User 类(User class):
  在Locust脚本中,必须定义一个继承自HttpUserUser类的用户类。这个用户类代表了模拟的用户,并定义了用户的行为和任务。用户类中的每个方法都代表一个用户行为,例如发送请求、处理响应等。

Task 类(Task class):
  用户类中的方法通常被称为任务(task),每个任务定义了用户的一个具体行为。任务可以是一个函数、一个装饰器或一个类方法。任务通常用于发送请求、处理响应等操作。

TaskSet 类(TaskSet class):
  TaskSet类是用于组织任务的一种方式。它可以包含多个任务,并定义了用户在执行这些任务时的行为和逻辑。通过TaskSet,可以更好地组织和管理任务,使脚本的结构更加清晰。

Weight 属性(Weight attribute):
  在用户类中,可以为每个任务指定一个权重(weight)。权重用于控制每个任务在负载测试中的执行频率。较高权重的任务将更频繁地执行,而较低权重的任务将相对较少执行。

on_start() 方法:
  用户类中的on_start()方法定义了每个用户在开始执行任务之前要执行的初始化操作。例如,可以在on_start()方法中进行用户登录或准备测试数据等操作。

on_stop() 方法:
用户类中的on_stop()方法定义了每个用户在完成所有任务后要执行的清理操作。例如,可以在on_stop()方法中进行用户退出或清理资源等操作。

Host 属性:
在用户类中,可以定义一个host属性,指定要测试的目标主机地址。这个属性告诉Locust在执行请求时要发送到哪个主机。

TaskSet 属性:
用户类中可以定义一个或多个TaskSet属性,用于组织和管理任务。通过TaskSet属性,可以将任务分组并按组执行,使脚本更加模块化和可维护。

3. 基本使用步骤

定义用户行为和任务:
首先,需要定义用户的行为和任务,即编写Locust脚本。在脚本中,定义一个继承自HttpUserUser类的用户类,并在其中定义任务和行为。例如,发送请求、处理响应等。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

from locust import HttpUser, task, between

class MyUser(HttpUser):

    wait_time = between(25# 定义用户等待时间范围

    @task

    def my_task(self):

        self.client.get("/path"# 发送GET请求    @task(3)  # 指定任务权重

    def weighted_task(self):

        response = self.client.post("/path", json={"key""value"})  # 发送POST请求

        if response.status_code == 200:

            self.log_success("POST request succeeded", response.elapsed.total_seconds())

        else:

            self.log_failure("POST request failed", response.elapsed.total_seconds())

    def log_success(self, message, response_time):  # 定义请求成功和失败处理

        self.environment.events.request_success.fire(

            request_type="my_task",

            name=message,

            response_time=response_time,

            response_length=0,

        )

    def log_failure(self, message, response_time):

        self.environment.events.request_failure.fire(

            request_type="my_task",

            name=message,

            response_time=response_time,

            exception=None,

            response_length=0,

        )

设置负载测试参数:
在脚本中,可以设置一些负载测试的参数,如用户的并发数量、每秒的请求数等。

1

2

3

4

5

6

7

class MyUser(HttpUser):    tasks = [MyUser]  # 定义要执行的用户类

    wait_time = constant(1)  # 设置每个用户的等待时间

    host = "https://example.com"  # 设置目标主机地址

    min_wait = 5000  # 设置用户最小等待时间

    max_wait = 10000  # 设置用户最大等待时间

    users = 100  # 设置并发用户数

    spawn_rate = 10  # 设置每秒新增用户数

启动 Locust 

locust -f my_script.py 

访问 Locust Web 界面:
启动Locust后,可以通过访问Locust的Web界面进行监控和控制。默认情况下,Web界面监听在http://localhost:8089

总之,Locust是一个功能强大、易用且灵活的负载测试工具,可用于模拟大规模用户并发访问,并评估系统的性能和稳定性。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Element UI 适用于 Vue 2 版本的虚拟列表选择器组件el-select

背景:在某些使用情况下,单个选择器可能最终加载数万行数据。 将这么多的数据渲染至 DOM 中可能会给浏览器带来负担,从而造成性能问题。 ——vue3element-plus有现成的轮子。而vue2element-ui没有。 以下 文章大部分 摘自 源组件中的README.md…

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

专题介绍 该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。 相关资料 官方论坛: https://www.lomcn.org/fo…

张江智荟毁约offer

毕业8年后,找工作被国企歧视学历!已经收到了offer,在入职前一周被通知要撤回offer,拒绝录用,理由居然是他们只要本科211以上的人 这是我今天(2023-12-26)亲身经历的事,听说过面试前…

【树莓派4b的uboot编译移植】

树莓派4b的uboot编译移植 引言 0.1、什么是uboot OS跑起来前,需要的一段引导程序负责部署整个计算机系统,引导操作系统内核启动并给内核传参提供一个命令行界面供人操作是一个开源项目,uboot就是universal bootloader(通用的启…

orangepi——蜂鸣器简单应用和首行缩进设置

1.修改缩进 命令:sudo vi /etc/vim/vimrc:用超级用户进入修改页面 修改: set tabstop4 set shifwidth4 set nu 再重新打开vi界面,可以看到有了行显示,缩进为4字符 2.蜂鸣器 进入到解压的wiringOP-next中&#xf…

词法语法语义分析程序设计及实现,包含出错提示和错误恢复

词法说明 (1)关键字 main, int, char, if, else, for, while, void (2)运算符 - * / < < > > ! (3)界符 ; ( ) { } (4)标识符 ID letter(letter|digit)* (5)整型常数 NUM digit digit* (6)空格 ‘ ‘ ‘\n’ ‘\r’ ‘\t’ 空格用来分隔ID,NUM,运算符,界…

Matlab实时读取串口数据并实时画图方法

** Matlab实时读取串口数据并实时画图方法 ** 按照数据串口协议如&#xff1a;$KT2,1.80,88.18,39.54,42.86,LO[0.72,-1.04,0.35]&#xff0c;举例。 s serialport("COM12",115200,"Timeout",5); poszeros(100000,3); j1; data1 read(s,1,"uint8&…

正则表达式:元字符

一、什么事元字符 正则是由一系列的元字符组成的&#xff0c;所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符&#xff0c;元字符是构成正则表达式的基本元件。 二、元字符的分类 1.特殊单字符 表达式含义\d匹配任意一个数字\D匹配任意非数字\w匹配任意一个字母、…

面试经典150题(50-53)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二十二天&#xff09;完成了4道(50-53)150&#xff1a; 50.&#xff08;141. 环形链表&#xff09;题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个…

算法练习Day20 (Leetcode/Python-回溯算法)

虽然看似进入了一个新章节&#xff0c;但其实还是前几天二叉树章节的延续。。 回溯算法 &#xff08;以下内容摘抄自代码随想录&#xff09;&#xff1a; 回溯法解决的问题都可以抽象为树形结构&#xff0c;是的&#xff0c;我指的是所有回溯法的问题都可以抽象为树形结构&…

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群&#xff08;v1.23.14&#xff09; 4.验证集群&#xff08;v1.23.14&#xff09; 二、实验 1. 环境 2.升级集群&#xff08;v1.23.14&#xff09; 2.验证集群&#xff08;v1.23.14&#xff09; 一、理论 1.K8S集群升级 …

详解视频美颜SDK:算法优化与性能提升

众所周知&#xff0c;视频美颜SDK的算法优化和性能提升至关重要。下文小编将与大家深度探讨视频美颜SDK的算法原理&#xff0c;以及近期的性能优化措施。 一、常见用法 视频美颜SDK对人脸进行识别&#xff0c;并附加适当的美颜效果。例如&#xff1a; 1.识别、关键点 2.肤色…

modbus-tcp-rtu协议图表

MODBUS TCP 读寄存器 请求 序号 意义 所占字节 字节存放格式 1 事务处理标识 2个字节 高字节在前 2 协议标识 2个字节 高字节在前 3 长度 2个字节 高字节在前 4 单元标识 1个字节 0x00-0xff 5 功能码 1个字节 0x03 6 起始寄存器地址 2个字节 高字节…

flutter项目从创建到运行,以及一些常用的命令

# 创建项目 命令行 flutter create flutter_app &#xff08;这种vsCode软件可用&#xff09; 按下ctrlshiftp&#xff0c; 输入 Flutter: New Project 选择 Application 选择项目存放位置 输入项目名字 点击 enter 完成创建 # 运行项目 1、命令行中运行&#xff1a; cd flutte…

GLES学习笔记---OpenGL绘制到ImageReader

一、ImageReader简介 ImageReader 之前经常使用在camera应用里面&#xff0c;创建一个ImageReader&#xff0c;然后获取surface&#xff0c;配流和下发request时候将surface下发给framework&#xff0c;中间具体对ImageReader做了什么没有具体研究过&#xff0c;等到Hal层came…

MYSQL数据库的备份与恢复-数据库实验七

一、实验目的 1. 了解备份和恢复的基本概念。 2. 掌握使用MySQL命令进行数据库备份的操作方法。 3. 掌握使用MySQL命令进行数据库恢复的操作方法。 二、实验内容 1. 使用mysqldump命令备份数据库studentsdb的所有表&#xff0c;存于D:\下&#xff0c;文件名为all_tables.s…

C#与php自定义数据流传输

C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器&#xff1a;服务器返回数据给客户端&#xff1a; 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…

Java基础知识:单元测试和调试技巧

在Java编程中&#xff0c;单元测试和调试是提高代码质量和开发效率的重要环节。通过单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;而调试则帮助我们找出并修复代码中的错误。本文将介绍Java中的单元测试和调试技巧&#xff0c;并提供相关示例代码&#xff0c;帮助…

华清远见嵌入式学习——ARM——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; do_irq.c: #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0;//延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j);} }void do_i…

基于AR+地图导航的景区智慧导览设计

随着科技的飞速发展&#xff0c;智慧旅游已经成为现代旅游业的一个重要趋势。在这个背景下&#xff0c;景区智慧导览作为智慧旅游的核心组成部分&#xff0c;正逐渐受到越来越多游客的青睐。本文将深入探讨地图导航软件在景区智慧导览中的应用&#xff0c;并分析其为游客和景区…