过去,数据分析和测试的关系好像大部是体现在测试报告的各种图表——大部分人都不太关注的图表。而今天想拿压测中的两个例子,说明下用数据分析的方法真的可以让测试变得更好。
1、确定压力测试模型
在压力测试过程中,压力测试模型让我们的测试更有针对性。之前的一个做法是,我们会以目前线上的交易量为基础,推算一个未来某时间的交易量,得到一天的交易量,在折算在工作的8小时或其他几个小时内去处理,得到一个预期各交易类型的tps,计算出并发的用户数。在设置并发、预热、减少压力的策略等等。这种测试方法下,我们可以得到这样一个理论上的交易量-时间图:
但很奇怪的是,我们明明有线上的数据,为什么不直按照线上的数据放大几倍为未来的交易量级,直接进行测试呢?
所以我们拿了线上的脱敏数据,分析了一个月的交易数据,把每天按分钟划分为1440时间点,计算每个时间点交易量的平均值,这样的到了1440个交易量的点:
按照这个量的X倍的到每分钟的交易量和计算分钟的并发数进行压力测试。
另一个就是金额,以前通常的做法会选择一定范围内的随机金额。但是在交易类系统中,金额在风控、费率等计算中也是很重要的。所以我们分析了线上的一天的交易金额,得到每分钟交易金额均值作为每分钟内交易金额的随机的范围:
我们可以看到真实场景下并非交易量大的时间,交易金额就一定大。采用这样一个金额的差异化,比之前任何时间点都在一个范围内随机差异或者是固定值要来得更贴近现实。
2 计算处理时间
在有比较好的测试模型后,进行测试后。我们通常需要得到系统的处理时间。在没有规范的日志情况下,数据库里的记录会是一个好的选择。数据库中一般都会记录交易的创建时间、完成时间、更新时间等。借此,我们可以得到系统内部处理等时间分布:
计算一些我们关心的处理时间的值,例如:
平均值:HandlerTimeAVG: 1461.93 ,
最大值:HandlerTimeMAX: 86433.00 ,
最小值:HandlerTimeMIN: 0.00 ,
中位数:HandlerTimeMEDIAN: 798.00 ,
标准差:HandlerTimeSTD: 4102.73
此时我们不难发现在时间点200左右,交易量是低的,而处理时间有几个点却很高。按正常时间点看,是在凌晨的2-4点。而此时正是几个批处理任务的时间点。是否是批处理任务对交易有影响呢?
ok,通过这两个小例子,用数据分析的方法,一个可以让测试模型更接近真实环境,一个是发现可能的潜在问题。当然,随着业务的发展,有了更新的数据后,我们需要重新分析数据。重新分析的数据等节奏,可以按压测的需求进行,甚至集成到压测步骤中。构建一个自动化压测系统可以参考:《构建自动化性能测试系统的实践》。另外,在一些推荐和风控场景下,我们还可以对用户的属地信息、年龄信息进行分析,构建相应信息的交易来看系统的行为。
【重要】更新数据,进行分析是极为重要的,它使我们的模型更接近未来几个月的真实的环境,才可能提前发现潜在问题,及早应对。
有不足之处,欢迎指正,共同学习。
多谢