性能测试-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
在这里插入图片描述
下一章分析性能监控工具

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

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

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

相关文章

HTML、XML、JSON 是什么?有什么区别?又是做什么的?

在学习前端开发或者理解互联网工作原理的过程中,我们经常会遇到三个非常重要的概念:HTML、XML 和 JSON。它们看起来有点像,但其实干的事情完全不同。 🏁 一、他们是谁?什么时候诞生的? 名称全称诞生时间谁…

HTML5 全面知识点总结

一、HTML 基础概念 HTML:超文本标记语言,用于创建网页和 Web 应用的结构。 超文本:可以包含文字、图片、音频、视频、链接等多种媒体。 标记语言:通过标签标记网页的各个部分。 二、HTML5 的新特性(区别于 HTML4&am…

记录一个难崩的bug

1.后端配置了 Filter 过滤器,如果再配置了Configuration ,那么会出现冲突吗? 过滤器与Configuration类本身无直接冲突,但需注意注册机制、执行顺序和依赖管理。通过显式控制过滤器的注册方式和优先级,结合Spring Security的链式配…

RabbitMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 选型指南(二)

四、三者性能大比拼 4.1 吞吐量 吞吐量是衡量消息队列处理能力的重要指标,它反映了在单位时间内消息队列能够处理的消息数量。在这方面,Kafka 表现最为出色,其独特的设计使其能够轻松处理每秒数百万条消息 。Kafka 采用分布式架构和分区机制…

【C】箭头运算符

在C语言中,p_tone->power_off 是一种通过指针访问结构体成员的方法,称为箭头运算符(->)。它主要用于以下场景: 1. 语法解释 p_tone:是一个指向结构体(或联合体)的指针。powe…

【Unity】 HTFramework框架(六十六)缺省的运行时组件检视器

更新日期:2025年5月29日。 Github 仓库:https://github.com/SaiTingHu/HTFramework Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework 索引 一、缺省的运行时组件检视器1.自定义运行时组件检视器 二、使用缺省的运行时组件检视器1.定义组…

AI和大数据:是工具,还是操控人心的“隐形之手”?

AI和大数据:是工具,还是操控人心的“隐形之手”? 开场白:聊点现实的 在这个数据至上的时代,我们的生活被AI和大数据悄然改变。从电商推荐、短视频算法,到招聘筛选、智慧城市,它们像一个贴心的…

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件 文章目录 k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter简介二、kubernetes-event-exporter实战部署1. 创建Namespace&a…

Apache 高级配置实战:从连接保持到日志分析的完整指南

Apache 高级配置实战:从连接保持到日志分析的完整指南 前言 最近在深入学习 Apache 服务器配置时,发现很多朋友对 Apache 的高级功能还不够了解。作为一个在运维路上摸爬滚打的技术人,我想把这些实用的配置技巧分享给大家。今天这篇文章会带…

【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程

系列文章目录 文章目录 系列文章目录前言特征图和注意力图的尺寸差异原因在Break-a-Scene中的具体实现总结 前言 特征图 (Latent) 尺寸和注意力图(attention map)尺寸在扩散模型中有差异,是由于模型架构和注意力机制的特性决定的。 特征图和注意力图的尺寸差异原…

【监控】Prometheus+Grafana 构建可视化监控

在云原生和微服务架构盛行的今天,监控系统已成为保障业务稳定性的核心基础设施。作为监控领域的标杆工具,Prometheus和Grafana凭借其高效的数据采集、灵活的可视化能力,成为运维和开发团队的“标配”。 一、Prometheus Prometheus诞生于2012…

替代 WPS 的新思路?快速将 Word 转为图片 PDF

在这个数字化办公日益普及的时代,越来越多的人开始关注文档处理工具的功能与体验。当我们习惯了某些便捷操作时,却发现一些常用功能正逐渐变为付费项目——比如 WPS 中的一项实用功能也开始收费了。 这款工具最特别的地方在于,可以直接把 W…

CodeTop之数组中的第K个最大的元素

题目链接 215. 数组中的第K个最大元素 - 力扣(LeetCode) 题目解析 算法原理 解法一: 直接理由java内部的排序函数,Arrays.sort()进行排序, 然后我们直接返回第k个最大的元素 nums[nums.length-k] 解法二: 使用堆 我们先把所有元素丢到大根堆里面…

AI任务相关解决方案1-基于NLP的3种模型实现实体识别,以及对比分析(包括基于规则的方法、CRF模型和BERT微调模型)

大家好,我是微学AI,今天给大家介绍一下AI任务相关解决方案1-基于NLP的3种模型实现实体识别,以及对比分析。本文将深入探讨三种不同的命名实体识别(NER)方法,包括基于规则的方法、CRF模型和BERT微调模型,用于识别文本中的地名(LOC)、机构名称(ORG)和人名(PER)实体。通过系统…

IP动态伪装开关

IP动态伪装开关 在OpenWrt系统中,IP动态伪装(IP Masquerading)是一种网络地址转换(NAT)技术,用于在私有网络和公共网络之间转换IP地址。它通常用于允许多个设备共享单个公共IP地址访问互联网。以下是关于O…

【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解

全局优化 mysql server参数 1. max_connections(最大连接数) 含义:MySQL 服务允许的最大并发连接数(包括正在使用和空闲的连接)。超过此限制时,新连接会被拒绝(报错 Too many connections&am…

VS Code 插件 Git History Diff

插件名 进命令行,进Git自己那个分支 查看分支 提交到Git的后想再把另一个也提交到那个分支,用这个命令

Shell脚本中的常用命令

一.设置主机名称 文件设置 文件开机时已读取所以要重新进入 命令更改(即使生效) 二.网络管理命令 1.查看网卡命令 设置网卡 1)DHCP工作模式 2)静态IP 3)修改网卡信息 三.简单处理字符 1.打印连续数字 连续打印3个数字 指定打…

C++ 中 std::wstring::c_str() 的潜在风险与安全使用指南

一、问题背景 在开发过程中,我们经常会遇到不同接口之间的数据传递问题。例如,当调用某个接口时,需要传入一个字符串指针作为数据接收的缓冲区,但外围接口使用的是 std::wstring 类型。此时,如果直接将 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解决方法: 1. npm cache clean --force 2.临时切换到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切换回镜像源