当前位置: 首页 > article >正文

性能测试-jmeter实战1

课程:B站大学
记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师

性能测试-jmeter实战1

  • 为什么需要性能测试呢?
  • 性能测试的作用?
  • 性能测试体系
    • 性能测试基础
    • 性能测试工具
    • 性能监控体系
    • 全链路自动化测试
  • 性能测试与分析优化
  • 性能测试标准
  • 流行性能压测工具介绍
    • 1、Aapache AB工具
    • 2、Aapache JMeter工具
      • 核心功能
      • 常见使用场景
      • 典型组件结构
      • 实战场景(接口压测)
    • 3、Grinder工具
      • 组件结构
      • 实战工作流程
    • 4、Locust工具
      • 核心特点
      • 实战压测 GET 接口
    • 实践是检验真理的唯一标准


为什么需要性能测试呢?

目的是确保系统在高并发或大数据量下依然响应快速、稳定运行,避免系统崩溃或卡顿,保障用户体验和业务连续性。
凡是软件就一定存在性能瓶颈,只有在不断改进性能中,软件才会越走越远!

性能测试的作用?

有效的性能测试能给研发、运维团队提供有效的容量规划能力、系统风险识别、系统瓶颈识别、性能调优指导。

性能测试体系

主要分为:

性能测试基础

  • 性能测试标准流程
  • 性能测试核心指标
  • 性能测试目的/方法
  • 服务基础知识:Nginx、WebServer、DB、Cache、MQ、微服务等等

性能测试工具

  • 工具高级功能、插件、条件处理、脚本编程
  • 工具基础使用&调试
  • 工具高阶开发、多谢语言支撑
  • 性能测试源码&平台开发
  • 性能测试分布式运行

性能监控体系

  • 主机监控:CPU Memory NetWork
  • 应用指标监控、QPS、并发
  • 存储监控、Mysql、Redis、Kafka
  • 全链路可观测、SkyWalking、Zepkin
  • 性能调优,JVM,系统调优

全链路自动化测试

  • 线上服务& 数据隔离
  • 用户场景流量生成
  • 压测方案&止损方案

在这里插入图片描述

性能测试与分析优化

一张图就说明了,掌握性能测试必须掌握的技术栈如下图:
在这里插入图片描述

性能测试标准

这张性能测试图表通过三条关键曲线(资源利用率U、吞吐量X、响应时间R)直观展示了系统在不同并发用户数下的表现。

1、曲线趋势分析​​

  • ​​紫色U曲线(资源利用率)​​:随并发数增加持续上升,最终趋于平缓(资源饱和)。
  • 绿色X曲线(吞吐量)​​:先线性增长(轻载期),达到峰值后下降(系统过载)。
  • ​​红色R曲线(响应时间)​​:初期平稳,超过最佳并发数后指数级上升(用户体验恶化)。
    ​​2、关键区域划分​​
  • 轻载区(Light Load)​​:资源充足,吞吐量与并发数成正比,响应时间稳定。
  • 最佳并发数(Optimum)​​:吞吐量达到峰值,资源利用率合理,响应时间可控。
  • 重载区(Heavy Load)​​:资源饱和(U曲线平缓),吞吐量下降(X曲线拐点),响应时间激增(R曲线陡峭)。
  • ​​崩溃区(Buckle Zone)​​:系统过载,吞吐量骤降,响应时间不可接受,用户受影响明显。

​​3、测试意义​​

  • 确定系统性能拐点(最佳/最大并发数),为容量规划提供依据。
  • 揭示资源瓶颈(如CPU/内存饱和导致吞吐量下降)和用户体验临界点(响应时间突增)。

在这里插入图片描述

流行性能压测工具介绍

1、Aapache AB工具

  • Apache HTTP Server 自带的一个轻量级命令行性能测试工具,常用于对 Web 服务器进行简单的压力测试和基准测试。
    主要用于linux服务端,无图形化
    基本命令示例:
ab -n 1000 -c 100 http://example.com/
命令解析:
-n 1000:总共发送 1000 个请求
-c 100:同时开启 100 个并发请求
http://example.com/:测试目标 URL

常用参数:

-n	请求总数
-c	并发请求数
-t	测试时长(单位秒)
-p	发送 POST 请求的文件
-T	指定 Content-Type(用于 POST)
-H	自定义请求头
-k	使用 HTTP Keep-Alive
-A	添加用户名和密码(Basic Auth)

