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,一经查实,立即删除!

相关文章

远程监控高并发高吞吐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&…

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…

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

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

JIT耗时优化

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

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。 很明显&…

Node学习笔记之MySQL基本使用

使用 SQL 管理数据库 其实写接口简单来说就是操作数据库数据,所以我们需要学会数据库的增、删、查、改等基本操作 1. 什么是 SQL SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据…

(2)Nmap

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)BurpsuiteAWD比赛(1)AWD入门攻略大纲 1.工具简介 (1)定义 ①功能 网络扫描和嗅探工具包,三个主要基本功能: 探测一组主机是否在线 扫描主机端口、嗅探所提供的网络服务 推断出主…

Keil实现Flash升级跳转(STM32/GD32/HC32)

编写BOOT程序,和APP程序。 BOOT程序检查OTA参数,执行OTA升级,然后跳转到APP代码。 记录一下跳转APP需要修改得东西: 1、BOOT程序 修改跳转地址 先检查APP地址是否有效 然后关闭外设 反初始化 设置MSP指针,进行跳转 …

ZooKeeper+HBase分布式集群环境搭建

安装版本:hadoop-2.10.1、zookeeper-3.4.12、hbase-2.3.1 一、zookeeper集群搭建与配置 1.下载zookeeper安装包 2.解压移动zookeeper 3.修改配置文件(创建文件夹) 4.进入conf/ 5.修改zoo.cfg文件 6.进入/usr/local/zookeeper-3.4.12/zkdata…

Vue 模板字符串碰到script无法识别,报错Parsing error: Unterminated template.

需求: 将js代码完整的显示在界面上,包括标签 代码如下: 报错信息如下: 我们在上图中可以看到模板字符串加入了script标签后会报错 原因:运行JS的时候由上至下,先识别模板字符串里面的script标签&#xf…