场景模型驱动自动化测试在盒马的探索及实践

简介: 盒马业务有如下几个特点:线上线下一体化、仓储配送一体化、超市餐饮一体化、经营作业一体化、多业态与平台化。在以上的种种原因,生鲜及物流体验是盒马的特点,但仓储配送一体化作业中,如何能更高效的提升测试效率也是盒马质量团队的重点探索。

image.png

作者 | 钦伟
来源 | 阿里技术公众号

一 引言

盒马业务有如下几个特点:线上线下一体化、仓储配送一体化、超市餐饮一体化、经营作业一体化、多业态与平台化。

在以上的种种原因,生鲜及物流体验是盒马的特点,但仓储配送一体化作业中,如何能更高效的提升测试效率也是盒马质量团队的重点探索。

二 背景及待解决问题介绍

1 盒马自动化体系发展新挑战

在盒马,前期业务在狂奔,自动化基础较薄弱,近三年来,经过盒马人的不断突破,已经具备了一定的自动化体系,因为盒马业务的特点,盒马属于麻雀虽小但五脏俱全,有独立App,有自营的物流体系,有自己的供应链体系,因此在自动化方面,我们从最基础的单元测试、到接口测试、再到领域场景自动化及跨领域的自动化以及端的自动化方面都有积累。即便如此,我们的代码覆盖率在超过50%之后很难有比较大的提升,另外,代码的覆盖并不能全部代表业务场景的覆盖,一些线上漏测的问题仍然偶尔发生,因此,对于盒马来说,基于较全场景的测试是必须。

image.png

在这种背景下,盒马质量团队进行了较全场景驱动自动化测试的探索,利用线上数据建立测试场景模型。下面会更加详细的进行讲述。

2 业务场景全覆盖的挑战

从业界来说,比较难的也同样是如何用比较简单的手段做到业务的全场景覆盖,对盒马来说也同样。

首先,盒马的业务场景众多,包括inbound与outbound全流程,端到端的全流程多业态,含O2O模式、B2C模式、F2模式、Mini模式、Mall模式、X会员店模式、产地量贩模式、盒马邻里模式等。这么多种业务场景很难一一枚举。

其次,业务场景自动化编写效率也较低,在人工枚举场景,脚本化实现,这种效率比较低,场景难以枚举全,容易遗漏。

业务场景的真实覆盖率也难以度量,人工枚举的业务场景极易有遗漏,线上已频发漏测问题,无法覆盖线上全量场景,同时测试的场景覆盖率难以衡量,需要找到线上场景分母。

传统自动化来说,校验一般基于字段级别,容易遗漏。传统校验方式根据预期逐个字段加断点校验,新增字段或缺失字段极容易造成遗漏。

image.png

因此,在这种多种挑战下,我们尝试了基于线上海量数据模型构建全行经模型,同时用场景驱动自动化执行的方案。

3 场景模型驱动自动化的思考

回到本文初心,我们希望通过线上场景来驱动自动化测试的方式进行测试场景的全量覆盖。思路如下:

一、场景业务模型构建:重点在于如何自动化的构建出场景化的模型数据。大致的思路为:1)线上执行过后的订单数据存在诸多特征;2)根据线上落盘数据进行特征值分析;3)构建数据特征集合与对应的样本数据;

二、执行链路构建:重点在于如何自动构建出克执行的系统调用链路。大致思路为:1)基于落盘数据获取线上执行全链路的所有鹰眼;2)根据鹰眼(trace)及系统调用关系构建执行链路;3)执行链路编排构建链路执行能力;

三、执行结果的校验:重点在于如何自动的进行结果数据的一致性校验。大致思路为:1)所有的数据最终会持久化落盘;2)基于持久化数据进行全字段对比;3)忽略规则配置;

image.png

三 解决思路

1 模型驱动自动化解决策略

结合上文的背景及思考,推演出本文的模型驱动自动化解决策略包含:特征提取、场景建模、链路执行、结果验证、覆盖率分析、缺陷定位及报告。

image.png

2 业务场景建模问题定义

针对业务场景模型,我们首先要思考我们面向的是什么系统,系统的规律是什么,该系统的哪些数据可以被规则化出来的,如何规则出来,最终如何表达,带着这些问题我们一步步介绍我们的解决方案。

image.png

业务场景建模-特征提取方法

本节重点介绍特征提取的通常方法,当前阶段,我们是以数据库的全量数据作为特征提取的来源,当然不少团队也在尝试使用接口调用过程中的全量入参数据。具体为:

1)DB全量数据查询:通过odps查询方式获取全量多表关联数据,用以作为分析的数据源。

2)数据的聚合:对于查询的数据进行信息补齐后,字段打平,采用聚类的方式针对每一字段进行聚合,以出现有限数量的字段作为特征字段进行基线特征的沉淀,对于离散型的数据会选择合适的区间进行分段处理。

3)特征推荐:针对上述聚合的内容进行推荐,此部分会将潜在的特征字段全量进行推荐。