输出指标说明(部分):

指标名称	含义说明
Requests per second	每秒处理请求数(TPS),反映服务吞吐能力
Time per request	单个请求平均耗时
Percentage served within	表示百分之几的请求在某个时间内返回(响应时间分布)
Failed requests	失败请求数量,通常关注是否为 0

场景:适用于 接口层 和 静态页面 的基础性能评估

2、Aapache JMeter工具

  • 广泛用于对 Web 应用、接口、数据库等进行压力测试、负载测试和功能测试。
    支持协议 HTTP、HTTPS、SOAP、REST、JDBC、FTP、MQ、TCP、WebSocket 等

核心功能

  • 压力测试 模拟成千上万个并发用户访问系统
  • 接口测试 可用于 HTTP/HTTPS 接口功能测试和性能测试
  • 分布式测试 支持 master-slave 模式,执行分布式压力测试
  • 报表生成 自动生成 HTML 格式的图形化测试报告 参数化/断言 支持读取 CSV 文件作为测试数据,支持响应断言(内容、状态码等)
  • 脚本可视化 提供可视化测试计划配置界面,便于拖拽式建模
  • 插件丰富 拥有大量社区插件(如 JMeter Plugin Manager)

常见使用场景

  • 网站首页或接口的并发访问能力测试
  • 用户登录/下单/支付流程的接口压力测试
  • 数据库 SQL 查询性能分析
  • 消息队列、FTP 服务性能评估
  • 接口自动化测试(可集成 CI/CD)

典型组件结构

一个完整的 JMeter 测试计划通常包括:

测试计划(Test Plan)
└── 线程组(Thread Group)├── Sampler(采样器,如 HTTP 请求)├── Listener(监听器,如查看结果树、汇总报告)├── Assertion(断言,如响应断言)├── Pre/Post Processor(前置/后置处理器)└── Config Element(配置元素,如请求默认值、CSV 数据集)

实战场景(接口压测)

  • 添加线程组,设置并发数为 100,循环 10 次
  • 添加 HTTP 请求,配置目标接口和参数
  • 添加响应断言,验证接口响应码是否为 200
  • 添加监听器,查看响应时间、错误率、TPS 等指标
  • 执行并查看图形报告或导出 HTML 报告

3、Grinder工具

  • 适用于对 Web 应用、HTTP 服务、数据库、Socket、RMI 等进行压力测试。它由 Grinder Project 开发,灵活性强,支持通过 Jython(Python for Java)脚本编写测试逻辑。

组件结构

  • Agent:执行测试的负载生成器(可部署多台)
  • Console:控制器/监控器,负责启动、停止测试、收集结果
  • Script:基于 Jython 编写的脚本,定义测试流程和逻辑
  • Properties 文件:配置参数(如线程数、脚本路径、目标地址等)

实战工作流程

1、编写 test_script.py,模拟请求逻辑

2、编辑 grinder.properties 配置文件,设置线程数、测试目标等

3、启动 Console:java net.grinder.Console

4、启动 Agent:java net.grinder.Grinder grinder.properties

5、在 Console 中开始测试,实时查看并收集报告
比如下面得http请求:

from net.grinder.script import Test
from net.grinder.plugin.http import HTTPRequest
from net.grinder.script.Grinder import grinderrequest = HTTPRequest()
test = Test(1, "Test HTTP Request")
test.record(request)class TestRunner:def __call__(self):result = request.GET("http://example.com")

使用得场景:

  • 大型系统的分布式性能测试
  • 需要高度定制协议、逻辑的性能测试
  • 企业 Java 项目的接口、数据库、Socket 等多协议性能验证
  • 对资源使用、并发控制、流程自定义要求高的性能测试场景

4、Locust工具

  • 用于模拟用户行为并对系统进行负载测试。相比 JMeter、AB 等工具,Locust 更轻量、可编程性强、易读易写,广泛应用于 Web 系统、API 接口的压力测试。

核心特点

特点说明
Python 脚本驱动测试逻辑通过 Python 编写,灵活可编程
Web UI 控制面板可在浏览器中设置并发数、启动压测,实时查看请求数、失败率等指标
支持分布式压测可轻松扩展为分布式部署,应对大规模并发测试
清晰的用户行为建模以“用户行为”为核心概念,符合真实业务建模方式
易集成、低门槛Python 编写,易上手,便于与测试框架和自动化流程集成

实战压测 GET 接口

