浅谈locust 性能压测使用
1. 基本介绍
Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性。编写语言为Python,可通过Python来自定义构建性能压测场景脚本。Locust支持分
布式负载测试,可以通过多个机器协同工作来模拟大量用户并发访问。并提供了一个Web界面,可以实时监控并查看测试的性能指标和统计数据,并支持常见的协议,如HTTP、HTTPS、
FTP、WebSocket等,更重要的是具有良好的扩展性,用户可以编写自定义的扩展来满足特定需求。它还提供了多个钩子函数,可以在测试运行过程中插入自定义代码,高度灵活,随心创造。
2. 基本组成
User 类(User class):
在Locust脚本中,必须定义一个继承自HttpUser或User类的用户类。这个用户类代表了模拟的用户,并定义了用户的行为和任务。用户类中的每个方法都代表一个用户行为,例如发送请求、处理响应等。
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脚本。在脚本中,定义一个继承自HttpUser或User类的用户类,并在其中定义任务和行为。例如,发送请求、处理响应等。
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 性能压测使用的更多相关文章
- locust接口压测
前言: locust是完全基于python,是一个简单易用的分布式负载测试工具 Locust特性 使用Python编写模拟用户行为的代码,无需繁琐的配置 分布式可扩展,能够支持上百万用户 自带Web界 ...
- 浅谈java性能分析
浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...
- 浅谈DOM性能考虑
浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记 访问DOM的方式对脚本性 ...
- 性能压测诡异的Requests/second 响应刺尖问题
最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...
- jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测
自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...
- 性能压测,SQL查询异常
早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...
- jmeter性能压测瓶颈排查-网络带宽
问题: 有一台机器做性能压测的时候,无论开多少个线程,QPS一直压不上去,而服务器和数据库的性能指标(主要是CPU和内存)一直维持在很低的水平. 希望帮忙排查一下原因. 过去看了下进行压测的接口代码, ...
- 性能压测中的SLA,你知道吗?
本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...
- 并发模式与 RPS 模式之争,性能压测领域的星球大战
本文是<如何做好性能压测>系列专题分享的第四期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论 ...
- [SCF+wetest+jmeter]简单云性能压测工具使用方案
前言 压测太难?局域网压力无法判断服务器网络指标?无法产生非常大的并发量?云性能太贵? 也许我们可以把各种简单的工具拼起来进行压力测试! 准备 https://cloud.tencent.com/pr ...
随机推荐
- 发现AI自我意识:从理解到思维
广义"理解"已经实现 在最新的人工智能系统中,我们经常可以观察到一种类似"理解"的能力.这种广义的"理解"能力,主要建立在两个基础之上:海量 ...
- 【Android Studio】 SQLite 数据库 增删改查
今日目标:参照标题 实现效果: 实现过程: 1.创建实现页面 页面设计思路: 最外层垂直线性布局.内部使用三个线性布局.后两个用的水平排版,用来显示数值. 实例化四个Button,两个EditText ...
- Snipaste安装与使用教程
一.下载 1.官网 下载地址 2.下载 可以直接在官网下载,也可以跳转微软仓库下载增强版的.如果是其他系统,mac在最下面,而Linux现在没有需要等待. 二.开始安装 1.下载完毕,是一压缩包绿色版 ...
- 理解Mysql索引原理及特性
作为开发人员,碰到了执行时间较长的sql时,基本上大家都会说"加个索引吧".但是索引是什么东西,索引有哪些特性,下面和大家简单讨论一下. 1 索引如何工作,是如何加快查询速度 索引 ...
- gridlayout
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...
- k8s安装网络插件calico出现error validating "calico.yaml": error validating data: invalid object to validate; if you choose to ignore these errors, turn validation off with --validate=false
解决办法:使用下面版本的calico curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
- Spring整合Quartz简单入门
创建一个Web项目 导入相关jar包 <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- SpringBoot整个RabbitMQ详细~
搭建环境 1.安装RabbitMQ,我是用的是Docker方式安装的,大家根据个人习惯自行安装哈 docker run -d -p 5672:5672 -p 15672:15672 --name ra ...
- ios上架流程 详细通关教程 2021
记录此文是源于以下需求 1.已有app store开发者账号 (公司账号$99),需上架至app store 2.有商城实体商品支付功能(会员等虚拟支付另说) 3.有硬件交互功能 注:建议预留一周上架 ...
- 技本功|Hive优化之Spark执行引擎参数调优(二)
Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要有数据 ...