一般来说,衡量软件性能的三个最常用的指标是:并发用户数、响应时间,以及系统吞吐量。
一、并发用户数、响应时间、系统吞吐量之间的关系和约束:
(1)当系统并发用户数较少时,系统吞吐量也低,系统处于空闲状态,这个阶段称为:空闲区间
(2)当系统的负载不是很大时,随着系统的并发用户数量的增长,系统的吞吐量也会随之呈线性增长,这个阶段称为:线性增长区间
(3)当系统的并发用户数进一步增长,系统的处理能力逐渐趋于饱和,因此每个用户的响应时间变长。但是系统整体的吞吐量并不会随着并发用户数量的增长而继续呈线性增长,这个阶段称为:拐点
(4)当系统并发用户数继续增长,系统处理能力达到过饱和状态。此时如果继续增加并发用户数,最终所有的用户的响应时间会变得无限长。系统的整体吞吐量会降为零,系统处于被压垮的状态。这个阶段称为:过饱和区间
二、常用的性能测试方法
(1)后端性能测试:是通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求。
这里的性能指标,除了包括并发用户数、响应时间和系统吞吐量外,还应该包括各类资源的使用率,比如系统级别的 CPU 占用率、内存使用率、磁盘 I/O 和网络 I/O 等,再比如应用级别以及 JVM 级别的各类资源使用率指标等。
我们一般只会把它设计在“线性增长区间”内。
场景设计主要包括以下两种方式:1、基于性能需求目标的测试验证;2、探索系统的容量,并验证系统容量的可扩展性
(2)压力测试:一般采用后端性能测试的方法,不断对系统施加压力,并验证系统化处于或长期处于临界饱和阶段的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈点。所以,压力测试往往被用于系统容量规划的测试。
在执行压力测试时,我们还会故意在临界饱和状态的基础上继续施加压力,直至系统完全瘫痪,观察这个期间系统的行为;然后,逐渐减小压力,观察瘫痪的系统是否可以自愈。
因此,我们将它设计在系统“拐点”上下,甚至是“过饱和区间”。
(3)可靠性测试:是验证系统在常规负载模式下长期运行的稳定性。是通过长时间模拟真实的系统负载来发现系统潜在的内存泄漏、链接池回收等问题。
三、性能测试的目的
(1)能力验证:验证“某系统能否在 A 条件下具有 B 能力”,通常要求在明确的软硬件环境下,根据明确的系统性能需求设计测试方案和用例。
(2)能力规划:如何才能使系统达到要求的性能和容量。
(3)性能调优:主要解决性能测试过程中发现的性能瓶颈的问题,通常会涉及多个层面的调整,包括硬件设备选型、操作系统配置、应用系统配置、数据库配置和应用代码实现的优化等等
(4)缺陷发现