locust性能测试和分布式压测

一、工具介绍

Locust是一个开源的Python性能测试工具,用于模拟大量并发用户访问网站、API等,以测试系统的性能和稳定性。它的主要特点包括:

1.简单易用:Locust基于Python编写,使用方便,学习曲线较低。

2.分布式支持:Locust支持分布式部署,可以在多台机器上运行,以模拟更大的并发用户。

3.实时监控:Locust提供实时监控和报告,可以查看测试性能指标、请求响应时间、错误率等数据。

4.脚本编写:Locust使用Python编写测试脚本,支持自定义请求和用户行为。

5.可扩展性:Locust支持自定义插件和扩展,可以满足不同测试需求。

在使用Locust进行性能测试时,需要编写Python脚本来定义用户行为和请求,然后使用Locust运行测试脚本,并设置并发用户数、请求频率等参数。Locust会模拟用户行为和请求,并记录性能数据,最后生成测试报告。

二、在项目中的应用

2.1 说明

本次测试的目的在于探查公司自研系统测试环境的系统业务处理性能,以及在高负载情况下的系统表现,通过对于项目架构和业务场景分析,设计从小程序 登录->首页刷新->设备数据监测/控制记录->设备采集数据查询->设备阈值保存(含web端接口)业务链路模型进行模拟和测试,实现多接口顺时并发压测,设计操作接口、并发比例等详情如下:

在这里插入图片描述
在这里插入图片描述

2.2示例代码脚本

import os, random
from locust import HttpUser, events, task, betweenclass UserBehavior(HttpUser):  # 定义一个TaskSet类,用于定义用户行为  TaskSet,HttpUser# @task  # 若添加@task装饰器,则该方法会在每个用户执行任务时执行,此处注销def on_start(self):  # 在测试开始执行的方法,用于进行登录操作获取token,用于后续接口的带入调用# 定义Content-Type请求头类型和请求体self.client.headers = {'Content-Type': 'application/json'}payload = {'username': 'xxx','password': 'xxxxx'}rs_login = self.client.post('url',headers=self.client.headers,json=payload)# 从登录接口返回值中获取token,添加至Content-Type请求头中self.client.headers['Authorization'] = 'Bearer ' + rs_login.json()['data']['access_token']print(self.client.headers)pass# @taskdef on_stop(self):pass# 在@task后添加(weight=权重值),若不填写(weight=权重值),只有task则默认的任务权重为1。注:(weight=权重值)要带上weight=,否则只有数值时,则这个数字将被解释为一个位置参数,而不是权重。@taskdef test_login(self):  # 登录接口self.client.headers = {'Content-Type': 'application/json'}payload = {'username': 'xxx','password': 'xxx'}rs_login = self.client.post('url',headers=self.client.headers,json=payload)self.client.headers['Authorization'] = 'Bearer ' + rs_login.json()['data']['access_token']@task(weight=3)def test_refresh(self):rs_rf0 = self.client.post('url',headers=self.client.headers)print(rs_rf0.json()['code'], '刷新操作')rs_rf1 = self.client.post('url',headers=self.client.headers,json={'测试数据': ["xxx"]})print(rs_rf1.json()['code'], '刷新操作2')@task(weight=2)def test_query(self):data1 = {'28C5363480B514FFA': '测试数据1','6440FBF646F0010FA': '测试数据2','642B972C2350035FA': '测试数据3','6444A4A83250001FA': '测试数据4','28C46609643A3EDFA': '测试数据5'}try:for id, msg in data1.items():rs_refresh1 = self.client.post('url',headers=self.client.headers,json={"测试数据"})print(rs_refresh1.json()['code'], msg, rs_refresh1.json()['msg'])except Exception as e:print(e)class WebsiteUser(UserBehavior):  # 定义一个HttpUser类,继承以上的UserBehavior任务类。wait_time = between(0.1, 1.0)  # 定义用户执行任务之间的等待时间,使用between函数指定等待时间范围为0.1秒到1秒之间。host = "url"  # 指定要测试的主机地址。min_wait = 1000  # 指定用户在执行任务之间的最小和最大等待时间,单位为毫秒。max_wait = 3000if __name__ == '__main__':os.system(r'locust -f 脚本路径 --host=测试地址 --web-host=web监控地址,一般为自己的主机ip,若不设置则默认为localhost --web-port=8089')

先做个基准测试,在小并发条件下,探测系统各性能指标表现,作为后续比对基础。

场景一:设置50并发,每秒增长用户数量为5

点击启动按钮后开始压测,在本页面即可查看监控各项性能数据和图标信息
在这里插入图片描述
在这里插入图片描述
download data - download report中可下载HTML格式的测试报告
在这里插入图片描述

三、分布式压测

3.1 说明

分布式压测是指使用多个节点或机器同时模拟大量并发用户进行性能测试的方法。每个节点负责模拟一部分用户,发送请求并记录性能数据,然后将数据汇总到一个中心节点进行分析和报告生成。

使用分布式压测的场景包括:

1、高并发负载测试:当系统需要处理大量并发用户时,使用分布式压测可以模拟真实的用户行为和流量模式,评估系统的性能和响应能力。这对于在线购物、社交媒体、电子支付等高流量应用特别重要。

2、弹性和扩展性测试:分布式压测可以模拟系统在不同负载下的性能表现,帮助确定系统的弹性和扩展性。通过增加节点,可以模拟更大规模的用户并发,测试系统在高负载下的稳定性和可扩展性。

3、负载均衡测试:在分布式系统中,负载均衡是重要的组成部分。使用分布式压测可以模拟多个节点同时向负载均衡器发送请求,评估负载均衡的性能和效果,确保系统能够平衡负载并提供高可用性。

