性能测试相关概念
一、性能测试
概念:为了发现系统性能问题或获取系统性能相关指标而进行的测试。
对软件来说,常见的性能问题:
- 查询数据时间过长
- 网速过慢
- 服务器无响应
- 查询数据很长时间才显示结果
- ......
二、性能测试常见指标
1、并发量
并发量,即并发用户数。
从业务层面看,并发用户数指的是实际使用系统的用户总数。
从后端服务器看,指的是wed服务器在一段时间内处理浏览器请求而建立的http连接数或胜场的处理线程数。
例:一个已经投入使用的web系统,最多时有500人同时使用,这些用户进行的操作,分别是浏览页面、查询订单、提交订单的操作。那么这个系统的业务并发用户数就是500,而实际并发用户数是进行提交订单和查询订单操作的用户数量。
2、响应时间
响应时间,指的是应用系统从请求出发开始,到客户端收到最后一个字节数据所消耗的总时间。
对于web系统来说,响应时间分为两部分,一是前端展现时间;二是系统响应时间
前端展现时间:页面渲染时间
系统响应时间:包含服务器、数据库、通讯网络等的响应时间
3、吞吐量
吞吐量,指的是单位时间内处理的并发数,能够直接体现软件系统负载承受能力。吞吐量越高,系统性能越好。
吞吐量 = 并发数 / 响应时间
例:有A、B两个场景:
A场景,有100个用户,每个用户隔1秒发送一个请求;
B场景,有1000个用户,每个用户隔10秒发送一个请求。
A和B场景的吞吐量相同,A:100/1 = 100 个/秒;B:1000/10 = 100 个/秒。但是A场景的思考时间短(处理时间短),所以A场景占用的系统资源更多。
吞吐量的分类:
1、按请求数量分:TPS和QPS
TPS:每秒处理事务数,用于衡量系统在一定时间内处理的事务数量
事务:一个接口可以是一个事务,多个接口也可以是一个事务,一个流程也可以是一个事务。事务代表一个完整的功能。
TPS的计算公式:处理成功的总事务数 / 总的用时
例1:某系统5分钟成功处理了3000个事务,TPS = 3000 / (5*60) = 10
例2:2025年最高的一天有15万笔交易,预测2026年TPS需要多少才能合格?认为每笔交易就是一个事务,理论上来说TPS = 150000 / (24*60*60) = 1.74(理想状态)。然而实际上,订单量并不是平均在一天的每个时间段的,而是在某个时间段突然增加的,因此:
(1)没有详细的数据时,按照二八定理(20%的时间内处理80%的事务):
TPS = (150000 * 0.8)/(24*60*60 * 0.2) = 6.94
(2)有详细的数据:这15万笔交易,有10万笔是在早上八点到九点半进行的:
TPS = 100000 / (1.5*60*60) = 18.52,(参考以往业务的增加,假设每年比上一年的 业务数量增加20%,则TPS = (100000 + 100000 * 0.2)/ (1.5*60*60)= 22.22)
QPS:每秒查询数
当一个接口就是一个事务的时候,且都是查询接口时,QPS = TPS。
2、按照网络数据包分:KB
4、资源利用率
通过查看系统占用的情况分析资源瓶颈
服务器占用的资源通常包括:网络、内存、磁盘、CPU
5、并发数、响应时间、吞吐量的关系
当并发用户较少时,系统的吞吐量较低,系统的响应时间较短。这个时候,我们认为系统处于空闲区间(图中[0,Ax])。
随着并发用户的增加,系统吞吐量开始呈线性增长,系统性能进入线性增长区间(图中[Ax,Cx])。
吞吐量在某个点达到饱和点,也称为拐点。在这以后用户请求不再被立即处理,响应时间变长,吞吐量开始降低,系统性能进入饱和区间(图中Cx以后)。
系统性能的拐点通常时性能测试的主要目的。
三、性能测试分类
1、基准测试
基准测试,又称单用户测试。主要用于监测被测系统在较低压力下的运行状况并记录相关数据。当性能测试环境确定以后,通常选取业务中最重要的部分进行基准测试,对被测系统施加一定压力,从而获取被测系统在单用户运行情况下的各项性能指标,为多用户并发测试和混合场景测试提供参考依据。
2、并发测试
并发测试用于评估被测系统的某些特定操作同时发生时的性能表现(侧重同时性)。例如,被测系统被多个用户同时登录时的响应能力,或系统的某一功能被多个用户同时操作时的性能表现。通过并发测试,不仅可以获得被测系统在多用户并发操作时的性能指标,还可以发现被测系统在并发条件下可能发生的问题,如内存泄漏、线程锁、资源争夺等问题。例如,通过模拟多个用户同时访问一条数据,或模拟多个用户同时更新数据,可能会发现被测系统的数据库访问错误、写入错误等。几乎多有的性能测试都会涉及到并发测试。但并发测试对并发时间要求比较苛刻,通常需要借助专门的性能测试工具,采用多线程或多进程的方式来模拟多个用户的同时操作。
3、负载测试
负载测试是性能测试的一种测试类型,用于评估被测系统在预期的不同负载下的行为。负载测试关注系统处理不同负载的能力,这些负载可以通过控制并发用户数或者进程数来实现。进行负载测试时,通过对系统不断增加并发访问负载,监测系统性能的变化,直到系统的某项或多项性能达到安全临界值,最终确定在满足该安全临界值的性能指标下,系统所能承受的最大负载量。简而言之,负载测试就是通过逐步增加负载的方式来确定系统的处理能力。通过负载测试可以获取系统能够达到的峰值指标。
例:一个系统要求响应时间不能超过2秒,在并发用户数为10000时,系统的响应时间为2秒。但是在并发用户数超过10000时,系统的响应时间超过2秒。所以,对这个系统来说,它的最大负载就是10000。
负载测试可以用于系统的性能验证、性能诊断和性能调优等场景。
4、压力测试
压力测试用于评估被测系统在高于预期、高于指定容量负载需求或低于最少需求资源的条件下的行为。压力测试关注被测系统处理超出预期或特定峰值负载的能力,也可以用于评估系统在资源匮乏时的处理能力。例如在可用的计算能力、带宽和内存资源不足的条件下系统的表现。进行压力测试时通常采用逐步增加系统负载的方式,使系统某些资源达到饱和甚至失效,从而发现那些只有在高负载条件下才会出现的缺陷,如同步问题,内存泄漏等。通过对被测系统进行压力测试,也能找出被测系统的性能拐点,获得系统所能提供的最大服务级别(系统能承受的最大压力),评估系统在峰值负载或超出最大负载情况下的处理能力。
压力测试主要用于性能诊断、性能调优和容量规划等场景。
5、稳定性测试
在负载测试的基础上,执行较长时间的测试用来检测系统的稳定性。通常较长时间指的是3*24小时以上。
6、压力测试与负载测试的区别
压力测试与负载测试不同。
负载测试是保持性能指标要求的前提下,测试系统的最大承受负载能力;而压力测试是在测试系统性能能够达到极限状态的负载能力。
例如,软件系统要求的响应时间是2秒。进行负载测试发现,当访问量超过1万时,系统的响应时间超过2秒,那么在满足系统响应时间的前提下,该系统能够承受的最大负载就是1万。进行压力测试时,可以在1万的基础上继续增加访问量,并观察系统性能的变化。加入,当系统的访问量达到2万时,系统的响应时间为5秒,但是系统仍旧可以正常运行,当访问量达到3万时,系统崩溃,无法正常运行。由此就可以确定系统能够承受的极限是3万访问量。
简单来说,负载测试就是要找到在一定的前提下,系统性能的峰值;而压力测试则是要找到使系统崩溃的临界值,也就是系统性能的极限。
