作者:刘林霞
关于如何准备性能测试数据,相信不少性能测试人员也踩过不少坑:比如数据量不足,导致性能表现非常好,忽略了一些潜在性能问题;数据分布不合理,导致测试结果与线上差异较大,又要推到重来。经过n多次被坑之后,总结下经验。我们把测试数据准备分为两类数据:铺底数据和参数化数据。
什么是铺底数据? 一般情况下,产品上线后,数据量是不断增加和累计的过程。刚上线时,数据量较少,数据库查询及更新速度快,服务响应及时性较好。 随着数据量的累积,数据量不断增加和膨胀,系统的操作响应时间会随着数据量的不断增加而变得越来越长。 所以,在性能测试模拟时,要考虑一定规模数据量情况下的性能是否能满足预期,比如考虑半年或一年的业务量。
什么是参数化数据?在压力测试时,通常模拟不同的用户行为,或者业务行为,从系统所提供的API来看,我们需要参数化用户账号等数据,如考拉海淘产品,压测下单场景时,我们要参数化用户数据,哪些用户进行下单;参数化商品数据,这些用户购买什么产品等。
一、性能测试数据准备
铺底数据准备
铺底数据有目的:铺底数据的首要目的是让性能测试环境与线上保持一致,或者说接近线上真实情况。一个是保证待测系统有一定的规模,比如半年或一年后的用户规模。 另一个是为压测做准备,准备每个要压测的请求需要使用到的数据,这部分数据涉及到具体的业务,对性能测试结果影响比较大,具体说明可参考“参数化数据准备”章节。
根据以上两点,将铺底数据划分为两块:
只做铺底,在压测中不会访问到的数据,这部分数据是为了使数据库达到一定的规模,以发现数据库查询、更新等性能瓶颈,如忘记建立索引,查询SQL不合理等问题。只为铺底,压测时不会用到的这部分数据,在预设的过程中就比较随意了,不用考虑数据是否合理,也不用考虑业务关联关系,只要符合数据库设计规则,能插入数据库即可。
另一部分数据是在压测时要用到的数据,比如API要传参过去的数据,或者请求响应数据。这部分数据在铺底的时候就要精细化的设计,包括数据大小,数量,分布等。
铺底数据量多少合适?这个完全根据产品的规模来预估,比如产品预计半年后注册用户数达到100w,则铺底的时候需要铺底100w用户账号。 如果是已上线产品,根据线上数据库数据量进行预估,可以根据用户规模的比列进行铺底,如线上注册用户数一千万,线下铺底注册用户数100w,则总体数据规模为线上的十分之一左右。实际情况下,这里会略微复杂,比如还要考虑线上数据库集群和测试集群的硬件差异等,需做适当的调整。
参数化数据准备
如果我们从系统接口调用角度来看的话,参数化数据包括两类:一类是我们要传参给接口调用的数据,比如用户账号ID,商品ID等。另一类是接口返回的结果数据,如获取商品详情时,需要返回商品的数量、颜色、描述信息等,这些数据必须是事先准备好的。
在进行参数化数据准备时,对于已经上线的产品,可以统计不同铺底数据的分布规律。从网易宝和之前的timeline的两个产品的数据统计来看,大多数数据的分布接近2/8原则。比如活跃用户数占注册用户数的比例为20%,非活跃或者欠活跃的用户占比为80%左右。针对具体业务,80%的业务是由20%的活跃用户产生,20%的业务是由80%的非活跃用户产生。所以参数化测试