在前面性能测试基础(一)的性能测试流程中实施部分包括四大场景,第一个要做的就是基准场景测试,那什么是基准场景呢?为什么要做基准场景?做基准场景的目标是什么?应该怎么做基准场景测试呢?接下来就说说这几个问题。
什么是基准场景?
这里可能会有人说用1个线程执行1次,也有人说测试单个接口等等。基准场景就是对单接口或者单业务的测试。
为什么要做基准场景?
我们知道容量场景是由多个接口组成的业务,如果直接做容量场景,那么出现问题定位起来不但困难,还会有种束手无策的感觉,所以呢 我们要经过基准场景对接口来摸底,确定是否能满足容量场景需要的目标,是否能达到最大TPS,为容量场景做好铺垫且不要因为单个接口成为容量场景的瓶颈。
基准场景的目标是什么?
基准场景的目标有2个:
1.测试出单个接口的最大TPS
2.解决单个接口中遇到的性能问题
如果单个接口的最大TPS没有满足容量场景要求,那我们就需要调优啦,如果满足了容量场景要求,我们还要看一下是否存在性能问题。通常情况下,容量场景中遇到的性能问题是需要定位原因并解决的。
如何测试出单个接口的最大TPS呢?分两个阶段:
第1阶段:看硬件资源是否用完,也就是在执行基准场景测试时,需要把服务器中的CPU,内存,IO,网络中的任意一项资源耗尽。
第2阶段:优化到最高TPS,也就是说我们要在基准场景中把单个接口的TPS调到最高,这样才不会成为容量场景中的瓶颈点。
如果第1阶段的目标达不到,我们是需要定位瓶颈的,如果硬件资源中有任意一项耗尽,TPS也满足了容量场景中的要求,这时候这个接口的基准场景测试工作是可以结束的。如果有X项资源耗尽,但是TPS并没有达到容量场景的要求,这种情况就必须对这个接口进行优化。
应该怎么测试基准场景?
接下来我们就用HR系统的登录接口演示一下落地过程:
1.我们先使用几个线程测试一下登录接口的基本性能,这里我用4个线程(正式工作时候需要不断尝试和修正这个过程的),看一下结果
从上图中可以看出1个压力线程大约会产生8TPS(这里是接口级TPS,下文不再重复说明),也可以看出在第3个线程的时候TPS明显下降,这里可以说明我们这个接口在当前系统下,在第3个线程的时候TPS就已经达到了最大。
那这个登录接口达到多少TPS才不会成为容量场景的瓶颈呢?正式工作中在容量场景目标TPS确定后,根据各接口占比计算出单个接口的目标TPS,这里假设达到50TPS就能满足容量场景目标。上面的结果明显不能满足容量场景需求的。上面也有提到基准场景要测试出它的最大TPS,通过上面基本也测试出了最大TPS,如何评估当前系统的配置最大TPS是多少呢?可以根据CRUD的测试经验,也可以根据自己以往的测试结果计算,之前在公司4C8G的服务器,这种登录接口大约能达到150TPS,而我目前的服务器是2C2G的,差不多能达到60TPS左右,如果加上缓存还会高一点。
这样的话线程数就能计算出来啦,按照一个线程8TPS计算,达到系统最大TPS需要的线程数如下:
线程数=60TPS/8TPS=7.5个线程
我们测试登录接口的基准场景使用的线程数高于7.5个就行,这里使用10个线程。
2.根据上面的结果1个线程持续运行1min就可以啦,这样加压策略就是每分钟增加1个线程,增加到第10个线程后持续运行5min(这个5min是预估的,具体执行时候要根据TPS波动情况修正)。
3.最后我们根据上面的结论设计登录接口基准场景的线程数和加压减压策略等,如下图。
4.压力机上执行登录接口的基准场景(这个过程也是需要不断调整的)
5.看一下监控结果
通过上面的结果可以看到这个登录接口仅支持20TPS左右,没有达到容量场景的需求,虽然达到当前系统的最大TPS,但必须对它进行优化,要优化首先要分析瓶颈在哪里,如何分析在下一篇文章写出吧。
其它的接口也是按照这个思路一步一步执行下去,执行过程也是需要对参数不断调整的。
领取专属 10元无门槛券
私享最新 技术干货