一、什么是性能测试
1、概念和价值
性能测试就是通过性能压测工具(jmeter,loadrunner),通过特定方式,对系统施加一定的压力:正常、异常负载以及峰值来对系统实施压力,得到各项指标。保证系统的性能需求。
价值和目的:
- 评估系统的能力
- 识别系统的弱点:瓶颈、弱点
- 检查系统的隐藏问题
- 检验系统的稳定性和可靠性
2、两种不同的测试方式
负载测试:定义好期望值,比方说期望的并发数、服务器资源利用率、平均响应时间、错误失败率,尽可能模拟项目线上正常情况,执行测试,采集结果判断是否满足期望值。(核心就是明确目标)
压力测试:在给定的服务器下,压出程序的瓶颈,一般用阶梯式的方式压测,比方说50、100、200、300、500、800并发。
3、CPU和内存
CPU和内存是性能测试中主要测试的硬件,如果CPU使用率到达100%有可能会造成三点后果:
系统响应变慢:由于CPU达到了满负载,运行在该操作系统下的所有进程(包括系统进程和用户进程)都会受到影响,其响应速度会变慢,用户也会感到系统运行缓慢。
进程挂死:在极端情况下,如果CPU使用率持续保持在100%,一些进程可能会挂
系统崩溃:如果CPU使用率达到100%的时间过长,系统可能会崩溃,无法正常运行。
如果内存使用率到达100%,也有可能造成三点后果:
内存溢出:在内存使用率达到100%后,若还有新的进程或应用程序需要分配空间存储运行数据,则会导致内存溢出现象,通常表现为程序崩溃或运行缓慢等现象。
系统变慢:当内存使用率接近或达到100%,系统会将一些数据存储在系统硬盘中,而硬盘交换数据的速度较慢,会导致系统运行速度变慢。
误操作:在内存被占满的情况下,如果再进行大的操作(如打开大文件或多个应用程序),可能会造成系统崩溃,数据丢失等问题。
4、三种缓存问题的原因
【缓存雪崩】:指在缓存中大量的缓存数据在同一时间过期失效,导致大量请求直接落到数据库上,从而引起数据库的短时间内的并发访问压力过大,导致系统崩溃。模拟方式:提前加载10w缓存数据,测试脚本持续查询这些缓存数据,等待数据淘汰时观察脚本的返回结果。
【缓存穿透】:指查询一个一定不存在的数据,由于缓存不命中,请求会穿透缓存直接查询数据库。由于这种情况下大部分的请求都会落到数据库上,从而引起数据库的短时间内的并发访问压力过大,导致系统崩溃。模拟方式:保证查询时数据的唯一性,不会命中到缓存结果
【缓存击穿】:指查询一个存在的数据,但是由于某些原因(例如缓存过期、缓存被清空等),导致缓存不命中,请求会直接落到数据库上。如果这种情况发生在高并发的情况下,就会引起数据库的短时间内的并发访问压力过大,导致系统崩溃。
二、性能测试指标理解透彻以及测算
【虚拟用户数】:每一个线程=一个用户。
【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某一功能进行交互。一般通过集合点实现。
【事务】:一个接口可以是事务,多个接口也可以是事务,一个流程也可以是事务。事务代表一个完整的功能,是由测试人员决定的。
【场景】:性能测试的用例
【响应时间RT】:Response Time
平均响应时间:
中位数:
90%:
95%:
99%:
基准测试:1个用户请求接口,200~500MS
压力测试:N个用户去并发请求结果,2S
【TPS】:TPS是系统的重要性能指标,主要是衡量系统一定时间内处理的事务数(交易数),如果是一个接口,那么就等于吞吐量,如果是多个接口,就不一样了。
计算公式:总的事务数/总的运行时间
1.比如某一系统1分钟处理1000个事务,那么TPS=1000/60=16.7。
2.又比如按去年的经营数据,2022年最高的一天有10万笔数据,那么TPS要到达多少才能算合格?
总事务=10万,时间=246060=86400秒
理论上的TPS=100000/86400=1.1,这是理想状态,它是把所有交易平均分到24小时上。很显然,这样算是不行的。
假设:
(1)没有更详细的数据:根据二八定律,(80%的事务在20%的时间完成)TPS=1000000.8/864000.2=4.6
(2)如果有更详细的数据:5万比交易是晚上8~9点完成的。TPS=50000/3600=13.9,再考虑业务的增长30%,TPS=(50000+50000*0.3)/3600=18.5。
【QPS】:每一秒的查询率。TPS\QPS\RPS\HPS(每一秒的点击率,衡量客户端的)
如果一个事务只有一个接口,那么TPS=RPS,如果这个接口是查询接口,那么TPS=QPS=TPS。
QPS一般是形容数据库的查询接口。
【吞吐量】:吞吐量一般是衡量网络成功传输的数量,单位Btye/s,吞吐量和TPS和QPS没有任何关系。
【资源利用率】:服务器:CPU,内存,磁盘,网络。