第7章06 软件性能测试

8.1 本章定位

本章关注非功能需求中的性能问题。客观题常考性能指标和测试类型;主观题可能给出一个系统和性能需求,要求设计性能测试方案。

8.2 软件性能定义

软件性能是软件的一种非功能特性,关注的不是软件是否能完成特定功能,而是软件运行过程中表现出来的时间和空间效率==与用户需求之间==的吻合程度。

从宏观上看,软件性能包括:

  • 完成某一功能时的响应性;
  • 增加软件功能或负载时保持响应性的能力,即可伸缩性。

软件性能属于非功能性需求。

8.3 性能指标

第二次小测已考:响应时间、吞吐量、并发用户数、资源利用率。

指标含义考试提示
响应时间系统对请求作出响应的时间用户最直观感受
吞吐量系统单位时间内处理请求的数量可用 RPS、TPS、字节/秒等表示
并发用户数系统可同时承载正常使用功能的用户数量与“并发数”不完全等同
资源利用率一段时间内资源平均被占用情况CPU、内存、磁盘、网络等

视角

视角关注点
用户视角响应时间和资源消耗
管理员视角管理员首先关注普通用户感受到的软件性能;其次进一步关注如何利用管理功能进行性能调优。
开发人员视角开发人员希望能够尽可能地开发出高性能的软件

响应时间组成公式课件给出: $$ 响应时间=N1+N2+N3+N4+A1+A2+A3 $$

其中包含网络传输和应用/数据库等处理时间。课件文本中顺序显示为数据库服务器处理时间 $A2$,复习时重点理解响应时间由网络和各服务端处理时间共同构成。

吞吐量可表达为:

$$ F=\frac{VU \times R}{T} $$

其中:

  • $F$:吞吐量;
  • $VU$:虚拟用户个数;
  • $R$:每个虚拟用户发出的请求数;
  • $T$:性能测试所用时间。

资源利用率:

$$ 资源利用率=\frac{资源实际使用量}{资源总可用量} $$

8.4 性能测试概述

性能测试是通过自动化测试工具模拟多种==正常、峰值以及异常负载条件==,对系统各项性能指标进行测试。

目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,==优化软件==,最后起到==优化系统的目的==

8.6 性能测试类型

类型含义主要目的
负载测试在各种工作负载下检测系统性能,负载逐渐增加找系统负载极限,为调优提供数据
压力测试检测系统瓶颈或不能接受的性能点找最大服务级别和极端条件下行为
容量测试检测系统在给定时间内能处理的数据/用户/请求容量找某项指标极限值
配置测试调整软硬件环境观察性能影响找资源最优分配原则
并发测试模拟多用户并发访问同一应用、模块或数据检查死锁和并发性能问题
稳定性测试在一定负载下持续运行一段时间检查长期稳定性和可靠性
基准测试建立性能基准用于后续环境或参数变化后的对比

课件中明确出现的典型性能测试方法:负载测试、压力测试、容量测试等;后续还列出配置测试、并发测试、稳定性测试、基准测试。

8.7 负载测试、压力测试、容量测试辨析

类型含义
负载测试在各种工作负载下系统的性能
当负载逐渐增加时,系统各项性能指标的变化情况
压力测试检测一个系统的瓶颈或者不能接受的性能点
一定的负载下系统长时间运行的稳定性
容量测试检测系统在给定时间内能够持续处理的最大负载或工作量
测试系统的最大容量,为系统扩容,性能优化提供参考
概念重点示例
负载测试逐步增加负载,看性能指标变化并发用户从 100 增到 10000
压力测试超出正常负载,看极限、瓶颈和崩溃/降级行为超过系统处理能力发请求
容量测试找某指标极限值最大并发用户数、数据库最大记录数

某项指标的极限值就是该项指标的容量

8.5 性能测试步骤

1. 标准五步流程(必背)

① 熟悉应用:最关键的步骤之一

  • ==了解系统架构==
  • 请求类型(HTTP / RPC / AJAX)

② 测试需求分析

  • UV(独立用户)
  • 转吞吐量/响应时间指标

③ 测试准备

  • 测试客户端机器准备:瓶颈在客户端和网络都不能评估服务端
  • 测试数据准备:如果被测功能涉及数据库和高速缓存,通常需要预设很大的数据量才能凸显性能瓶颈
  • 测试脚本准备:测试脚本的实现往往会花费比较长的时间
  • 测试用例准备

设计测试用例的==原则==是可以满足预期性能指标测试用例要求的,就没有必要设计更多的内容,因为用例越多,执行的成本也越高

