性能测试指标

1,224 阅读7分钟
性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
按照不同的目标,可以分为负载测试、压力测试、容量测试、稳定性测试。平时工作中如果不是专业的测试机构,开发人员或者运维人员做的基本上都属于压测。
压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
性能指标
QPS
目前在业界告诉别人我系统的性能指标,比较容易说的就是
QPS
QPS
有时也说
TPS
,指的是每秒钟
request/
事务。通常有人告诉你他的接口并发
3000
通常指的就是
QPS=3000
,可以理解为他的系统
1
秒钟接受并处理完毕
3000
个请求。
QPS
的算法就是:完成请求的数量
/
完成请求所花费的时间
如果
10
秒的时间内,系统接受到了
3000
个请求,返回了
2000
个,剩下
1000
报错。它的
QPS=2000/10=200
响应时间
响应时间,从单个请求来看就是服务响应一次请求的花费的时间。但是在性能测试中,单个请求的响应时间并没有什么参考价值,通常考虑的是完成所有请求的平均响应时间及中位数时间。
平均响应时间很好理解,就是完成请求花费的总时间
/
完成的请求总数。但是平均响应时间有一点不靠谱,因为系统的运行并不是平稳平滑的,如果某几个请求的时间超短或者超长就会导致平均数偏离很多。可以参考读新闻的平均工资、平均房价等,你就知道为什么不那么靠谱了。因此有时候我们会用中位数响应时间。
所谓中位数的意就是把将一组数据按大小顺序排列,处在最中间位置的一个数叫做这组数据的中位数
,这意味着至少有
50%
的数据低于或高于这个中位数。当然,最为正确的统计做法是用百分比分布统计。也就是英文中的
TP
Top Percentile
TP50
的意思在,
50%
的请求都小于某个值,
TP90
表示
90%
的请求小于某个时间。
并发数
并发数是一个特别容易混淆的概念,因为他在各种语境下表示的含义可能并不相同,从性能测试结果的角度来看
并发指的是在某一时间点,服务器正在处理的请求数
但是我们在实际工作中,经常听到别的说法
举例来说:
工程师经常说
1
秒并发
2000
,其实他指的是
QPS=2000
而一个网站管理员说我们并发
1000
人,其实指的最大在线人数
1000
人。在线人数
1000
人并不意味每个人都同一时间在跟服务器做交互,因此服务器的并发数并未到
1000.
运维人员说我设置的
tomcat
的并发数
500
,他指的是这个
tomcat
最多可以调用
500
个线程同时接受请求。也就是同一时间服务器能达到的最大并发数数是
500
,但是受限于
CPU
OS
等其他原因,并发数在实际中达不到这个数值。
性能测试人员说我在
LR
中设置了并发数
3000
,指的是他在测试工具中设置
3000
个并发模拟用户,只是理论上在单位时间内最多会有
3000
个的模拟请求到服务器上。但是从客户端角度出发,客户端有可能因为
CPU
OS
、等待时间等等限制,并不能达到此压力。即使客户端达到了此压力,但是从服务器的角度出发,会有排队机制以及部分请求异常溢出,并不能说服务器的并发就到了
3000
因此性能测试中的并发数指的是一个测试出来的结果计算值,其计算公式是
QPS*
平均响应时间
吞吐量
吞吐量,是指在一次性能测试过程中网络上传输的数据量的总和。对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,在容量规划的测试中,吞吐量是一个重点关注的指标,因为它能够说明系统级别的负载能力,另外,在性能调优过程中,吞吐量指标也有重要的价值。如一个大型工厂,他们的生产效率与生产速度很快,一天生产
10W
吨的货物,结果工厂的运输能力不行,就两辆小型三轮车一天拉
2
吨的货物,比喻有些夸张,但我想说明的是这个运输能力是整个系统的瓶颈。
提示,用吞吐量来衡量一个系统的输出能力是极其不准确的,用个最简单的例子说明,一个水龙头开一天一夜,流出
10
吨水;
10
个水龙头开
1
秒钟,流出
0.1
吨水。当然是一个水龙头的吞吐量大。你能说
1
个水龙头的出水能力是
10
个水龙头的强?所以,我们要加单位时间,看谁
1
秒钟的出水量大。这就是吞吐率。
最大并发量
在理解了上述几个指标之后,性能测试的目的就变成了在特定的条件下(固定硬件设备,通常要排除网络瓶颈),寻找系统的最大并发量的过程。当并发数增大到一定的程度,系统反应时间还在可以接受的范围之内,服务并没有出现失败,或者失败率在可接受的范围内,如果超过此并发量,系统的指标变得不可接受,则认为这个值是系统的最大并发量。
最大并发量的应用
系统的最大并发量只是一个技术上的理论值,往往在技术团队内吹吹牛,而鲜有业务同学感兴趣。在你对自己
1000
个最大并发量感到沾沾自喜的时候,客户质问:“你说的
1000
并发到底能承载多少个用户呀?”。这时你往往懵逼了,这时你往往要问客户一句:”你问的是注册用户,还是同时在线用户?“。现实的情况是单个功能模块的
QPS
及最大并发数,往往很难估算出全站的业务含义上的用户量,现实生活比计算机机房模拟的环境要复杂的多,需要考虑网络环境、用户对各个功能点的使用率、用户的操作习惯行为等,即使你使用
LR
等复杂的测试模拟工具,对不同的功能模块进行了综合的测试,往往也只能得出一个估算的值,而且你往往遇到的最大的问题是你没有那么强的扮演成千上万模拟客户端的测试机,即使你有,你往往又没有那么宽的带宽,在压力上去之后,网络首先成为了瓶颈(这也就是为什么阿里之类的
PTS
等测试服务存在的原因)。
不过幸运的是,我们往往并不用得到特别精确的值来服务我们的业务,往往是个大概的值就可以了,所以我们还是可以根据一些经验估算,比如按照之前项目的
PV
,按照自己的想法对每个模块加权计算。甚至于可以拿日常的
PV
数除一下高峰持续时间得到日常的
QPS
,再以最大的
QPS
估算能够支持的最大
PV
数,再推出
UV
————————————————