Locust负载测试工具实操

图片

本中介绍如何使用Locust为开发的服务/网站执行负载测试。

Locust 是一个开源负载测试工具,可以通过 Python 代码构造来定义用户行为,避免混乱的 UI 和臃肿的 XML 配置。

步骤

  • 设置Locust。

  • 在简单的 HTTP 服务上模拟基本负载测试。

准备条件

  • Python(+ pip 用于安装 locust 包)

  • 任何模拟负载测试的 HTTP 服务。(开发一个 Spring Boot HTTP 服务作为演示的被测对象)

Spring Boot HTTP 服务

我们通过 Spring Boot 开发了一个简单的 REST API 格式的接口/greet,它不执行 CPU 或 I/O 密集型工作【非事务性接口】,而只是返回一个字符串。将该服务在端口 8080 上本地运行。

Spring Boot HTTP 代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
public class SpringBootLoadServiceApplication {public static void main(String[] args) {SpringApplication.run(SpringBootLoadServiceApplication.class, args);}}@RestController
class RandomResource {@GetMapping(value = "/greet")public String greet() {return "Locust Load Test.";}
}

设置 Locust 脚本文件

现在我们将编写Python 代码(springboot_locust.py)来模拟负载测试,该测试脚本将打到本地8080端点,如下所示代码片段

from locust import HttpUser, task, between #this is self-explanatory we importing required classes, function from locust module.class SpringBootUser(HttpUser): #Simulates a single Real-world User. HttpUser class is extended so we provide what task the user will do.'''this won't take effect in our scenario, as this attribute is optional and specify wait time randomly picked between parameters passed (1-3 seconds) between multiple @task executed. We have only one @task executed'''wait_time = between(1, 3) '''This is main core functionality of locust. @task are treated as a singel http request made. We can multiple have @task. In below we are going to hit /greet endpoint on our localhost'''@taskdef hello_world(self):self.client.get("/greet")

添加注释以确保代码是不言自明的。我们只是定义一个任务,一个任务是一个线程的单次执行。我们也可以有多个任务,以模拟流程和权重来确定它们的执行顺序,否则它们将被随机选取。

现在我们将开始 Locust 测试,通过执行以下命令来启动 Locust Web UI:

locust -f springboot_locust.py

默认情况下,它将在端口 8089 上启动 Locust Web UI 并显示如下:

图片

执行负载测试

我们将执行 2 次测试,一项有 100 个用户,另一项有 1000 个用户。我们将每秒生成 5 个和 20 个用户,直到分别达到 100 和 1000 个最终用户目标。

100 个用户的负载,每秒生成 5 个用户

我们将在填充以下值后 Start Swarming:Locust 逐步增加到 100 个用户,每个用户向 API 发送一个请求

图片

从下面的图表中,我们可以看到,随着负载增加到 100 个用户,其中平均响应时间保持在 2ms,而 95% 百分位响应时间约为 3 毫秒。因此我们可以看到,在处理 100 个用户请求时,用户没有出现任何峰值。

图片

每个测试都有不同的选项卡,如下所示,用于显示测试的实时结果,并且大多数选项卡都是不言自明的。主要使用统计、图表(实时结果)和下载数据(用于共享测试后结果)。

图片

每秒生成 20 个用户,负载 1000 个用户

我们现在将模拟 1000 个用户测试,但每秒生成 20 个用户测试服务的性能:

图片

现在我们看到,有 1000 个用户正在请求 API:

图片

针对测试结果稳定之前,需要给予服务持续的压力,以逐步增加到 1000 个用户。
从下面的图表中,我们可以看到当我们的服务负载以用户增加和请求触发的形式增加时,Locust如何捕获响应时间。随着 API 负载的增加,我们看到中位数以及 95% 百分位响应时间有所增加。

图片

下面结果展示了随着用户持续增加,我们开发的服务响应时间:

  • 对于少于400 运行的用户,我们的中值响应时间为2 毫秒,95% 百分位数响应为5 毫秒。

  • 对于少于450-675 运行的用户,我们的中值响应时间为3 毫秒,95% 百分位数响应为7 毫秒。

  • 对于少于750-1000 运行的用户,我们的中位响应时间为4-5 毫秒,95% 百分位数响应为10-12 毫秒。

因此我们可以看到 Locust 如何提供实时图表来捕获服务的响应时间,这些服务根据负载生成的行为有所不同。显然,上述服务是一个虚拟服务,但在现实场景中,它将有助于识别在负载下行为异常的服务。

当然,这只是一个测试用例,但Locust的用途远不止于此。上述内容可以帮助大家在本地进行基本的负载测试实操。

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

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

相关文章

【限时免费】20天拿下华为OD笔试之 【单调栈】2023B-阿里巴巴找黄金宝箱(4)【欧弟算法】全网注释最详细分类最全的华为OD真题题解

【单调栈】2023B-阿里巴巴找黄金宝箱(4) 题目描述与示例 一贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从 0-N 的子,每个箱子上面有一人数字,箱子排列成一个环,编号最大的箱子的…

远程监控高并发高吞吐java进程

文章目录 背景工具jconsole和jvisualvm 压测实战以太坊Java程序监控1.使用jconsole监控2.使用jvisualvm监控 问题分析堆内存使用异常通过调整内存策略来应对: 交易虚增问题 背景 作为使用java技术栈的金融类公司,确保Java程序在生产环境中的稳定性和性能…

