性能测试-初识性能测试基础(性能测试流程,计划等)

文章目录

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1.了解性能测试

什么是性能测试?

性能测试:性能测试关注软件、应用服务性能指标的测试;用来评估应用的速度、稳定性、资源消耗和容量;确保软件能够在预期的负载和压力下正常运行;验证产品上线后的性能水平;定位性能瓶颈与潜在性能问题

【小结】性能测试主要关注软件应用程序的速度、稳定性、资源消耗和容量;

性能测试是测试业务产品较稳定版本进行的

性能测试常用策略:

1.负载测试:确定系统在预期负载下的性能状态

2.压力测试:评估系统在极端条件下的稳定性和性能表现

3.容量测试:确定系统的最大承载能力

4.稳定性测试:评估系统在长时间运行下的稳定性

5.可伸缩性测试:评估系统在增加资源或用户数量时的性能表现

性能测试关注的性能指标

1.响应时间:系统对请求的响应速度

2.吞吐量:系统在单位时间内处理的事务数量

如:系统处理流量的多少

3.资源利用率:CPU、内存、磁盘和网络的使用情况

4.并发用户数:系统能够同时处理的用户数量

性能测试常用工具

  1. JMeter (Java开发): 功能最全面的通用型性能测试工具
    支持协议:HTTP/HTTPS、REST/SOAP、JDBC、FTP、JMS、TCP、LDAP、WebSocket(插件)
  2. Locust : Python 开发者友好的代码化压测工具
    特点:用 纯 Python 编写用户行为(高度灵活)
    适用场景:微服务 API 压测、敏捷团队快速验证
  3. LoadRunner: 企业性能测试-需付费
    适用:银行、电信、航空等对合规性和复杂性要求高的场景
  4. Gatling:高性能、面向开发者的压测工具(Scala DSL)
    适用场景:高并发场景、金融/电商核心链路压测
  5. Prometheus + Grafana: 时序数据库 + 可视化仪表盘-性能监控工具
    适用场景:Kubernetes 集群监控(通过 kube-state-metrics、node-exporter);
    微服务性能指标(QPS、延迟、错误率);
    自定义应用埋点(如 Spring Boot Actuator / Micrometer);
  6. SkyWalking:开源应用性能监控工具
    使用场景: 微服务架构下的全链路追踪,云原生环境监控, Java 应用性能深度分析;

【注】1-4性能压测工具

2.性能测试流程

  1. 分析现状:分析产品需求

    线上接口可能出现的状况:未来接收大量流量,需要扩容等操作;分析当前系统稳定性情况;

  2. 获取当前性能指标:当前有性能指标,作为基础值指标使用;没有性能指标:需探索行业内类似产品性能指标;

  3. 定义用户场景:使用什么方式执行压测计划 或 性能测试中参与的核心接口比例,核心链路场景比例;

  4. 定义性能验收标准:根据核心接口比例和核心场景比例,定义验收标准,何时压测,何时收集数据等

  5. 测试计划/脚本:定义测试计划,联合开发协调具体细节;

  6. 准备压力环境

  7. 执行压测:执行1到多轮压测,直到达到定义性能测试标准条件;

  8. 监控:压测过程中监控应用服务性能指标;

  9. 搜集分析:根据验收标准,收集性能验收点,系统性能行为具体的信息;

  10. 测试报告:根据性能测试结果输出性能测试报告

  11. 改进建议:根据报告协调运维或开发进行性能改进建议;

  12. 持续测试:改进完后,重复上述逻辑;

3.性能测试常用方法

并发模式

并发模式(虚拟用户模式):并发是指虚拟并发用户数,从业务角度,也可以理解为同时在线的用户数。

如果需要从客户端的角度出发,摸底业务系统各节点能同时承载的在线用户数,可以使用该模式设置目标并发。

RPS模式-吞吐量模式

RPS模式(吞吐量模式): RPS(Reguests Per Second)是指每秒请求数。

RPS模式即"吞吐量模式",通过设置每秒发出的请求数,从服务端的角度出发,直接衡量系统的吞吐能力,免去并发到RPS的繁琐转化,一步到位。

编写自动化脚本:使用性能测试工具创建和运行测试脚本

性能监控:在测试期间监控系统性能和资源使用情况

瓶颈分析:测试后分析结果,识别性能问题

