共计 1957 个字符,预计需要花费 5 分钟才能阅读完成。
背 景 \
在产品需要迭代过程中,功能测试与回归测试是必不可少的两个环节。对于改变较大的我的项目,首先,确保性能的实现合乎产品逻辑并做到 100% 没有问题离不开无效的功能测试;其次,我的项目中很多逻辑的改变都是在原有性能的根底上进行的,这时候就须要肯定的回归测试。通常,在功能测试时,人工 case 不能模仿线上用户的所有行为,且具备肯定的主观性;回归测试时,采纳全面回归的形式往往也随同着测试老本的减少。一个好的形式就是利用线上流量来验证。
一方面,通过记录线上流量,在沙箱或者测试环境回放,来发现新分支代码是否可能让零碎性能失常运行,从而升高代码变动给整体零碎带来的危险;
另一方面,通过线上流量进行线下回归测试能够在保障全面回归的状况下无效的节约测试老本。
简 介
流量回放
应用实在的线上流量进行线下回放测试,节约回归测试老本,保障代码品质,进而缩小线上事变。
流量平台搭建老本
全链路流量平台具备的能力
能录制线上实在流量;
能实现海量数据的并发申请;
能反对常见协定的申请;
对线上尽量利用通明,也就是说无侵入性;
工具应用简略,可能满足各场景流量回放。
能够看出依照以上的能力需要搭建一个流量平台须要投入肯定的老本,而咱们目前思考的是针对某一个我的项目的疾速流量回放,可能并不需要设计这么简单并且重量级的流量平台。那么,如何疾速的实现满足业务需要的流量回放呢?基于 RPC 接口的流量回放,简略、快捷、容易上手。接下来我将通过理论的业务场景来介绍下流量回放在采货侠卖场侧的业务利用。
流量回放的利用
1、我的项目背景
采货侠卖场侧新增后盾配置性能且还波及到对成拍逻辑的改变,须要验证新性能的正确性并对多种成单场景进行肯定的回归测试。
回归工作量大须要无效的伎俩进步测试效率;
成单逻辑不容出错须要 100% 的保障。
2、计划
流量回放
回归测试:应用实在的线上流量进行线下回放测试,比照不反对议价性能的商品线上、线下成单后果的一致性;
功能测试:应用实在的线上流量进行线下新性能的验证。线上放弃原有 Apollo 配置逻辑,线下利用新开发经营后盾的配置性能。放弃雷同配置利用线上流量数据通过新开发分支代码运行获取相应的成单后果,验证补贴后盾和议价后盾性能的正确性。
长处
能够高度联合业务逻辑,实现细粒度定制化流量复制;
解放局部回归测试的人力老本,晋升测试效率;
对业务的用例场景更加主观,保障代码品质,进而缩小线上事变。
3、外围性能
流量采集
通过云窗获取相应要求的线上商品信息以及对应的最高出价和成单后果
将云窗所得线上数据的相干信息写入到数据库对应的字段中
流量回放
代码设计逻辑
首先,通过读取线上商品的保底价映射成雷同价格的线下商品参拍暗拍卖场,接着模仿用户在采货侠卖场中的实在行为进行流量回放,并将线下的商品数据和成单后果写入数据库表;整个过程中采纳了多线程以及数据库表批量减少、查找来进步运行效率。
数据存储后果
表中线上、线下数据一一对应存储,清晰、明了有利于后果剖析。
后果剖析
后果剖析思路:调用开发分支在测试环境进行流量回放,失去相应的冀望后果后和线上同一商品的相应后果进行比拟,判断后果是否统一。校验的字段可依据理论需要场景进行相应的变更,在本次案例中验证的字段是成单后果和补贴金额。
回归测试验证逻辑
读取不议价商品的流量回放成单后果和线上相应数据的成单后果进行比照,判断后果是否统一。如下图所示为成单验证后果:线上和线下的成单后果全副是统一的,这阐明新需要代码的开发未影响到原有不议价商品成单逻辑的正确性。此外,采纳该办法进行测试使原打算进行回归测试的工夫缩短了 3 倍多,这无效的节约了回归测试的老本。
功能测试验证逻辑
为了做进一步的性能保障。通过获取线上实在的用户流量,在保障线上原有配置和线下经营后盾统一的状况下,调用新分支代码实现线下流量回放失去相应的预期后果,而后和线上后果进行比对。首先,比照线上、线下成单后果是否统一来验证成单逻辑的正确性;其次通过比拟线上、线下补贴金额是否统一来验证经营后盾补贴配置性能的正确性。本次验证不关怀成单后商品的状态流转,而线上局部商品状态曾经流转,所以验证成单后果时,能够把生成订单后流转的一些状态重置为成单状态和线下成单后果进行比对。逻辑如下:
验证后果如下:
首次验证后果中呈现了局部商品线上、线下成单后果不统一,需进一步剖析解决
问题 1:线下局部商品状态始终在售卖中
起因:有局部商品调用完结竞拍没有胜利
解决:商品调用完结竞拍失败后持续从新调用
问题 2:线上商品成单,线下商品却是流拍
起因:线下经营后盾局部价格段的设置没有和线上的保持一致
解决:保障线上、线下各价格段补贴、议价金额统一
确保线上、线下配置统一的状况下,应用优化后的代码从新进行流量回放,能够失去雷同成单后果和补贴后果。阐明经营后盾配置性能的代码实现以及成单逻辑都是正确的。