4)特征基线沉淀:基于推荐的数据,结合专家经验进行特征字段的选取,并进行标注选择为基线特征。

image.png

接下来一一根据细化场景进行介绍。

业务场景的建模-特征提取过程

如下图所示,为数据表数据示例,从数据层面可以看出,有一部分字段是有意义的,如isParent是否主单,businessType业务类型,orderTerminal订单终端类型等等,也有一部分字段是离散且无意义的,如orderId订单ID,itemId商品id,GMTCreate创建时间等。特征提取的过程目标就是自动的提取出有意义的字段,忽略无意义的字段。

image.png

实际实践过程中,我们通过不断的迭代以提升特征的精准度与全面度,具体的核心几个提取过程为:

1、特征扩充:元数据中的字段有可能为原始数据,这部分需要关联到具体数据表并找出有意义的字段。

2、特征分类:根据数据的聚合,对于有意义的离散类型数据,比如订单总价,往往我们希望得到零价订单,高值订单及普通订单三类,这三类是未自动打标的,需要我们聚合出范围在特征提取过程中动态识别并分类。

3、特征聚合:依赖于特征的规则,进行所有字段的聚合,最终根据枚举类型字段出现次数进行有效判断,目前我们设定的值为20,这个值可以动态调整,仅仅为参考值而已。

4、特征决策:针对聚合出来的潜在特征,进行基于代码、经验、默认值等多种维度的判断,最终进行特征的推荐,这部分因为业务属性比较重,我们在推荐出来的同时,最终更依赖于专家经验进行字段的最终判断,目前推荐出来和最终采纳的比例约为50%,我们后续会升级算法和参考维度进一步提升采纳率。

image.png

接下来,针对以上流程中关键环节会进行一一介绍。

1)特征提取-特征扩充

本文举例商品及仓的场景,对于商品根据商品id关联找到对应商品明细,再将商品明细中有意义的字段,比如:是否是危险品、是否是紧急配送商品、商品的标签、商品的状态等等查询出来关联主数据,对于仓关联查出仓的类型和仓的标签,如此可基于场景的主模型数据进行分支场景的多层级关联,将需要关注到的场景维度值尽可能多的纳入到数据模型中。

image.png

2)特征提取-特征聚类

本文举例对于加工时长bomCost字段,对于标品来说是0,对于加工品来说,比如鱼类,需要增加15分钟宰杀作业时间,对于凉拌菜等需要增加10分钟进行制作等等。此处会单独将特定字段进行区间分类,如此将分类后的值进行特征的挖掘基础,即可将离散的值变得有意义。

image.png

3)特征提取-特征聚合

将所有数据进行扩充完毕后,将所有相关字段进行打平处理,根据相同字段进行值的聚合,相同值记录次数,不相同时进行归类,如此便可将相关数据进行初始化的数据处理,然后根据聚合出来的数据进行默认值个数的判断进行特征的推荐。

image.png

4)特征提取-特征决策

依赖上述聚合出来的全量潜在特征数据,在特征决策模块会基于代码中抽象出的特征字段进行匹配,当然最重要的是依赖于业务领域的测试专家经验进行主动识别标注,最终沉淀出领域的基线特征集合。

image.png

以盒马某业务领域为例,下图展示的是最终有效的特征集合,根据基线特征,我们的做法是都标注了具体的含义,如此,便可很容易根据一个领域的业务特征识别出该领域的数据场景。

image.png

同样,根据特征情况,也可以刻画出每个领域的特征模型,如下图所示,很轻松的看出领域的全量特征,同时根据每个特征,可以清晰的看出每个特征值的分布占比情况。

image.png

业务场景建模-场景提取

有了基线特征后,基于基线特征形成解析规则,再将全量数据基于特征规则匹配处理,对于命中规则的进行打标处理,即可识别出匹配基线特征的数据集合,这些数据集合对于每一条数据代表的特征组我们称之为场景。具体的处理流程如下图所示。

image.png

进行特征规则匹配处理后,可识别出场景集,这些场景的集合对我们来说至关重要,因为这些场景集合从一定意义上要代表我们的线上全量场景。如下图所示,除了有场景的推荐,还有场景对应的数据的推荐。这些数据后续我们会进行处理并进行执行链路的驱动。

image.png

以下为推荐以驱动链路自动化执行的场景及数据情况。

image.png

3 执行链路分析及构建

前文有介绍盒马很多业务领域都是链路式驱动类型,所以对于如何构建出领域的执行链路很关键,我们的思路是通过系统的调用日志及鹰眼trace相结合的方式进行聚合清洗得到领域的大概执行链路推荐,这里面的推荐会有多种情况。整体的思路如下图。

image.png

执行链路推荐出来后,这时候的链路还是无法执行的,我们的目标是根据推荐能够自动生成执行链路,只是当前基于进展的考虑,我们先将推荐的链路进行人工链路编排以执行场景模型中的数据。以盒马"履约"领域的系统执行流程链路为例,如下,我们将对所有业态的数据的处理进行统一流程编排,如此,即可更大限度和真实的处理模型数据。

