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 性能压测使用的更多相关文章

  1. locust接口压测

    前言: locust是完全基于python,是一个简单易用的分布式负载测试工具 Locust特性 使用Python编写模拟用户行为的代码,无需繁琐的配置 分布式可扩展,能够支持上百万用户 自带Web界 ...

  2. 浅谈java性能分析

    浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...

  3. 浅谈DOM性能考虑

    浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记    访问DOM的方式对脚本性 ...

  4. 性能压测诡异的Requests/second 响应刺尖问题

    最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...

  5. jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测

    自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...

  6. 性能压测,SQL查询异常

    早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...

  7. jmeter性能压测瓶颈排查-网络带宽

    问题: 有一台机器做性能压测的时候,无论开多少个线程,QPS一直压不上去,而服务器和数据库的性能指标(主要是CPU和内存)一直维持在很低的水平. 希望帮忙排查一下原因. 过去看了下进行压测的接口代码, ...

  8. 性能压测中的SLA,你知道吗?

    本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  9. 并发模式与 RPS 模式之争,性能压测领域的星球大战

    本文是<如何做好性能压测>系列专题分享的第四期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论 ...

  10. [SCF+wetest+jmeter]简单云性能压测工具使用方案

    前言 压测太难?局域网压力无法判断服务器网络指标?无法产生非常大的并发量?云性能太贵? 也许我们可以把各种简单的工具拼起来进行压力测试! 准备 https://cloud.tencent.com/pr ...

随机推荐

  1. 企业微信获取code

    String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+AuthUtil.APPID   + ...

  2. mac端 安卓UI自动化安装环境配置

    安装JDK   官网下载安装包https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.h ...

  3. [ABC266G] Yet Another RGB Sequence

    Problem Statement You are given integers $R$, $G$, $B$, and $K$. How many strings $S$ consisting of ...

  4. Chrome扩展开发实战:快速填充表单

    大家好,我是 dom 哥.我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 . 填表单是打工人经常面对的场景,作为一个前端,我经常开发一些PC端的页面,它们主要由表单和表格构成 ...

  5. pinia状态管理初识

    一款官方推荐的,代替vuex的,新的状态管理工具. 官方网: https://pinia.vuejs.org/zh/introduction.html 主要区别: 去除了modules的概念,每个st ...

  6. influxdb 进行数据删除和修改

    本文为博主原创,转载请注明出处: 1.条件删除数据 InfluxDB 只支持基于时间的删除操作. 可以使用 DELETE 语句来删除指定时间范围内的数据.例如,以下的 SQL 语句将删除 measur ...

  7. 设计模式之设计模式概述-shejimoshigaishu

    title: 设计模式之设计模式概述 date: 2022-12-04 00:21:18.469 updated: 2022-12-11 23:03:45.617 url: https://www.y ...

  8. Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)

    Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134) 简介 Atlassian Confluence是企业广泛使用的wiki系统.2022年6月2日Atlassian官 ...

  9. 通过印模生成电子印章-Java源代码

    以下代码是处理印模图片的核心代码,通过以下代码可以将公章图片转换为电子印章图片. 制作方式分为四步: 1.在白纸上加盖印章: 2.把加盖印章的白纸扫描,形成图片: 3.将图片通过下面的代码进行自动透明 ...

  10. 图片标注-----labelimage

    本人用的环境是   win10  +  python3.6 pip install labelimg 安装成功之后,找到  Anaconda 安装目录下的  Lib  , 然后找到   site-pa ...