在写这篇文章之前,我google了一下“性能测试数据”,发现不同的文章对于性能测试数据的定位是不一样的。所以,我觉得有必要先定位一下我这里讲的性能测试数据。性能测试数据,指的是性能测试场景执行时的基础数据;就是性能测试环境的Data Environment。Data Environment准备的必要性是不言而喻的。就好像,需要你从10颗绿豆和从10万颗绿豆中找出之前放入的一颗红豆一样,哪一种情况更能体现你的聪明才智呢?所以,软件性能测试应该在一定数据量的数据库上进行,这样才能真实地体现软件性能。
那么怎么样的Data Evnironment才算是合理的呢?答案当然是来自生产环境的数据最好,因为这些数据都是真实的。然而,很多的性能测试是很难得到真实生产环境的数据的,因为在做性能测试的时候,系统还没有上线,何来的数据呢?因此,如何能设计出较为接近生产环境的数据就是我们讨论的重点了。
1.确定数据类型
根据不同的系统,测试数据可以大致分为以下3大类:
A.基础数据
这类数据指的是整个被测系统业务的基础数据。例如,计费系统中的customer数据;Call center系统中的Agent数据等。
这一类的数据的特点,是所有数据的基础;且这些数据量相对固定,或者变化不大(当然是在不扩容的前提下,一般扩容都是由于数据量达到一定程度后或者业务量的增长,致使系统也要随之升级)。
B.业务数据
这类数据是根据被测系统的业务,由基础数据衍生出来的。例如,计费系统中,customer的购买记录,账单记录;Call Center系统中的通话记录,生成的合同数;还有数字电视系统中的,节目单数据,点播影片数,以及各种点播记录等。
这类数据的特点是,跟基础数据关联,是被测系统的核心数据,体现业务,且会随着被测系统上线时间线性增长或指数型增长。
C.历史数据
这类数据指的是,过期的业务数据或者是有一些系统对于用户操作需要进行严格的跟踪,因此部分的基础数据或者业务数据的修改历史会保留在数据库中,方便翻查。例如,customer基本信息修改,customer的购买记录,历史订单等。
这类数据的特点是,虽然不会显示在UI上,然而会对查询功能有性能的影响。
2.确定数据量
一般地说,数据量是不会在Functional Spec里面直接给出。在Functional Spec里面只会是客户或者市场人员对整个被测系统业务增长量的一个预测。
例如,我最近计算了Call Center性能测试数据,Functional Spec里面会给出上线时Agent的数量,一般情况下的接call的频率,customer数量的增长率等。这样,我们根据customer的增长率来计算出来未来两年的customer的数据量;利用Agent数量,在平均负载的接call频率,次峰值以1.5倍计算,高峰值以2倍计算,来计算出每日通话记录数量的增长,从而计算出两年后通话记录数的数据量。
另外,并不是所有的Functional Spec都会对被测系统业务量进行一个详细的描述。这个时候就需要Tester具有业务的洞察力,大胆假设,小心求证;建议作为Tester的你,可以先根据自己对业务的了解,确定每项数据的算法,再大胆假设基础数据量,形成了一份完整的设计文档后,提交给Manager,或者直接召集相关人员来一起对你所做的大胆假设进行小心求证。[PS:这些数据量确定后,最好经过Manager,市场人员,甚至是客户的Review,并达成共识。]
3.梳理数据关系
这个是整套数据的关键。我们需要把基础数据与业务数据一一关联起来。
举个例子吧,假设被测系统是一个订购系统,一个customer应该关联多少个历史修改记录,关联多少条通话记录,一个月生成多少张订单。还有多少个customer应该有订单记录,多少个customer没有订单记录等等。这些数据的设计都会牵扯到未来做性能测试场景时,系统是从多少个记录中查询出一个customer,查询某个customer当月账单时返回多少条记录,这个也是对被测系统性能的一个很好的衡量标准。
4.优化数据结构
这个主要是针对查询操作所进行的数据优化。例如,我们需要测试某个客户,查询某一段时间内的订单的性能。此时,我们就必须对订单表中,订单所属客户,订单生成时间进行随机的或者是遵循一定规律的分布,这样可以有效避免有些客户查询结果为空,有些客户查询结果为上万条,从而造成无法很好的衡量被测系统的性能。
以上就是我在做性能测试数据设计时的一些总结。虽然它可能无法涵盖测试数据设计的方方面面,但是我觉得它也能提供一种思考的方向。其实针对不同的被测系统我们需要考虑的数据或者是数据设计的侧重点都是不一样的。例如,在数字电视系统性能测试数据的设计中,基础数据除了客户数据外,还需要考虑一些业务上面的基础数据,例如节目单,电影数据等;在设计数据关系时,重点在于设计客户不同类型订购产品的比例,从而确定当月订单的记录数等。所以,我认为能够设计出好的性能测试数据关键还是对被测系统业务的熟悉。