我的收藏性能测试IT必备技能

性能测试实施流程

2020-05-21  本文已影响0人  猪儿打滚

前言

说到性能测试,不同的小伙伴有不同的认知,并且在中国,一部分公司的性能测试的流程是这样子的:只说明要压测的接口,甚至连性能指标都没。然后测试人员使用工具添加必要的控件,压测,看工具自带的监控结果是否满足(问领导),满足,继续加,不满足,降低并发继续,实在不行了,让开发调优。测试人员等开发说调优好了,然后继续之前的流程。这种情况,造成了一些小伙伴认为性能测试就是写测试脚本,测试人员在性能测试中沦为了脚本编写和执行的工具人,可替代性更不必说了。
那么,什么样才是比较完善的性能测试实施流程呢?这篇内容就是讲述一种适用性较高的性能测试实施流程。


一、业务模型

1.1、分析

一个系统中,往往有多个业务逻辑,而不同的业务逻辑在使用过程中,用户数量和所消耗的资源也是不一样的。业务种类、业务占比决定了系统的处理能力的侧重,更多会侧重于用户量多,使用时间久的业务。但是,也不能忽略一些业务占比较低,但是功能对系统而言较为重要的功能。因此,业务模型在性能测试中起到关键性的作用。

1.2、风险

上面例子是粗浅分析,具体需要和产品人员、运营人员一起讨论,并得出测试指标。因为如果分析的业务模型中的业务、业务占比和线上实际情况差距过大,会导致测试结果毫无参考价值,对系统的性能产生了误判,线上更容易出现性能问题。

1.3、线上系统参考

线上系统,一般是通过系统运行历史中,高峰时段的业务量和生产中出现的性能问题来进行评估

1.4、未上线系统参考

未上线的系统,一般是通过多方调研和单次交易时所消耗的资源来进行评估

二、系统环境

系统环境可概括分为生产环境和测试环境

2.1、生产环境

生产环境也就是项目线上运行环境。在生产环境上进行性能测试时,需要挑选在低峰时间段进行,避免影响生产环境的正常业务。

2.2、测试环境

相对于生产环境,在测试环境上进行性能测试时,因为不会影响到生产环境,所以风险更加可控。
由于测试环境搭建成本问题,一般都会考虑等比构建的方法:按照系统环境的1/2,1/4,1/8等比例进行搭建测试环境,比如:系统资源、应用实例等进行等比例搭建。甚至会采用部分应用/服务独立部署测试集群,数据库共用,比如:需要测试客户档案服务的性能,之前可能该应用和其它应用部署在同一台服务器上,那么此时就是给客户档案服务按照系统环境或等比例,再添加对应台数的服务器建立集群;数据库共用这里没接触过,个人认为可能指的是测试服和其它服务(比如渠道服务)进行数据库共用,一般指的是机器或同库共用。(这里如果有知道的同学,望评论指点)

三、测试类型

服务端性能测试中提过,个人认为,最常用的性能测试类型有三种:基准测试、负载测试、压力测试。具体细分如下所述:

四、测试指标

详细的性能指标可以看性能测试常见指标,这里按照测试的时候会关注,或者分析的时候需要关注的指标来进行分类:

4.1、必要性

不同系统,不同业务,不同的用户,对性能指标的要求都不同。在进行性能测试之前,需要进行调研,并获取到性能指标,一般来说有用户数、响应时间、TPS、成功率、服务器资源消耗上限等。
如果在执行性能测试时,没有明确的性能指标,那么会导致性能测试毫无目标,得到的结果很有可能是无效的。

4.2、业务指标

详情看性能测试常见指标

4.3、资源指标

服务器资源指标一般会有上限指标,因为需要给系统预留“容错空间”。比如说:CPU资源利用率<=80%,内存无SWAP之类的指标。
性能测试理想情况下是业务指标上不去的时候,服务器资源是瓶颈的原因,这种情况,只要加服务器资源,那么业务指标就能上去了;但是实际情况,大部分时候业务指标上不去时,服务器资源还是很充裕的,是其它原因造成的性能瓶颈。
详情看性能测试常见指标
PS.施压机的资源也需要监控

4.4、另外监控的指标

归类到这里的指标,就需要结合业务和后端代码设计来分析需要监控哪些指标。这类的指标,一般都需要后端在代码中进行对应的日志记录来采集,或者运维人员进行监控。在测试完毕后,业务指标值、资源指标值和这里监控的值结合分析,看造成性能瓶颈的具体原因在哪。
比如说:一个接口,需要在mysql进行写入操作,同时需要经过mq消费写入到es。那么就需要监控mysql的连接数(使用和释放情况)、写入速度(关系到锁)、mq的消费速度等可能是原因的地方。

五、数据量

性能测试的数据量,可以分成两种:基础数据量、参数化数据量。

5.1、作用

