浅谈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,一经查实,立即删除!

相关文章

张江智荟毁约offer

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

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

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

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

词法说明 (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,运算符,界…

正则表达式:元字符

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

算法练习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.肤色…

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…

华清远见嵌入式学习——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;并分析其为游客和景区…

【JavaWeb学习笔记】18 - 文件上传下载

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/fileupdown 目录 文件上传 一、基本介绍 二、文件上传的基本原理 ​编辑 三、文件上传应用实例 四、文件上传的注意细节 1.解决中文乱码问题 2.分割文件夹 3.防止重名 4.百度WebUploader 5.空…

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…

常用API:Object

Object Object类的作用&#xff1a; Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有的对象都可以直接使用Object类中提供的一些方法。 Object类的常见方法 方法名说明public String toString&#xff08;&#xff09;返回对象的字符串表示形式publi…

kubernetes -pod 实践

一、资源与对象 1、pod 容器都是由镜像启动的,但在容器外面会包裹通过Pod将容器包裹起来这个是K8s的概念,在这个Pod里面可以有一个或多个容器,那这个Pod的有什么特征呢 Pod里的所有容器都会调度在同一个节点上运行0。Pod中的所有容器会共享同一网络,它们有一个唯一的IP,…

PDF编辑工具--Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款功能强大的PDF编辑和管理软件&#xff0c;它可以帮助用户在创建、编辑、转换和共享PDF文档方面达到前所未有的高度。这款软件提供了丰富的编辑功能&#xff0c;使用户能够轻松添加注释、高亮、下划线、插入文本等&#xff0c;自由地编辑PDF文档。除了…

枚举的使用

背景以及定义 枚举是在jdk1.5以后引入的.主要用途是:将常量组织起来,在这之前表示一组常量通常使用定义常量的方式: public static final int RED 1; public static final int GREEN 2; public static final int BLUE 3; 但是常量举例有不好的地方,例如:可能碰巧有一个数字…

【Web API系列】使用getDisplayMedia来实现录屏功能

文章目录 前言一、认识getD该处使用的url网络请求的数据。二、使用步骤1.使用方法一实现录屏2.使用方法二实现录屏3. 运行效果 延伸 前言 Web API经过长期的发展&#xff0c;尤其是最近&#xff0c;发展相当迅猛&#xff0c;现在已经支持很多功能了&#xff0c;一些原生就支持…

[Linux]——彻底学通权限

学习权限 一、权限概念二、权限管理2.1文件访问者分类&#xff08;人&#xff09;2.2文件类型和访问权限&#xff08;事物的属性&#xff09;2.3 文件访问权限的相关设置方法 三、目录的权限3.1、进入目录的权限3.2、粘滞位 四、关于权限的总结 一、权限概念 Linux下有两种用户…