4. 性能测试计划

性能测试计划:是在进行软件或系统的性能测试之前制定的详细计划和指导文件。它描述了所需性能测试的目标、范围、测试环境、资源需求、测试策略、测试用例、时间表等重要信息

1. 需求分析与测试设计

需求分析:

  • 将业务行为拆解为技术可以了理解的指标(TPS/QPS),或者可量化的东西;
  • 场景1:业务已经在线上运行,如何分析需求?
    • a: 收集行为日志,获取业务运行时的行为日志,包括用户的访问请求、操作行为、响应时间等信息。这些日志可以帮助了解用户行为模式和业务负载情况。
    • b: 分析当前业务数据:通过分析当前业务数据,例如每日活跃用户数(DAU)、每日页面浏览量(PV)、每天的订单量等,可以获得业务的基本性能指标,如每秒钟的请求量(QPS)或每秒钟的事务处理量(TPS)等;
      【注】日志怎么获取,取一整体算平均值? 不会取平均值,会取几天高峰流量的业务行为作为参考
    • c: 建立业务模型: 基于当前业务数据和行为日志的分析结果,建立业务模型,包括各个关键业务场景、用户行为流程、系统组件之间的交互等
    • d: 预估接口 TPS/QPS:根据业务模型和当前业务数据,预估出每个关键接口或服务的每秒钟的事务处理量(TPS)或每秒钟的请求量(QPS)。这可以帮助确定性能测试的目标和负载程度
      基于当前业务数据 → 拆解业务模型→预估接口TPS/QPS
  • 场景2:新业务/新活动,从未接触如何做?
    • a: 友商经验:如果有类似的业务已经在线上运行,可以参考其性能测试经验和结果,了解其业务模型、性能指标和测试场景,从而为新业务制定性能测试计划提供参考依据
    • b: 产品和运营团队可以针对新业务梳理出核心场景路径、入口及对应的转化率、问题收敛页面等。然后,将这些信息转化为业务模型,进而确定相应的测试场景、数据量级和接口比例。
      1.梳理业务核心场景路径
      2.梳理核心业务入口及对应转化率
      3.将上述问题收敛入口页面=>业务模型=>对应测试场景,数据量级,接口比例。

2. 环境设计与搭建:

1.设计:根据需求,结合线上机器部署情况,搭建线下测试环 境,要求具有⼀定的

参考价值,⼀般同⽐1/2,1/4

2.环境搭建:

(1)起压环境:压测⼯具的安装与调试、机器参数记录;

(2)被压环境:基础服务的搭建、web机代码部署及代码改造、机器参数记录;

3.环境调试:查看接⼝是否正常

3. 测试数据准备和构造

a.接口请求参数:自己构造/日志获取/上下关联;

b.数据表的数据填充: 部分业务数据信息可以直接从数据库或缓存数据库获取

c.如果是多接口,则需结合业务场景设计请求比例

4. 性能指标预期设定

【注】主要看公司实际业务决定

不同性能测试⽅式下指标预期会有差异

  1. 每秒请求数(QPS):基于业务进行拆分,比如业务会提出需要再双十一的时候支持每分钟两万的订单。根据这个需求,再去拆分具体有哪一些接口的请求
  2. 请求响应时间(最⼩、最⼤、平均):需要考虑到用户体验,即使后面能够正常响应,但是请求响应时间不能太长。(通常 C 端不超过 1s,尽量在 200 毫秒内)
  3. 错误率:基于在性能测试过程中,每个请求不可能百分百成功,但是也要有一个上限的阈值,那么这个阈值是多少。
  4. 机器性能:cpu idle 45%、memory⽆剧烈抖动或者飙升
  5. 压测过程接⼜功能是否正常: 压测过程接口功能是否正常:不要只关注响应状态码 200,还需要从业务角度来看响应信息是否符合业务需求

5. 发压工具配置及脚本编写

  1. 选择发压工具:根据需求和系统特点选择适合的发压工具。常用的性能测试工具包括 JMeter、LoadRunner、Gatling 等。考虑到测试目标、可支持的协议和工具的易用性。
  2. 安装和配置发压工具:根据工具的官方文档,下载和安装所选发压工具。然后,根据具体情况进行配置。配置项可能包括服务器地址、并发用户数、请求协议和频率等。确保工具和测试环境的通信设置正确。
  3. 编写性能测试脚本:根据需要和测试场景,编写性能测试脚本。性能测试脚本用于定义测试场景,包括模拟并发用户行为、设定请求参数和验证响应等。脚本可以使用工具提供的图形界面或编程语言来编写。