设计测试用例的==目标==是一次尽可能的包含多个测试要素

性能测试不同于其他的测试,要尽可能把性能测试用例设计得复杂,才有可能发现软件的性能瓶颈


④ 测试执行

需要监控测试客户端和服务器性能

  • 多环境执行
  • 监控 CPU / 内存 / IO / JVM
  • 记录日志

⑤ 结果分析

  • 响应时间
  • 吞吐量
  • 资源瓶颈
  • 内存泄漏/锁竞争

课件提纲中的步骤包括测试需求、测试准备、测试执行、测试结果分析等。可整理为:

阶段关键内容
明确测试需求将业务说法转化为响应时间、吞吐量、并发用户数等可测指标
测试准备准备客户端机器、测试数据、测试脚本、测试用例
测试执行通过工具运行用例,同时监控客户端和服务器性能
测试结果分析分析响应时间、吞吐量、资源利用率、线程、内存、数据库等
性能调优找到瓶颈后调整,再重复测试验证效果
测试报告输出性能对比、瓶颈、结论和建议

典型性能测试方法:负载测试,压力测试,容量测试

性能需求分析

课件举例:开发可能提出“系统能否支撑 100 万 UV”,测试人员需要把它转换为熟悉的指标,如吞吐量和响应时间。

答题时要写:

  • 用户量或业务量;
  • 响应时间阈值;
  • 吞吐量目标;
  • 并发用户数;
  • 资源利用率阈值;
  • 稳定运行时长。

测试环境

环境要说明:

  • 硬件:服务器 CPU、内存、存储、网络;
  • 软件:操作系统、数据库、中间件、JVM 等;
  • 测试工具:JMeter、LoadRunner、监控工具等;
  • 数据规模:是否接近生产。

测试数据

如果功能涉及数据库或缓存,需要预设足够大的数据量才能暴露瓶颈。数据可来自线上脱敏数据,也可构造接近线上规模的数据。

测试用例设计

性能测试用例要基于业务流程,目标是满足预期性能指标验证。课件强调性能测试不同于其他测试,应尽可能把性能测试用例设计得复杂,才可能发现性能瓶颈。

8.8 性能测试情景题答题模板

题目给出一个系统和性能需求时:

  1. 明确测试目标:验证指标、发现瓶颈、评估容量或稳定性。
  2. 提取性能指标:响应时间、吞吐量、并发用户数、资源利用率、错误率、稳定运行时间。
  3. 设计测试环境:硬件、软件、网络、数据库、中间件、监控工具。
  4. 准备测试数据:接近生产规模,必要时脱敏或构造。
  5. 设计测试场景:核心业务路径、读写比例、登录/查询/提交等事务。
  6. 选择测试类型:负载、压力、容量、并发、稳定性等。
  7. 生成测试用例和脚本:参数化数据,设置并发点和负载递增策略。
  8. 执行并监控:监控响应时间、吞吐量、CPU、内存、磁盘、网络、数据库连接、线程等。
  9. 分析结果:判断是否满足需求,定位瓶颈。
  10. 调优后复测:对比基线和调优结果,输出报告。

常见扣分点:

  • 只写“用 JMeter 测一下”,不写指标;
  • 不说明测试数据规模;
  • 混淆负载测试和压力测试;
  • 不写监控指标;
  • 不写结果分析和调优复测。

8.9 小测关联

第二次小测已考:

  • 性能测试指标:响应时间、吞吐量、并发用户数、资源利用率;
  • 系统测试包含评估非功能性指标;
  • 选择题中出现压力测试选项。

8.10 本章复习检查题

填空题

  1. 常见性能测试指标包括________、________、
  2. 性能测试典型方法包括________、
  3. 吞吐量从业务角度可用________或 TPS 表示。

选择题

  1. 逐步增加负载直到响应时间超过指标,主要属于:A. 负载测试 B. 代码审查 C. 单元测试 D. 走查
  2. 找系统最大并发用户数更接近:A. 容量测试 B. 字体测试 C. 需求评审 D. 桩测试

判断题

  1. 性能是功能性需求。
  2. 压力测试关注系统在超出预期负载时的行为和稳定性。
  3. 性能测试只需要记录响应时间,不需要监控资源利用率。

参考答案

  1. 填空:响应时间、吞吐量、并发用户数、资源利用率;负载测试、压力测试、容量测试;RPS。
  2. 选择:A;A。
  3. 判断:错;对;错。