电子商务|场景模型驱动自动化测试在盒马的探索及实践( 二 )


一、场景业务模型构建:重点在于如何自动化的构建出场景化的模型数据 。 大致的思路为:1)线上执行过后的订单数据存在诸多特征;2)根据线上落盘数据进行特征值分析;3)构建数据特征集合与对应的样本数据;
二、执行链路构建:重点在于如何自动构建出克执行的系统调用链路 。 大致思路为:1)基于落盘数据获取线上执行全链路的所有鹰眼;2)根据鹰眼(trace)及系统调用关系构建执行链路;3)执行链路编排构建链路执行能力;
三、执行结果的校验:重点在于如何自动的进行结果数据的一致性校验 。 大致思路为:1)所有的数据最终会持久化落盘;2)基于持久化数据进行全字段对比;3)忽略规则配置;
三 解决思路 1 模型驱动自动化解决策略
结合上文的背景及思考 , 推演出本文的模型驱动自动化解决策略包含:特征提取、场景建模、链路执行、结果验证、覆盖率分析、缺陷定位及报告 。
2 业务场景建模问题定义
针对业务场景模型 , 我们首先要思考我们面向的是什么系统 , 系统的规律是什么 , 该系统的哪些数据可以被规则化出来的 , 如何规则出来 , 最终如何表达 , 带着这些问题我们一步步介绍我们的解决方案 。
业务场景建模-特征提取方法
本节重点介绍特征提取的通常方法 , 当前阶段 , 我们是以数据库的全量数据作为特征提取的来源 , 当然不少团队也在尝试使用接口调用过程中的全量入参数据 。 具体为:
1)DB全量数据查询:通过odps查询方式获取全量多表关联数据 , 用以作为分析的数据源 。
2)数据的聚合:对于查询的数据进行信息补齐后 , 字段打平 , 采用聚类的方式针对每一字段进行聚合 , 以出现有限数量的字段作为特征字段进行基线特征的沉淀 , 对于离散型的数据会选择合适的区间进行分段处理 。
3)特征推荐:针对上述聚合的内容进行推荐 , 此部分会将潜在的特征字段全量进行推荐 。
4)特征基线沉淀:基于推荐的数据 , 结合专家经验进行特征字段的选取 , 并进行标注选择为基线特征 。
接下来一一根据细化场景进行介绍 。
业务场景的建模-特征提取过程
如下图所示 , 为数据表数据示例 , 从数据层面可以看出 , 有一部分字段是有意义的 , 如isParent是否主单 , businessType业务类型 , orderTerminal订单终端类型等等 , 也有一部分字段是离散且无意义的 , 如orderId订单ID , itemId商品id , GMTCreate创建时间等 。 特征提取的过程目标就是自动的提取出有意义的字段 , 忽略无意义的字段 。
实际实践过程中 , 我们通过不断的迭代以提升特征的精准度与全面度 , 具体的核心几个提取过程为:
1、特征扩充:元数据中的字段有可能为原始数据 , 这部分需要关联到具体数据表并找出有意义的字段 。
2、特征分类:根据数据的聚合 , 对于有意义的离散类型数据 , 比如订单总价 , 往往我们希望得到零价订单 , 高值订单及普通订单三类 , 这三类是未自动打标的 , 需要我们聚合出范围在特征提取过程中动态识别并分类 。
3、特征聚合:依赖于特征的规则 , 进行所有字段的聚合 , 最终根据枚举类型字段出现次数进行有效判断 , 目前我们设定的值为20 , 这个值可以动态调整 , 仅仅为参考值而已 。
4、特征决策:针对聚合出来的潜在特征 , 进行基于代码、经验、默认值等多种维度的判断 , 最终进行特征的推荐 , 这部分因为业务属性比较重 , 我们在推荐出来的同时 , 最终更依赖于专家经验进行字段的最终判断 , 目前推荐出来和最终采纳的比例约为50% , 我们后续会升级算法和参考维度进一步提升采纳率 。
接下来 , 针对以上流程中关键环节会进行一一介绍 。
1)特征提取-特征扩充
本文举例商品及仓的场景 , 对于商品根据商品id关联找到对应商品明细 , 再将商品明细中有意义的字段 , 比如:是否是危险品、是否是紧急配送商品、商品的标签、商品的状态等等查询出来关联主数据 , 对于仓关联查出仓的类型和仓的标签 , 如此可基于场景的主模型数据进行分支场景的多层级关联 , 将需要关注到的场景维度值尽可能多的纳入到数据模型中 。
2)特征提取-特征聚类
本文举例对于加工时长bomCost字段 , 对于标品来说是0 , 对于加工品来说 , 比如鱼类 , 需要增加15分钟宰杀作业时间 , 对于凉拌菜等需要增加10分钟进行制作等等 。 此处会单独将特定字段进行区间分类 , 如此将分类后的值进行特征的挖掘基础 , 即可将离散的值变得有意义 。