6. 性能测试执行和监控

发压时间线:

  1. 测试前环境检查:记录机器参数
  2. 起压:根据被压情况,调节并发量到适合的情况
  3. 查看记录各项性能指标
    (1)nginx⽇志查看每秒请求数
    (2)查看nginx错误请求
    (3)查看机器参数:cpu idle、mem等
    (4)查看db、cache等数据是否写⼊正常
    (5)访问接口,查看功能是否正常

性能测试常用命令:

  1. 查看 nginx 每秒请求数
    tail -f access.log | awk '{print $4}' | uniq -c
  2. 查看某个接口每秒请求数
    tail -f access.log | grep p_getorderstatus |awk '{print $4}' | uniq -c
  3. 查看 cpu idle
    命令: vmstat 1
  4. 查看内存
    命令:free -m
  5. 查看 nginx 日志是否有错误请求
    tail -f access.log |cut -d ' ' -f 10 |grep -v 200
  6. 查看进程
    命令: - top - ps aux|grep xxx

7. 测试报告

性能测试报告:

1.根据测试过程中记录的各项参数,结合压测⼯具产

⽣的⽇志,对测试结果进⾏分析,并产出测试报告

2.测试完成后,及时与相关⼈员沟通,确认是否满⾜需求

3.发送测试报告邮件

5. 性能测试场景

1、负载测试(Load Test):负载测试是⼀种性能测试,指数据在超负荷环境中运行,程序是否能够承担。 关注点: how much

2、压⼒测试(Stress Test): 压⼒测试(又叫强度测试)也是⼀种性能测试,它在系统资源特别低的情况下查看软件系统运⾏情况,目的是找到系统在哪⾥失效以及如何失效的地⽅。

如:从最低到阙值不断加压,查看过程中软件系统运行情况;

3、极限测试 Extreme testing:在过量⽤户下的负载测试;

4、容量测试(Volume Test): 确定系统可处理同时在线的最⼤⽤户数

关注点:how much(⽽不是how fast)

容量测试,通常和数据库有关,容量和负载的区别在于:容量关注的是⼤容量,⽽不需要关注使⽤中的实际表现

6. 性能测试名称解释

并发:并发是指虚拟并发⽤户数,从业务⾓度,也可以理解为同时在线的⽤户数

简写 英文全称 含义
RT Response Time 响应时间。通常我们说的响应时间,都是包括了RequestTime和Response Time。从客户端发出请求到接收到完整响应所经历的时间。
HPS Hits Per Second 每秒向服务器发送的 HTTP 请求次数(包括页面、图片、CSS、JS 等所有资源)
TPS Transactions Per Second 系统每秒处理事务数
QPS Queries Per Second 每秒向 数据库或查询服务 发起的 查询请求数量。。
RPS Requests Per Second 每秒向 目标服务(通常是 API) 发送的 独立请求次数
Throughput 吞吐量 系统在单位时间内处理的请求数量

经典技术架构图

Nginx-springcloud-[注册中心]-应用服务集群-数据库集群、缓存集群


总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
xie_pin_an16 小时前
C++ 从入门到进阶:核心知识与实战指南
java·c++·算法
小鸡脚来咯16 小时前
Java 关键字面试解释指南
java
gravity_w16 小时前
UV常用命令总结
经验分享·笔记·uv
轩轶子16 小时前
【Macbook环境配置】Macbook设置ssh免密登陆服务器
运维·服务器·ssh
Dillon Dong16 小时前
服务器运维:Linux 磁盘查看 & 清理常用命令
linux·运维·服务器
毕设源码-郭学长16 小时前
【开题答辩全过程】以 高校图书推荐系统的设计与实现为例,包含答辩的问题和答案
java
主公不搬砖16 小时前
Nacos 2.5.2 国产信创 kingbase适配
java·docker·nacos·信创·kingbase·国产适配
ben9518chen16 小时前
Linux用户管理
linux·运维·服务器
谷隐凡二16 小时前
Kubernetes Route控制器简单介绍
java·容器·kubernetes