from locust import HttpUser, task, betweenclass WebsiteUser(HttpUser):wait_time = between(1, 3)  # 模拟用户行为等待时间(1-3秒)@taskdef index(self):self.client.get("/")

运行命令:

locust -f locustfile.py --host=http://example.com

控制台输出指标,但是这个使用较少,一般主要用于接口性能测试或者自动化测试
目前国内主要的性能测试工具还是必选Jmeter
在这里插入图片描述
下一章分析性能监控工具

实践是检验真理的唯一标准

相关文章:

性能测试-jmeter实战1

课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢?性能测试的作用?性能测试体系性能测试基础性能测试工具性能监控…...

汽车高速通信的EMC挑战

随着“软件定义汽车”的理念全面渗透,中国汽车行业正加速向集中式电子电气架构(E/E架构)转型。SOA(面向服务的架构)理念推动下,整车开始围绕中央计算平台(OIB)与分布式域控制器(VIU)构建,硬件平台具备前所未有的数据处理能力,能掌控整车控制与实时感知决策。 一、…...

[SC]SystemC在CPU/GPU验证中的应用(五)

SystemC在CPU/GPU验证中的应用(五) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...

[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)

题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1​,a2​,⋯,an​ 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai​≥ai−1​>0。小明必须先后跳跃到每个检查…...

现代网络安全攻防技术与发展现状

1. 引言 随着数字化转型进程的加速,全球信息化程度不断深入,网络安全问题日益凸显。根据最新的统计数据,2022年全球范围内的网络攻击事件较前一年增长了约41%,造成的经济损失高达超过6万亿美元。在这个背景下,了解现代…...

杏仁海棠花饼的学习日记第十四天CSS

一,前言 第二天,今天看CSS。 二,CSS简介及导入方式 CSS简介 CSS(层叠样式表,Cascading Style Sheets)是一种用于描述 HTML 或 XML(包括 SVG、XHTML 等)文档呈现效果的样式语言。…...

ESP8266远程控制:实现网络通信与设备控制

概述: 最近一直在弄esp8266的网络通信,但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后,在很远的地方使用网络将其关掉 在网上找了两个教程都有程序,都跑通了 第一个 第二个找不到了,但是程序有 CSDN上放文…...

RabbitMQ监控:关键技术、技巧与最佳实践

RabbitMQ作为企业级消息中间件的核心组件,其稳定性和性能直接影响分布式系统的可靠性。有效的监控不仅能帮助快速定位问题,还能优化系统资源分配,预防潜在故障。本文基于RabbitMQ官方文档,深入探讨其监控的技术方案、实践技巧及最…...

【机器学习基础】机器学习入门核心算法:隐马尔可夫模型 (HMM)

机器学习入门核心算法:隐马尔可夫模型 (HMM) 一、算法逻辑与核心思想二、算法原理与数学推导核心问题与算法推导 三、模型评估四、应用案例1. 语音识别 (Speech Recognition)2. 自然语言处理 (Natural Language Processing - NLP)3. 手写体识…...

zookeeper 操作总结

zookeeper 中的节点类型 节点类型命令选项说明‌持久节点‌无选项(默认)永久存在,除非手动删除。‌临时节点‌-e与客户端会话绑定,会话结束自动删除(‌不能有子节点‌)。‌顺序节点‌-s节点名自动追加递增…...

golang 实现基于redis的并行流量控制(计数锁)