数据量在性能测试中的作用很重要。在数据库中仅有几条记录,和有上千万上亿条记录的情况下,所进行的性能测试所得到的性能结果是差距很大的,特别是查询相关的。我们在进行性能测试时,应该是在尽可能模拟线上生产环境的情况下进行,这样得到的结果才具有参考价值。
在生产环境中插入测试数据的方式,需要考虑数据的完备性(贴切真实数据)、如何清理测试数据等问题,具体了解:全链路压测

5.2、基础数据量

在测试环境时,数据量需要和生产环境的数据量保持同量级,具体考虑多久,得结合系统的预计生命周期来评估,一般都是年为单位,比如说2年后的数据量,这里需要考虑到数据量的增长速度
基础数据量不单只考虑到数据的“量”,还需要考虑到数据的“类型”,比如说用户基础数据、活动的数据、埋点的数据;
可能还考虑数据的“新旧”,比如说多少数据会是“死”数据,也就是不活跃的数据,多少数据会是“老用户”数据,“新用户”数据等。这种类型的数据比较难预估,而且不同“新旧”的数据,其关联的数据量也是不一样的。

5.3、参数化数据量

1.参数化数据量尽可能的多,必要的情况下,可以清除缓存或者用写代码的方式提供参数化。
2.参数化数据分布,如果业务有明显的地域等分布的特征,需要考虑数据分布的情况。

5.4、创建数据量的方法

造数据需要尽可能真实,比如说创建的用户名都有“测试”两个字,然后执行查询接口的性能测试时,keyword是性能,这样测试结果毫无意义,因为使用了缓存。
1、从生产数据库中导入(最优)
2、脚本直接写入数据库(数据库不仅mysql,还包括es等)
3、压测工具,比如jmeter进行生产(执行写入操作的接口测试时,也会生成测试数据,这些数据也需要尽可能真实)

六、压测场景和串联链路

这两个名词,是引用的阿里性能测试PTS的说法(PTS需付费),来让我们更清晰了解到压测场景配置相关的知识。阿里性能测试PTS

6.1、压测场景

要发起一次性能压测,首先需要创建一个压测场景。个人觉得把场景看成一个对业务/串联链路的分组更容易理解。
一个压测场景包含一个或多个并行的业务(即串联链路),每个业务包含一个或多个串行的请求(即 API)。
API 是场景压测中的必需元素,用来定义串联链路中每个阶段 URL 的具体信息。API 是由用户行为触发的一条端上请求。例如,电商网站的登录、查询商品详情、提交订单等,分别对应一次用户行为中的多个请求 API。

创建PTS施压场景-施压配置-传统模式
创建PTS施压场景-施压配置-RPS模式

6.2、串联链路(引用阿里PTS的说法)

串联链路一组压测 API 的有序集合(类似于事务),是用来模拟用户的实际业务操作的,具有业务含义。一个压测场景下可以有一个或多个串联链路。
比如说淘宝网需要压测两个业务,要求两个业务同时进行:

七、监控

监控的目的是为了对测试结果进行分析。完善的系统监控,会在针对瓶颈定位中起到事半功倍的效果。监控的范围包括但不仅限于:操作系统的资源、中间件、数据库、应用等。每种类型的监控方向需要尽可能全面。
如果没有完善的监控体系,会导致在进行性能瓶颈分析时无从下手,只能看着那仅有的几个指标值干瞪眼,瞎猜。找不到性能瓶颈的,更谈不上性能调优了。

7.1、监控维度

监控的对象和维度一般如下:

7.2、监控工具

监控工具一般都是由运维人员部署,但测试人员也需要了解以及入门,毕竟不是所有公司都有运维人员。
常用服务器监控工具:htop命令或运维监控工具,比如zabbixnmon
对中间件、数据库、应用层面的监控以及问题工具定位工具:APM工具(开源APM工具),阿里云ARMS

ARMS示意图

八、瓶颈分析

瓶颈分析依赖于测试报告和监控数据,而瓶颈分析又是为了系统调优做准备,系统的性能瓶颈主要分布在:服务器操作系统资源、中间件参数配置、数据库、代码问题等。我们进行瓶颈分析,定位到具体原因,那么调优就可以有的放矢地进行。

8.1、必要性

如果瓶颈问题不能定位出来,那么生产环境的业务就一直处于“埋雷”状态,存在风险。并且新业务的迭代添加,可能会扩大这个风险。会导致生产环境中,业务高峰期时,系统性能变差,用户体验差,甚至可能系统崩溃。

8.1、分析维度

瓶颈分析时,需要结合业务指标数据(TPS、成功率、响应时间等)和监控数据来进行分析。瓶颈分析维度和监控的维度差不多

九、调优

调优一般是在实际性能指标达不到预期的性能指标的情况下进行的,目的是为了提高系统的性能,方法是针对性能瓶颈点进行对症下药,验证是通过再次的性能测试进行,看调优后的系统性能如何、涨幅如何。

9.1、调优方向

X、总结

性能测试流程
上一篇下一篇

猜你喜欢

热点阅读