image.png

4 数据校验

数据执行完成之后,对于自动化来说一个最关键且有意义的事情是进行结果的校验,为了能够更全面的比对结果,我们将执行链路进行线上生产环境和测试环境的双向执行,对于两套环境的结果数据进行全量的数据比对,可将比对结果精确到像素级别。

image.png

5 场景覆盖率分析

针对场景覆盖率,我们将场景模型所转换的测试数据对应的全量场景与线上全量场景进行比较得出场景覆盖率。在今年的OKR目标下,我们也是目标将业务场景覆盖率达到80%以上。

image.png

四 产品解决方案

1 产品解决方案架构图

结合以上核心模块的介绍,系统的产品解决方案框图如下所示,基于核心的场景模型驱动自动化执行过程为基准,分为业务场景建模模块、测试数据生产模块、回归策略执行选择模块、链路用例执行、结果校验以及结果推送模块。基于运维视角,包含统计大盘、用例管理等。

image.png

在盒马场景探索的场景模型驱动自动化,已经在交易、履约、商品、配送、自提等诸多领域进行了实践,并取得了一定的成果。同时在发布回归、小量数据的常规化压测、系统重构、线上业务巡检等诸多场景中获得了不错的使用。

五 实践结果

基于场景模型驱动自动化的模式,已经在盒马事业群内多个团队进行了推广接入使用,整体上累计沉淀有效的场景化用例2000以上,场景的特征覆盖率均大于90%,各个领域新接入业务的自动化构建成本直线降低80%以上,有效的解决了传统脚本方式的人工依赖过重,引流方式无法覆盖链路场景的问题,也成为团队内重要的发布前的回归可信赖保障手段。

1 在盒马交易领域的实践

盒马交易域是比较早的实践方之一,基于上述方案,交易域进行了整体的方案对接,沉淀了大量的场景及回归用例。尤其交易领域在覆盖率提升方面做了较多的工作。

在交易领域的特征覆盖率的提升经过了以下几个阶段,初始的测试单据(日常测试单据+链路自动化单据)特征覆盖率仅50%左右,覆盖率确实不高,通过覆盖率报告的分析发现,除了确实无单据覆盖的特征,还有一类问题是有单据覆盖但是平台无法匹配上的特殊字符类特征值或不可穷尽枚举类特征值,经过二次处理后,特征覆盖率提高到65%左右;第三阶段,现有的全业态全场景用例构建出来后覆盖率提升到90%左右,剩余的10%特征基本是线上特定时期小概率出现场景阶段性单据没分析到或暂时无法构建数据的特征,经过指定单据有针对性地补充后特征覆盖率达到96%,至此覆盖率达到我们期望的95%以上,基线用例搭建完成。

image.png

因此,从最终结果看,交易领域属于基于最终结果反推过程执行,整体接入过程,基于场景构建与链路编排的执行能力,结合自身能力的构建,接入过程约三周,推荐场景累计2000多例,对8种业态进行全面支撑,能够做到快速的回归覆盖,很好的做到需求的高质量持续交付。

image.png

2 在盒马其他典型领域的实践

在商品领域,从全新的领域对接,整体投入2天,完成500+线上场景的接入,整体投入成本下降高达90%,代码覆盖率在原有脚本自动化基础上提升了28%,快速达到50%以上。

在履约领域:整体沉淀场景化链路用例1000+,成功率95%以上,特征覆盖率95%以上,链路的仿真精准度90%以上,全面保障履约域的质量。

在配送领域:配送域沉淀场景化链路用例300+,作为作业操作的系统,链路场景的覆盖率97%以上,特征覆盖率100%,新业务的自动化成本下降80%以上。

image.png

六 未来展望

基于场景模型驱动自动化实现,只是开始,远没有终结,前期只是针对一部分领域进行了探索实践落地,接下来希望能够扩展更多领域的同时,更加深入的挖掘自动化用例自动生成及测试数据保活的能力,使之能够更好的服务好盒马的各团队业务,也希望通过本文的分享,启发更多的团队一起投入进行探索并做出尝试。

image.png

七 结束语

本文的探索方案前后历时近一年半的时间,从0开始投入,团队也累计多人参与,投入虽大,但给我们的质量保障工作带来了不错的回报,接下来的时间里也会继续前行探索,勇于尝试。


技术精彩问答:锦囊妙计

相关文章
|
4天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
4天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
4天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
4天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
|
4天前
|
敏捷开发 Java 测试技术
探索自动化测试:从理论到实践
【10月更文挑战第39天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的船只。本文将作为你的航海图,指引你理解自动化测试的核心概念,并分享一段实际的代码旅程,让你领略自动化测试的魅力和力量。准备好了吗?让我们启航!
|
8天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
9天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
|
11天前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
19天前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
41 2
|
19天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。