在业务开发中,有时需要对某个操作在整个集群中限制并发度,例如限制大模型对话的并行数。基于redis zset实现计数锁,做个笔记。 关键词:并行流量控制、计数锁 package redisutilimport ("context""fmt""…...

Leetcode 2819. 购买巧克力后的最小相对损失

1.题目基本信息 1.1.题目描述 现给定一个整数数组 prices,表示巧克力的价格;以及一个二维整数数组 queries,其中 queries[i] [ki, mi]。 Alice 和 Bob 去买巧克力,Alice 提出了一种付款方式,而 Bob 同意了。 对于…...

AI炼丹日志-25 - OpenAI 开源的编码助手 Codex 上手指南

点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…...

AnyConv OGG 转换器:轻松转换音频格式

在数字音频世界中,不同的文件格式适用于不同的场景和设备。OGG 是一种开放、免费的音频格式,具有高压缩率和良好的音质。然而,有时我们需要将 OGG 文件转换为其他格式,或者将其他格式转换为 OGG。这就是 AnyConv OGG 转换器发挥作用的地方。 什么是 AnyConv OGG 转换器? …...

C# 类和继承(使用基类的引用)

使用基类的引用 派生类的实例由基类的实例和派生类新增的成员组成。派生类的引用指向整个类对象,包括 基类部分。 如果有一个派生类对象的引用,就可以获取该对象基类部分的引用(使用类型转换运算符把 该引用转换为基类类型)。类…...

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信,设计的接…...

Linux gron 命令使用详解

简介 gron 是一个独特的命令行工具,用于将 JSON 数据转换为离散的、易于 grep 处理的赋值语句格式。它的名字来源于 “grepable on” 或 “grepable JSON”,主要解决在命令行中处理复杂 JSON 数据的难题。 核心价值 gron 的核心是将 JSON 数据展平为类…...

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址:Nginx--手写脚本压缩和切分日志(也适用于docker)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍nginx如何手写脚本压缩和切分日志。 1.创建切分日志的脚本 创建脚本文件:/work/tmp/nginx-log_sh(后边要用run-…...

OpenCv高阶(十八)——dlib人脸检测与识别

文章目录 一、dlib库是什么?二、opencv库与dlib库的优缺点对比1、opencv优缺点2、dlib库优缺点 三、dlib库的安装1、在线安装2、本地安装 四、dlib库的人脸检测器1. 基于 HOG 的检测器2. 基于 CNN 的检测器 五、dlib人脸检测的简单使用1、导入必要库2、初始化人脸检…...

中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航

作者:Hengxing Cai 1 , 2 ^{1,2} 1,2, Jinhan Dong 2 , 3 ^{2,3} 2,3, Jingjun Tan 1 ^{1} 1, Jingcheng Deng 4 ^{4} 4, Sihang Li 2 ^{2} 2, Zhifeng Gao 2 ^{2} 2, Haidong Wang 1 ^{1} 1, Zicheng Su 5 ^{5} 5, Agachai Sumalee 6 ^{6} 6, Renxin Zhong 1 ^{1} …...

WIN11+CUDA11.8+VS2019配置BundleFusion

参考: BundleFusion:VS2019 2017 ,CUDA11.5,win11,Realsense D435i离线数据包跑通,环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境:Win 11…...

WPF prism

Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件&#xff0c;添加 prism 命名空间, 继承由 Application → PrismApplication&#xff0c;删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…...

实时同步缓存,与阶段性同步缓存——补充理解《补充》

根据 Redis 缓存的数据与 DBMS 中数据的同步性划分&#xff0c;缓存一般可划分为两类&#xff1a;实时同步缓存&#xff0c;与阶段性同步缓存。 实时同步缓存是指&#xff0c;DBMS 中数据更新后&#xff0c;Redis 缓存中的存放的相关数据会被立即清 除&#xff0c;以促使再有对…...

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…...

Mobaxterm解锁Docker

Mobaxterm是一款功能强大的终端模拟器和SSH客户端&#xff0c;它支持Windows、Linux和Mac操作系统&#xff0c;对于使用Docker的开发者和运维人员来说&#xff0c;Mobaxterm是一个非常有用的工具。本文将深入解析Mobaxterm&#xff0c;并分享一些使用Docker时的高效技巧。 Mob…...

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…...

【JavaEE】Spring事务

目录 一、事务简介二、Spring事务的实现2.1 事务的操作2.2 分类2.2.1 Spring编程式事务2.2.2 Spring 声明式事务 Transactional2.2.2.1 Transactional 详解2.2.2.1.1 rollbackFor2.2.2.1.2 Isolation2.2.2.1.3 propagation 一、事务简介 事务&#xff1a;事务是⼀组操作的集合…...

Flink 状态管理深度解析:类型与后端的全面探索

在流处理场景中,数据往往是连续且无界的,为了准确处理这些数据并维持计算的连续性,Flink 引入了状态管理机制。Flink 的状态管理包含状态类型和状态后端两大部分,它们相辅相成,共同为作业的可靠性、容错性和性能提供保障。接下来,我们将深入探究 Flink 状态管理中状态类型…...

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…...

R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题

有不少同学是Mac系统的&#xff0c;分析过程中会发现部分R包总是安装不成功&#xff0c;这是因为部分R包基于windowsx86架构编译的&#xff0c;最常见的就是含 C/C/Fortran 的包&#xff0c;对于初学者都是建议linux和win去做&#xff0c;Windows 通常直接安装预编译好的二进制…...