首页 > 其他分享 >浅谈locust 性能压测使用

浅谈locust 性能压测使用

时间:2023-10-09 22:59:07浏览次数:34  
标签:浅谈 压测 locust self Locust 用户 任务 response 定义

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类的用户类,并在其中定义任务和行为。例如,发送请求、处理响应等。

from locust import HttpUser, task, between

class MyUser(HttpUser):
    wait_time = between(2, 5) # 定义用户等待时间范围

    @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,
        )

 

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

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是一个功能强大、易用且灵活的负载测试工具,可用于模拟大规模用户并发访问,并评估系统的性能和稳定性。

标签:浅谈,压测,locust,self,Locust,用户,任务,response,定义
From: https://www.cnblogs.com/beyond-tester/p/17753397.html

相关文章

  • centos7系统中创建临时接口,使用jmeter进行http压测
    要在一台CentOS7服务器上使用JMeter进行HTTP接口的压测,首先需要在服务器上部署一个Web服务器,然后在其上部署您想要测试的接口。以下是一些简单的步骤来实现这一目标:步骤1:在CentOS7服务器上安装Web服务器您可以选择安装常用的Web服务器,比如Apache或Nginx。以下......
  • 浅谈构造数据这件事
    一.前言为什么会写这篇文章呢?原因就是最近一段时间测试发现身边2为测试人员一个优秀,一个普通,身上巨大差异点就出现在这里,前者,在转测前,利用空闲时间造好数据,为测试做好准备后者,因为不会造数据,基本上不造数据,针对需要推送数据的内容,基本就不测试,所有测试结果可想而知我们都知道,不......
  • 浅谈树链剖分—轻重链剖分
    闲话似乎会有很多种树剖,什么长链剖分之类的,但是暂时只会轻重链剖分(可怜)。以前的版本在这里,但是感觉写的太粗糙了,所以决定重写一篇(我也不知道为什么要一直写树剖而不写点别的)。正文引入如果给出一个序列,有一些区间修改查询之类的操作,直接上线段树什么的就完事了,但是如果给出的......
  • 浅谈 Java 程序运行
    JVM是如何启动的?配置JVM装载环境解析虚拟机参数设置线程栈大小执行JavaMain方法内存是如何管理的?JVM内存模型程序运行视角下的Java内存管理此处所说的JVM内存模型是一种通用逻辑模型,与具体的虚拟机实现无关,虚拟机可以根据实际情况基于通用逻辑模型,给出不同的......
  • 浅谈概率论
    浅谈概率论说句鲜花:明天就是月考,马上就是csp。但是不想学有用的东西,就写了这篇博客。严格数学公理体系:(水平不够,暂略)贝叶斯公式:定义\(P(A|B)\)为发生\(B\)事件下发生\(A\)事件的概率。则有\(P(A|B)=\dfrac{P(B|A)P(A)}{P(B)}\)证明:由于\(P(A|B)P(B)=P(B|A)P(A......
  • 浅谈关于LCA
    prologue本身只会tarjan和倍增法求LCA的,但在发现有一种神奇的\(O(1)\)查询lca的方法,时间优化很明显。mainbody倍增法先讨论倍增法,倍增法求lca是一种很常见普遍的方法,这里直接放代码了,其本身的内核就是让较低点每次都跳$2^k$步,如果跳的比另一个高了,就不跳那......
  • 浅谈一致性哈希Consistent Hashing
    目录1.一致性哈希定义2.工作原理3.应用场景4.使用一致性哈希的软件5.一致性哈希的开源实现6.一致性哈希的不足本文主要介绍一致性哈希的定义、原理,以及应用场景等内容。1.一致性哈希定义一致性哈希(ConsistentHashing)是一种特殊的哈希技术,主要用于解决分布式系统中的数据分布......
  • 对线程池设置做压测
    线程池代码@ConfigurationpublicclassThreadPoolConfig{//核心线程池大小privateintcorePoolSize=24;//最大可创建的线程数privateintmaxPoolSize=25;//队列最大长度privateintqueueCapacity=100;//线程池维护线程所允......
  • 浅谈数据结构栈与队列
    栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的......
  • Jmeter 压测工具使用手册(完整版)
    转自:https://learnku.com/articles/43858Jmeter压测工具使用手册(完整版)一、jemter简介jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装......