课程: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
下一章分析性能监控工具