第7章06 软件性能测试
8.1 本章定位
本章关注非功能需求中的性能问题。客观题常考性能指标和测试类型;主观题可能给出一个系统和性能需求,要求设计性能测试方案。
8.2 软件性能定义
软件性能是软件的一种非功能特性,关注的不是软件是否能完成特定功能,而是软件运行过程中表现出来的时间和空间效率==与用户需求之间==的吻合程度。
从宏观上看,软件性能包括:
- 完成某一功能时的响应性;
- 增加软件功能或负载时保持响应性的能力,即可伸缩性。
软件性能属于非功能性需求。
8.3 性能指标
第二次小测已考:响应时间、吞吐量、并发用户数、资源利用率。
视角
响应时间组成公式课件给出: $$ 响应时间=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 负载测试、压力测试、容量测试辨析
某项指标的极限值就是该项指标的容量
8.5 性能测试步骤
1. 标准五步流程(必背)
① 熟悉应用:最关键的步骤之一
- ==了解系统架构==
- 请求类型(HTTP / RPC / AJAX)
② 测试需求分析
- UV(独立用户)
- 转吞吐量/响应时间指标
③ 测试准备
- 测试客户端机器准备:瓶颈在客户端和网络都不能评估服务端
- 测试数据准备:如果被测功能涉及数据库和高速缓存,通常需要预设很大的数据量才能凸显性能瓶颈
- 测试脚本准备:测试脚本的实现往往会花费比较长的时间
- 测试用例准备
设计测试用例的==原则==是可以满足预期性能指标测试用例要求的,就没有必要设计更多的内容,因为用例越多,执行的成本也越高
设计测试用例的==目标==是一次尽可能的包含多个测试要素
性能测试不同于其他的测试,要尽可能把性能测试用例设计得复杂,才有可能发现软件的性能瓶颈
④ 测试执行
需要监控测试客户端和服务器性能
- 多环境执行
- 监控 CPU / 内存 / IO / JVM
- 记录日志
⑤ 结果分析
- 响应时间
- 吞吐量
- 资源瓶颈
- 内存泄漏/锁竞争
课件提纲中的步骤包括测试需求、测试准备、测试执行、测试结果分析等。可整理为:
典型性能测试方法:负载测试,压力测试,容量测试
性能需求分析
课件举例:开发可能提出“系统能否支撑 100 万 UV”,测试人员需要把它转换为熟悉的指标,如吞吐量和响应时间。
答题时要写:
- 用户量或业务量;
- 响应时间阈值;
- 吞吐量目标;
- 并发用户数;
- 资源利用率阈值;
- 稳定运行时长。
测试环境
环境要说明:
- 硬件:服务器 CPU、内存、存储、网络;
- 软件:操作系统、数据库、中间件、JVM 等;
- 测试工具:JMeter、LoadRunner、监控工具等;
- 数据规模:是否接近生产。
测试数据
如果功能涉及数据库或缓存,需要预设足够大的数据量才能暴露瓶颈。数据可来自线上脱敏数据,也可构造接近线上规模的数据。
测试用例设计
性能测试用例要基于业务流程,目标是满足预期性能指标验证。课件强调性能测试不同于其他测试,应尽可能把性能测试用例设计得复杂,才可能发现性能瓶颈。
8.8 性能测试情景题答题模板
题目给出一个系统和性能需求时:
- 明确测试目标:验证指标、发现瓶颈、评估容量或稳定性。
- 提取性能指标:响应时间、吞吐量、并发用户数、资源利用率、错误率、稳定运行时间。
- 设计测试环境:硬件、软件、网络、数据库、中间件、监控工具。
- 准备测试数据:接近生产规模,必要时脱敏或构造。
- 设计测试场景:核心业务路径、读写比例、登录/查询/提交等事务。
- 选择测试类型:负载、压力、容量、并发、稳定性等。
- 生成测试用例和脚本:参数化数据,设置并发点和负载递增策略。
- 执行并监控:监控响应时间、吞吐量、CPU、内存、磁盘、网络、数据库连接、线程等。
- 分析结果:判断是否满足需求,定位瓶颈。
- 调优后复测:对比基线和调优结果,输出报告。
常见扣分点:
- 只写“用 JMeter 测一下”,不写指标;
- 不说明测试数据规模;
- 混淆负载测试和压力测试;
- 不写监控指标;
- 不写结果分析和调优复测。
8.9 小测关联
第二次小测已考:
- 性能测试指标:响应时间、吞吐量、并发用户数、资源利用率;
- 系统测试包含评估非功能性指标;
- 选择题中出现压力测试选项。
8.10 本章复习检查题
填空题
- 常见性能测试指标包括________、________、和。
- 性能测试典型方法包括________、和。
- 吞吐量从业务角度可用________或 TPS 表示。
选择题
- 逐步增加负载直到响应时间超过指标,主要属于:A. 负载测试 B. 代码审查 C. 单元测试 D. 走查
- 找系统最大并发用户数更接近:A. 容量测试 B. 字体测试 C. 需求评审 D. 桩测试
判断题
- 性能是功能性需求。
- 压力测试关注系统在超出预期负载时的行为和稳定性。
- 性能测试只需要记录响应时间,不需要监控资源利用率。
参考答案
- 填空:响应时间、吞吐量、并发用户数、资源利用率;负载测试、压力测试、容量测试;RPS。
- 选择:A;A。
- 判断:错;对;错。