性能测试-jmeter实战1

发布于:2025-05-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

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


为什么需要性能测试呢?

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

性能测试的作用?

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

性能测试体系

主要分为:

性能测试基础

  • 性能测试标准流程
  • 性能测试核心指标
  • 性能测试目的/方法
  • 服务基础知识: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 grinder

request = 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, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 3)  # 模拟用户行为等待时间(1-3秒)

    @task
    def index(self):
        self.client.get("/")

运行命令:

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

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

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