序言
工作之中,我们偶尔能听到身旁鼓捣性能测试的开发与测试小伙伴们产生这样的对话:
"多少并发了?"
"才100"
"QPS呢?"
"150不到,我继续加压了"
"还压啊?CPU都快满了"
"压!压坏了算我的!最大并发还没找到呢!"
一旁没有接触过性能测试的小伙伴们,往往觉得有点好笑又不明觉厉。并发是什么意思?最大并发又是什么?QPS是的意思是?为什么要把系统压坏呢?今天,就为大家简单的介绍一下性能测试的基本概念,希望大家阅读完本文后再听到上面的类似对话能会心一笑。
什么是性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试 ——摘自百度百科
性能测试的种类许许多多,但却又大同小异,负载测试与压力测试是我们最常接触的两种性能测试。
负载测试,旨在验证高并发情况下系统的运行状况。把系统比作一个长跑运动员,运动员身上的配重就是系统的并发,系统的运行状况就像长跑运动员的跑步速度,我们人为地为这个运动员加上几十斤的配重,这样就能知道这个运动员在几十斤的配重条件下能跑多快,这就是负载测试的目的。
压力测试,简称压测,性能测试在实际应用中最常见的一个类型。依旧是以长跑运动员来举例的话,压测就是不断的给这个可怜的运动员加配重,直到他连腿都迈不动。这样我们就知道了一个系统能够正常运行的最大并发。验证系统最大能承载多少并发,这就是压力测试的目的。
性能指标的含义
以我们常用的性能测试工具Jmeter来举例:
- 并发数:
并发数指的就是线程数,指当前有多少个模拟用户在请求接口。10并发的含义,便是有10个不吃不喝,反应惊人,一个请求结束了之后便立马接着请求的虚拟用户在对系统进行操作。
- 平均响应时间
顾名思义,指请求从发出到收到结果的平均耗时。最大响应时间就代表了接口在测试过程中的最高耗时。99%百分位等数据的含义与中位数类似,指有百分之99的请求的响应时间,都小于等于该数值。
- 吞吐量(TPS)、QPS
是我们最常关注的一个性能指标。吞吐量(TPS),指的是系统每秒钟可以处理的事务数,而QPS指的是接口每秒处理的请求数。它们直接的区别在于,一个事务可能包含了多个接口。比如一个下单的事务,调用的接口可能就包含了提交订单与付款两个接口,测试的脚本里就需要添加2个请求。而如果一个事务只含一个接口,这时的吞吐量(TPS)便等于QPS了。
接下来,我们用简单的计算题来实际的理解一下这些参数的含义。
假设接口预期的平均响应时间为500ms,进行300并发的压力测试持续15分钟,需要多少条数据?
分析可知,由于平均响应时间为500ms,则单个并发一秒钟就可以进行两次请求,300并发就是600次请求,最后再乘以持续时间即可得出答案,即: 300×1/0.5×60×15 = 540,000
若我们设接口的平均响应时间为T,并发数为n,持续时间为t,测试数据即总的请求数为N,我们可以得到一个公式: N=nt/T
那么我们稍微变化一下题目,假设接口预期的平均响应时间为500ms,线上接口1h被调用了20W次,线上的实际并发是多少?
不能根据公式得出,n=200000/3600×0.5≈27
当我们测试前需要准备数据,和测试开始时,不知道从多少并发开始施压时,这就是我们的重要依据。
性能测试的模型
我们在压测的过程中,为什么要不断的增大并发?系统在高并发下为什么会超时?为什么提高并发并不一定能提高QPS?了解性能测试的理发店模型,会帮助我们理解这些问题。假设:
- 理发店共有3名理发师;
- 每位理发师剪一个发的时间都是1小时;
- 我们顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时。如果3个小时还不能剪完头发,顾客会立马生气的走人。
假设同时来了ABCDEFGHI 9个客户,那么对于他们各自理发时间就是这样的:
此时我们可以发现,理发店已经达到了最高负荷运载,此时如果再同时来一个客户J,那么毫无疑问客户J会在三小时的等待后立马生气的离开,对于系统来说,客户J就将是个超时请求。那么我们就可以得出结论,理发店这个系统的最高并发数为9。而由于只有三名理发师,所以系统的QPS最高也只能达到3,由此可以延伸出另一个结论,当系统同时只有3名客户时,他们理发无需等待,那么并发3,就是系统的最优并发。
因此,我们在实际测试的过程中,往往需要增加压力测试的持续时间。由上面的模型我们可以知道,只有在3个小时以后,才会出现超时离开的客户,而在这之前,我们并不能知道此时的并发是不是已经达到了系统的上限。
实例
在某次的压测任务中,曾经就因为压测持续时间不够而造成时间浪费的情况。测试刚开始的时候,初始并发是200,压测只进行了10分钟不到,发现迟迟没有报错后便提前终止了测试,提高到了220并发。在220并发的情况下,也并没有持续过长的时间,执行了数分钟后发现接口没有报错便又匆匆提高并发。如此提高了几次,最终在300并发的情况下,系统只运行了3分钟便产生了报错。之后只能降低并发,并提高测试持续时间,发现系统在之前的并发数下,只要延长持续时间便一定会产生超时报错。初始的200并发,也在第11分钟产生了错误。最终,在继续降低并发与延长持续时间的测试后,才得到了系统的最高并发为170。
如果我们第一轮的测试时间就足够长的话,很容易就能发现200并发已经超出了系统的最高并发,之后提高并发的测试时间也就不会被浪费掉。
最后
任何系统都离不开性能测试的洗礼,希望阅读完本文之后能帮助各位建立一个性能测试的基本概念。
南京三百云信息科技有限公司(车300)成立于2014年3月27日,是一家扎根于南京的移动互联网企业,目前坐落于南京、北京。经过7年积累,累计估值次数已达52亿次,获得了国内外多家优质投资机构青睐如红杉资本、上汽产业基金等。
三百云是国内优秀的以人工智能为依托、以汽车交易定价和汽车金融风控的标准化为核心产品的独立第三方的汽车交易与金融SaaS服务提供商。
欢迎加入三百云,一起见证汽车行业蓬勃发展,期待与您携手同行!
官网:www.sanbaiyun.com/
投递简历:hr@che300.com,请注明来自掘金😁