性能测试步骤

       性能测试是一个庞大的话题,不是一两篇文章能讲清楚的,本着“不要脸”的精神以及结合自身工作经验,我写下了这篇关于性能测试冰山一角的文章,只求把性能测试的步骤讲清楚。

1. 性能测试场景分析。这一步是非常重要的,性能测试不是随便压、瞎压,一定要基于我们的实际业务去分析性能场景,设计性能场景,尽可能得模拟生产上的压力场景。具体来讲,在性能测试场景分析中,我们要明确以下几点(包括但不限于):

      (1)线上用户数预估。线上用户数决定了我们设计压测场景时的在线用户数、并发用户数。20w在线用户数1000并发和2000在线用户数20并发完全不是一个概念。

      (2)高并发场景分析。我们需要结合业务流程,分析哪些用户使用场景可能会有压力、哪些接口会被大量调用、用户的高峰时间分布(晚8点~10点用户数最多?还是早上10-12点用户数最多?)。这块是至关重要而同时又容易出错的地方,分析地不透彻可能会出现“打错靶”的情况。以我亲身工作经验为例,当时项目组在准备某大V的粉丝报名活动,性能测试前期,我们都把重心放在了报名相关的2~3个接口上。毋庸置疑,报名相关的接口必然是会有压力的,但后期才意识到,更恐怖的压力是在登录模块上,粉丝报名必然需要先登录,而我们的产品在登录模块调用了大量后端接口…由于时间紧急,项目组并没来得及做登录模块的性能调优,报名活动上线当天,大V的流量直接把服务器压垮了…事后回顾线上数据发现,很多用户是直接卡在登录页,都没进入到报名页…真是惨痛的教训!虽然第一次报名被大V的流量压垮了,但报名还是要继续的。而经过项目组对登录模块的性能调优后,第二次报名整个过程都是轻松easy的。

2. 基于我们对性能场景的分析,开始设计性能测试用例、撰写性能测试脚本。这里要注意的是:

     (1)在线用户数和并发用户数不是一个概念。比如10w在线用户数,1000并发,代表在10w个模拟用户中,有1000个是在同一刻去调用某接口的。以赛跑为例,假如整个赛道共有500个选手陆陆续续分几批进行跑步比赛,那么这些选手总数500就是在线用户数,而在某批比赛中,裁判发令枪一响,同时冲出去的几十个选手就是并发用户数。

     (2)脚本要设定一定压测时间,压测时间太短压力起不来的。

     (3)既要设计单接口压测,也要设计多接口混合压测。

3. 性能测试环境准备 、测试数据构造和压测脚本执行。基于我们对性能场景的分析,开始去准备负载机、压力机、构造测试数据并执行压测脚本等。具体来讲:

      (1)负载机尽量模拟线上环境的配置,情况允许甚至可以在生产环境切部分服务器节点来压测。

      (2)压力机没有太大要求,只要配置不太垃圾,能发起压力即可。

      (3)基于对生产环境用户数的预估,要构造和生产大致的测试数据,假如数据库中数据不多,很可能就无法暴露某些性能瓶颈。<

      (4)执行压测脚本。这块要注意的是:(i)压测要进行“预热”,头一两次的压测是不准确的。脚本运行一两次压测后(同时也借此机会调试压测脚本、发现并修改脚本本身的问题),服务器才会进入压力状态,这个时候再去执行真正的压测;(ii)压力要逐步上去,不要一开始到系统的崩溃区。比如,100并发、200并发、300并发……直到800并发,逐步上去。

4. 性能测试结果分析、性能监控及性能调优。毫不掩饰地说,这块是我不擅长的。要做好性能测试结果分析及性能调优,需要对前后端代码实现、服务器配置、软件硬件等都相当熟悉。原则上,和系统所有相关的软件硬件、中间件、代码实现等都有可能影响系统性能。常见的影响因素有:

      (1)接口响应慢,服务端代码实现耗性能。

      (2)数据库瓶颈,例如数据库没加索引。

      (3)服务器资源配置低。这块可以通过水平扩展解决。

      (4)服务器资源配置不合理,cpu、内存等配置不合理导致压力条件下服务器资源占用不合理。

      (5)网络带宽。

      (6)影响性能的还有很多因素,上文只列举出常见的几个因素。需要注意的是,在性能调优中,不少情况下是前后端结合来达到调优目的的,例如前端某些页面可以设置成静态页面,前端通过页面分流减小后端压力等。

提交评论

您尚未登录,登录后方可评论~ 登录 or 注册

评论列表

暂无评论