4、容量规划和优化:通过分布式压测,可以确定系统的容量和性能瓶颈,帮助进行容量规划和优化。通过模拟大规模的并发用户,可以找到系统的瓶颈点,并采取相应的优化措施,提高系统的性能和稳定性。

3.2 实现方式

创建主节点(1个)和从节点脚本(可多个),主节点脚本主要要来监控,从节点脚本代码可主节点脚本代码一致,可根据实际需求修改压测接口,若要测试多个不同接口可在从节点脚本代码中修改或增加任务。

3.3示例代码

3.3.1主节点

import os
from locust import HttpUser, TaskSet, task# 定义任务类
class UserTask001(HttpUser):@task  # 申明需要执行的任务def get_index(self):self.client.get('/22')  # client是requests的对象@taskdef get_image(self):self.client.get('/s?ie=utf-8&wd=locust视频')# 执行任务类
class WebSiteUser(UserTask001):# tasks = [UserTask001]  # 定义需要执行的任务集min_wait = 1000  # 最小等待时间(思考时间)max_wait = 2000  # 最大等待时间(思考时间)host = 'http://www.baidu.com'  # 设定请求的域名if __name__=="__main__":#开启master模式os.system('locust -f D:\py_code\stress\master_node.py --master')

注:主节点的执行方式命令必须要加上参数–master

3.3.2从节点

import os
from locust import HttpUser, task# 定义任务类
class UserTask001(HttpUser):@task  # 申明需要执行的任务def get_index(self):self.client.get('/22')  # client是requests的对象@taskdef get_image(self):self.client.get('/s?ie=utf-8&wd=locust视频')# 执行任务类
class WebSiteUser(UserTask001):# tasks = [UserTask001]  # 定义需要执行的任务集min_wait = 1000  # 最小等待时间(思考时间)max_wait = 2000  # 最大等待时间(思考时间)host = 'http://www.baidu.com'  # 设定请求的域名if __name__=="__main__":#开启master模式os.system('locust -f D:\py_code\stress\secondary.py --worker')

注:主节点的执行方式命令必须要加上参数–worker,运行后可在主节点控制台查看详情,执行多个从节点脚本则会显示多个worker
在这里插入图片描述
web-ui监控页面详情
在这里插入图片描述
主节点主要用于监控从节点的执行情况,若主节点和从节点脚本分别在不同的测试机上,在执行脚本时需要加上定义的–web-host=IP,ip需对应才可连接。

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

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

相关文章

【高并发】高并发架构实战:从需求分析到系统设计

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 很多软件工程师的职业规划是成为架构师,但是要成为架构师很多时候要求先有架构设计经验,而不做架构师又怎么会有架构设计经验呢?那么要如何获得架构设…

【Unity3D 问题总结】☀️ | 解决LayoutGroup配合Content Size Fitter使用时发生子成员位置错乱问题

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

【LLM】金融大模型场景和大模型Lora微调实战

文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Reference 一、金融大模型背景 金融行业需要垂直领域LLM,因为存在金融安全和数据大多数存储在本地,在风控、精度、实…

更开放、更高性能、更具规模,闪马智能布局AGI时代

7月6日,2023世界人工智能大会(WAIC 2023)在上海盛大开幕。本届大会以“智联世界 生成未来”为主题,聚焦通用人工智能发展,共话产业新未来。 8日上午,由上海闪马智能科技有限公司(下称“闪马智能…

声网 Agora音视频uniapp插件跑通详解

一、前言 在使用声网SDK做音视频会议开发时, 通过声网官方论坛 了解到,声网是提供uniapp插件的,只是在官方文档中不是很容易找到。 插件地址如下: Agora音视频插件 Agora音视频插件(JS) 本文讲解如何跑通演示示例 二、跑通Demo 2.1 环境安装: 参考: 2. 通过vue-…

在Excel电子表格中用公式实现最最简易的标签套打

每月要为单位新入职员工打印标签贴纸,贴于档案之上,之前是用Excel建立一张表,通过拖动单元格大小,调整文本位置,实现标签贴纸的打印功能。 后来,公司每月都会新招入一批员工,每次打印贴纸时&…

漏洞深度分析 | CVE-2023-36053-Django 表达式拒绝服务

​ 项目介绍 Django 是一个高级 Python Web 框架,鼓励快速开发和简洁、务实的设计。它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费且开源的。 项目地址…

数字化时代,企业的数据指标体系

在社会节奏越来越快,处理的信息量越来越大的今天,传统的经营管理模式已经适应不了当下的环境。而由经验、情感组成的业务调整以及决策能力不再能正确指导企业走在正确的方向上,所以数据就成为了企业新的业务优化调整和支撑企业高层管理进行决…

苹果Mac动态壁纸软件Dynamic Wallpaper

Dynamic Wallpaper 是一款桌面壁纸管理软件,它提供了动态壁纸的功能。动态壁纸是指可以在一段时间内自动更改外观的壁纸,比如根据时间或其他条件进行变化。这种壁纸可以为用户提供更加生动有趣的桌面体验。 Dynamic Wallpaper 软件具有以下特点和功能&am…

vue3+element+sortablejs实现table表格 行列动态拖拽

vue3elementsortablejs实现table动态拖拽 1.第一步我们要安装sortablejs依赖2.在我们需要的组件中引入3.完整代码4.效果 1.第一步我们要安装sortablejs依赖 去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片. npm install so…

【LeetCode】594. 最长和谐子序列

594. 最长和谐子序列(简单) 方法:哈希表计数 思路 题目规定的「和谐子序列」中的最值差值正好为 1,因而子序列排序后必然符合[a,a,.., a 1,a1]形式,即符合条件的和谐子序列长度为相邻两数(差值为 1)的出现次数之和。…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…