介绍性能测试的教程和文章比较多,总结性能测试的指标为多、快、好、省。
- 多:并发数量
- 快:延时,响应时间
- 好:长时间运行
- 省:资源使用率
在介绍吞吐量直接先从几个大家熟知的概念说起,
1.响应时间
响应时间为各个时间段往返时间之和。包括:用户客户端呈现时间,请求/响应数据网络传输时间,应用处理服务器处理时间,数据库系统处理时间。如果是Web系统,接受的时间为2/5/8原则。
2.并发用户数
所谓的用户数有三种类型,分别是:
所谓的并发也有两种类型,严格并发和广义并发:
- 严格并发:所有用户在同一时间做同一件时间,如同一时间点击同一个button
- 广义并发:同一时间做不同的事情,比如用户userA做查询,userB做下单,userC支付
在确认并发用户之前,必须先对业务场景进行分析,得出最典型的业务场景,然后基于该场景获得并发用户数。
常见场景:访问网站首页,登录功能,核心业务功能,个人中心
平均并发用户数计算:
C--平均并发用户数
n--平均每天访问的用户数(login session)
L--一天内从用户登录到退出的平均时间
T--考察时间长度(一天内多长时间有用户登录)
并发用户数的峰值:
例如一个业务系统,该系统有30k个用户,平均每天大约有500个用户访问改系统,对于一个典型的用户来说,一天有8小时访问该系统,且从登录到退出的平均时间为5h
当然这个是估算值且基于一定的用户访问。如果是新增一个系统,此时没有任何登录用户数据如何估算呢?可以估计为系统用户数*(5%-20%)
有了上面的概念之后介绍一下吞吐量
3.吞吐量
一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。因此可以从以下几个角度理解吞吐量:
- 性能测试:单位时间内系统能处理的用户请求量
- 业务角度:请求数/秒,处理业务数/h,页面数/秒等方面
- 网络传输:byte/s
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
- QPS(TPS):每秒钟request/事务 数量
- 并发数: 系统同时处理的request/事务数
- 响应时间: 一般取平均响应时间
3.1 TPS
TPS 即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个用户向服务器发送请求然后服务器做出反应的过程**(完整处理,即客户端发起请求到得到响应)**。用户在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。一个事务可能对应多个请求,可以参考下数据库的事务操作
3.2 QPS
QPS 即Queries Per Second的缩写,每秒能处理查询数目(完整处理,即客户端发起请求到得到响应,比如get请求)。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
从它的英文全名可以得出它是查询意思,原来在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数。 虽然名义上是查询的意思,但实际上,现在习惯于对单一接口服务的处理能力用QPS进行表述(即使它并不是查询操作)
3.3平均处理时间
RT:响应时间,处理一次请求所需要的平均处理时间。通常情况下一般还会关注**90%**请求的的平均处理时间,因为可能因网络情况出现极端情况。
这几个参数之间的关系:
QPS = 并发数/平均响应时间
并发量 = QPS * 平均响应时间
4拐点
通过模拟人为真实场景下,不断按阶梯比例增加并发用户数,直到系统性能曲线出现拐点,这个拐点就是我们经常提及的性能瓶颈处。那究竟什么是性能测试曲线的拐点,性能测试曲线拐点是对性能测试结果的分析,“拐点分析"方法是一种利用性能计数器曲线图上的拐点进行性能分析的方法。
由于在测试性能之前并不知道当前系统能承受的并发请求量有多大,因此查询拐点是一个摸索的过程。拐点分析法的基本思想就是性能产生瓶颈的现象,主要原因就是某个资源(如内存,cpu,网络等)的使用达到了极限,此时表现为随着并发用户压力的增大,系统性能却出现急剧下降,这样就产生了"拐点"现象。当得到"拐点"附近的资源使用情况时,就能定位出系统的性能瓶颈。举个简单的例子,比如系统随着用户的增多,事务响应时间缓慢增加,当用户数达到100k个虚拟用户时,系统响应时间急剧增加,表现为一个明显的"折线”,这就说明了系统承载不了如此多的用户做这个事务,也就是存在性能瓶颈。要判断系统能否满足现状,满足不了就需要继续进行系统调优。
对于容量测试寻找性能拐点可以使用二分逼近法,容量测试的拐点是非常明确地,在拐点上下的性能有明显的区别。只是容量测试的间距一开始注意取得大一些。但是对于并发测试而言,拐点是不太明晰的,所以第一次找到拐点的时候最好做二到三次的确认。