2023年【北京市安全员-B证】考试试卷及北京市安全员-B证模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-B证考试试卷考前必练!安全生产模拟考试一点通每个月更新北京市安全员-B证模拟考试题题目及答案!多做几遍,其实通过北京市安全员-B证在线考试很简单。 1、【多选题】《…

JVM(Java Virtual Machine)垃圾收集算法篇

前言 本文参考《深入理解Java虚拟机》,主要介绍GC相关的算法,引用计数法、可达性分析算法、垃圾收集算法(分代收集理论,标记-清除/整理/复制) 本系列其他文章链接: JVM(Java Virtual Machine&…

leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解

leetcode 2525 根据规则将箱子分类 题目 给你四个整数 length ,width ,height 和 mass ,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。 如果满足以下条件,那么箱子是 “Bulky” 的&#…

macrodata数据集在Python统计建模和计量经济学中的应用

目录 一、数据介绍二、应用三、statsmodels 统计模块四、使用 statsmodels 统计模块分析 macrodata.csv 数据集参考 一、数据介绍 macrodata.csv是一个示例数据集,通常用于统计分析和计量经济学中的教育和训练目的。这个数据集通常包括以下列: year&am…

深度学习八股文: 模型训练全过程及各阶段的原因

深度学习模型的训练全过程通常包括以下步骤: 数据准备: 首先,需要准备用于训练的数据集。数据集应包含输入特征(通常是数值或图像数据)和相应的目标标签。数据通常需要被分为训练集、验证集和测试集,以便评…

STM32使用WWDG窗口看门狗

1 WWDG 介绍 1.1 WWDG 简介 窗口看门狗 WWDG 其实和独立看门狗类似,它是一个 7 位递减计数器不断的往下递减计数, 当减到一个固定值 0X40 时还不喂狗的话,产生一个 MCU 复位,这个值叫窗口的下限,是固定的值&#xf…

支持语音与视频即时通讯项目杂记(二)

目录 概念: 视频帧(Video Frame)是组成视频的基本单元。它可以被视为一幅静止的图像,它在一定的时间间隔内连续播放,从而形成了流畅的视频。 Changes to Qt Multimedia New features in Qt 6 Removed features C…

居民小区电动汽车有序充电策略研究

摘 要:针对电动汽车在居民小区无序充电对电网系统产生严重隐患及充电间时过长问题,提出一种采用延迟充电的电动汽车有序充电控制策略,并在分析国内外电动汽车有序充电的研究现状后,设计了居民小区电动汽车有序充电策略的总体框架。…

android利用FFmpeg进行视频转换

大致思路:首先安装FFmpeg库到windows电脑上,先测试命令行工具是否可以使用(需要先配置环境),之后再集成到android程序中。 一些命令: 转化为流文件: ffmpeg -i input.mp4 -codec copy -bsf:v …

JIT耗时优化

优质博文:IT-BLOG-CN 一、背景 业务流量突增,机器直接接入大量流量QPS2000,JIT和GC会消耗太多CPU资源,导致1-2分钟时间内的请求超时导致异常,因此采用流量预热的方式,让机器逐步接入流量,需要预…

2023-10-20 游戏开发-cocos旧版本2.0.6-下载地址-记录

官方下载地址: Cocos Creator 下载 - 轻量高效的开发引擎 Tags cocos/cocos-engine GitHub cocos creater 旧版本: Tool/Package/REAMDE.md adofsauron/CocosCreatorFAQ - Gitee.com v2.0.6版本: Mac版:http://cocos2d-x.org/filedown/CocosStudioForMac-v2.0.…

vscode类似GitHub Copilot的插件推荐

由于GitHub Copilot前段时间学生认证的账号掉了很多,某宝激活也是价格翻了几倍,而却,拿来用一天就掉线,可以试试同类免费的插件哦。 例如:TabNine,下载插件后,他会提示你登录,直接登…

spring6-国际化:i18n | 数据校验:Validation

文章目录 1、国际化:i18n1.1、i18n概述1.2、Java国际化1.3、Spring6国际化1.3.1、MessageSource接口1.3.2、使用Spring6国际化 2、数据校验:Validation2.1、Spring Validation概述2.2、实验一:通过Validator接口实现2.3、实验二:B…

关于计算机找不到vcomp140.dll无法继续执行怎么修复

在计算机使用过程中,我们可能会遇到各种问题,其中之一就是vcomp140.dll文件丢失。vcomp140.dll是一个动态链接库文件,它通常用于支持软件运行和系统功能。当这个文件丢失时,可能会导致程序无法正常运行,甚至系统出现错…

分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiLSTM数据…

大厂秋招真题【贪心】大疆20230813秋招T1-矩形田地

题目描述与示例 题目描述 给定一个矩形田地,其高度为 h 且宽度为 w。同时,你将获得两个整数数组 horizontalCutting 和 verticalCutting,其中 horizontalCutting[i] 表示从矩形田地顶部到第 i 个水平切口的距离,verticalCutting…

使用CountdownLatch和线程池批量处理http请求,并处理响应数据

背景和问题 ​ 背景:最近项目的一个接口数据,需要去请求其他多个服务器的数据,然后统一返回; 问题点:如果遍历所有的服务器地址,然后串行请求就会出现请求时间过长,加入需要请求十个服务器&…

解决谷歌学术bib信息不全的问题

在我们撰写学术论文时,经常需要引用参考文献。如果用latex撰写论文,势必会用到文献的bib信息,大部分的教程都会告诉我们去google scholar上去搜索。 一、问题描述 搜索一篇文章,然后选择cite,再选择bib。 很明显&…