性能测试入门
---任静
性能测试目的
针对频繁调用的接口或者业务逻辑较复杂且外围系统对其依赖比较大的接口必须要进行性能测试,可以从以下两个维度来划分:
前端性能测试:包括页面和服务端,对于大型活动,可以通过前端性能测试保证活动时期页面性能,给用户带来良好的用户体验。
单接口性能调优:主要目的是优化接口性能,排查接口性能问题以及应用内存隐患。
评估性能测试指标
明确了测试的目的,我们对于性能指标值就要有较为合理的评估,评估性能指标主要依据我们的业务模型
业务模型:实际的业务场景
需要一份比较有代表性的真实线上的数据:如去年1111节日,某活动的访问量PV,UV,以此来估算今年的访问量;同时一个活动下的各个子活动占用比例
根据上面的业务模型,需要给出一些硬性的指标:
响应时间
并发量
TPS指标(每秒处理事务数)
一般性能测试指标均由SE提供,但性能测试人员应具备分析并评估性能指标合理性的能力
测试方案
制定性能指标时是根据生产环境组网制定,实际测试时需要根据线上机器比例,线下模拟配比,分别进行单机,集群测试,评估机器容量,对于瞬间高并发的现象,应做好应用和DB容量规划,由此,我们的可以从以下几个测试维度进行测试
单机测试;单个场景下单机测试,逐个排除每个接口/页面的性能,单机测试下需要进行性能指标测试,负载测试,找出系统的稳定性指标和性能瓶颈
集群测试:对于单个接口/页面进行进群测试,测试结果和单机测试比较,分析出集群系数,找出组网瓶颈,重点关注分发器和DB
稳定性测试:取稳定性指标进行n*12小时进行稳定性测试,重点排除内存溢出和系统忙时CPU的资源使用
压力测试:高并发下,系统的处理能力,以及是否有响应的保护机制
性能测试呼叫模型
上述测试方案中,提到了性能测试,负载测试,稳定性测试,通过这些概念可以关联出性能测试呼叫模型如下:
随着单位时间流量的不断增长,被测系统的压力不断增大,服务器资源会不断被消耗,TPS值会因为这些因素而发生变化,而且符合通常情况下的规律。以下是一个性能测试压力变化模型图:
说明:
a点:性能期望值
b点:高于期望,系统资源处于临界点
c点:高于期望,性能处于拐点
d点:超过负载,资源不够用,系统处于崩溃
通过如上模型图中的情况,我们大致可以将当前性能测试分成如下4类:
1、性能测试
2、负载测试
3、压力测试
4、稳定性测试
》性能测试
以上模型图为准则,在a点与b点之间的系统性能,表示以性能目标预期为前提,对系统进行施压,验证系统在资源可用范围内,是否能达到性能预期的目标。
》负载测试
c点的系统性能,表示在系统在一定的压力下持续一段时间,直到系统的某项或多项指标达到极限,比如系统资源CPU、Memory或者IO等达到饱和状态。
》压力测试
c点到d点的系统性能,表示在超过安全负载的条件下,不断对系统进行加压,直到系统不能再接受请求,并可以确定一个系统瓶颈的情况下,目的是为了找出系统的瓶颈,需要对系统进行调优。
》稳定性测试
a点到b点的系统性能,表示被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定,一般稳定性测试时间为n*12小时
测试观察项
正确性测试:呼损率;更新表数据量;日志记录;话单记录
性能测试首先先验证高并发下的正确性,只有在呼损率极低的前提下测试数据才具备一定的参考性,正确性验证一般是通过事务总数和日志记录,表更新相关记录,话单记录等需一致
系统资源监控:CPU,内存,IO读写,网络
性能测试时不可以在网络延迟的状态下进行,因为这不能真实的反映系统的处理能力;一般在千兆网的网络中进行,且各个部件网络延迟均应<1ms;
CPU使用率是系统监控资源的重要指标,随着TPS的增加,端到端的各部件CPU应用资源也应该提高,测试时找出性能瓶颈很大程度上依赖于CPU的使用,通过CPU消耗最快的模块能快速定位到该模块/应用是性能瓶颈,进而通过抓取jstack,javacore,慢查询,AWR等相关文件进行分析瓶颈所在
IO读写高一定是问题,数据库IO读写高,一般是低效SQL导致;应用读写高,可以看下线程的调用等待事件过多
内存泄露可以通过稳定性测试来观察,稳定性测试n*12小时
性能监控指标:响应时间,TPS指标,并发量
一般页面比接口的响应时间要常一些,响应时间和具体的业务相关,需要根据业务来分析是否合理
TPS指标和并发:TPS为每秒处理事务数,验证系统的处理能力;一般来说并发量一定要小于TPS指标,TPS指标是相对的并发,如果并发量太大,超过系统的处理能力(TPS),会造成消息堆积,延迟响应
;如果需要验证极高并发的,请进行压力测试
测试结果分析
测试结果和预期指标对比时,要结合组网规划,硬件设施,网络,应用参数配置等综合分析是否合理;如果测试结果不符合要求,要么扩容,要么优化代码,但是每个场景的测试结果要及时反馈,及时找到应对措施