美团外卖中,自动化测试的实践与落地(三)

发表于:2022-10-10 09:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:美团技术团队    来源:掘金

  5. 测试流程
  AlphaTest的核心测试流程始终聚焦在用例的录制与回放环节,整个流程涉及到自动化任务触发、回放集群调度、断言服务、消息推送等核心模块。
  以UI自动化和埋点自动化的流程为例,AlphaTest以业务团队为基本单元,可以和各团队的测试用例进行关联,定时同步状态。同时利用需求评审线上化做为基础,将自动化用例和研发流程中的PR、集成打包、二轮回归等节点相结合,定时触发自动化用例并将结果报告推送给相关负责人。
  录制用例:
  [1] 首先在AlphaTest平台选择要录制的测试用例,打开待测试App进行扫码即可进入用例待录制状态,此时可以设置用例需要的前置条件(账号信息、Mock数据、定位信息等),之后点击开始按钮后,手机便会自动重启,开始录制。
  [2] 用户按照测试用例步骤,正常操作手机,AlphaTest会将用户的操作行为全部记录下来,并自动生成语义化的描述语言显示在AlphaTest平台上,与此同时产生的网络数据、埋点数据等校验信息也会一并存储下来。
  [3] 在录制的过程中可以快捷的打开断言模式,将页面上想要校验的元素进行文本提取/截图等操作记录下来,用于后续回放过程中对相同元素进行校验。
  [4] 测试步骤全都执行完毕后,点击保存按钮即可生成本条自动化用例。
  用例回放:
  [1] 扫描对应自动化用例的二维码即可进行回放,回放过程中会将用户录制的行为、网络数据进行一比一还原,并且辅助有全过程视频录像,用于后续问题排查和溯源。
  [2] 回放过程中碰到断言事件时,会将断言的元素进行文本提取/截图,上传至AlphaTest平台。回放完成后,会将回放时候的断言截图和录制时的断言截图进行图像对比,作为整个测试结果的一项。
  [3] 回放过程中的埋点数据也会一并记录下来,并和录制时候的埋点数据和上报时机进行对比,自动提取出其中的差异项。
  [4] 回放完成后,会生成完整的测试报告并将结果通过OA推送至相关人员。
  回放计划:二轮回归测试中,回放用例数量多达几百条,为了做到全流程的自动化,我们提供了回放计划的概念,可以将多个自动化用例进行编组管理,每一组就是一个回放计划。触发一个计划的回放即可自动触发计划内的所有自动化用例。整个计划都执行完成后,会通知到指定的计划负责人或群组。
  5.1 自动化任务触发
  在整个外卖C端敏捷迭代的流程中,打包平台主要承接了业务需求发起到需求交付的流程,作为AlphaTest的上游平台,可以提供打包信息并触发自动化用例回放任务。以下简单展示AlphaTest与敏捷协同平台的交互流程:
  5.2 回放集群调度
  整个测试过程真正的解放双手,才能算的上是自动化。因此,我们着手搭建了自己的自动化机器集群,可以 24小时不间断的执行测试任务。为了保证任务回放能够顺利完成,我们在不同阶段增加了相应的保活策略。在极大程度上提高了任务执行完毕的成功率。
  执行流程:回放任务通过用户在平台手动触发或者二轮自动触发。新增的回放任务经过任务拆分系统拆分成n个子任务,加入到不同设备的回放任务队列中。每个子任务经过占用设备->安装待测App->应用授权->打开scheme->上报结果等步骤完成回放操作。
  节点保活机制:针对回放流程中每一个节点,失败后进行N(默认为3)次重试操作。减少因网络波动,接口偶现异常导致的回放失败数量。
  子任务保活机制:每个回放流程,失败后进行N(默认为3)次断点重试。减少因设备异常,SDK心跳上报异常导致的回放失败数量。
  父任务保活机制:一个父任务会被拆分成N个子任务,当其中的一个子任务S1在节点保活机制和子任务保活机制下仍然执行失败之后,父任务保活机制会尝试将子任务S1中未执行完毕的用例转移到其他活跃状态的子任务中。减少因设备异常,设备掉线等问题导致的回放失败数量。
  5.3 断言服务
  用例断言是整个自动化用例验证的核心步骤,我们的断言服务依据用例的实际情形可以分别进行文字与图像的断言。其中图像断言服务依托于自建的图像对比算法服务,可以高效进行录制回放断言图像的对比,图像对比准确率可以达到99%以上。
  录制阶段:
  [1] 录制时增加断言决策信息的自动采集。
  [2] 和正常流程一样,提取区域的截图信息。
  [3] 如果是文本组件,则提取文本内容,如果是图片组件,则提取图片二进制编码或图片URL,同时提取区域内的布局信息。
  回放阶段:
  [1] 回放时,提取和录制时一致的内容(文本信息、图片编码、区域截图、布局信息)。
  [2] 将回放时的断言信息上传至AlphaTest平台。
  [3] AlphaTest平台对断言结果进行校验,首先是基于模型的图像对比,如果判定为一致,则直接标记结果。
  [4] 如果判定为不一致、则匹配“断言失败数据集”,如果能够匹配上,则标记结果。如果匹配不上,则需要人工选择匹配类型。
  [5] 匹配类型为“文本校验”、“根据图片信息校验”、“人工校验”。如果前两项判定为一致,则直接标记结果。如果“人工校验”的结果为确实两张图不一致,则直接标记结果,结束。
  [6] 如果“人工校验”结果为一致,既上述所有判定都不准确,则需要人工对两张图中判定错误的原因进行分类(具体类型待定),同时将断言存储到失败数据集。
  [7] 模型自动训练,当数据集超过一定的阈值、通过定时触发、或者手动触发的方式,触发模型自动训练,训练完成后自动部署到AlphaTest平台,不断迭代。
  图像服务:图像对比模型采用基于度量学习的对比算法,将图像对的一致性判别转换为图像语义的相似度量问题。度量学习(Metric Learning),也称距离度量学习(Distance Metric Learning,DML)属于机器学习的一种。其本质就是相似度的学习,也可以认为距离学习。因为在一定条件下,相似度和距离可以相互转换。比如在空间坐标的两条向量,既可以用余弦相似度的大小,也可以使用欧式距离的远近来衡量相似程度。度量学习的网络采用经典的Siamese结构,使用基于resnext50的主干网络提取图像的高级语义特征,后接spplayer完成多尺度特征融合,融合后的特征输出作为表达图像语义的特征向量,使用ContrastiveLoss进行度量学习。
  [1] 预训练过程:resnext50网络是使用ImageNet的预训练模型。
  [2] 数据增强:为增加数据的丰富性、提高网络的泛化性能,数据增强的方式主要包括:图像右下部分的随机剪切和添加黑色蒙层(相应改变图像对的标签)。这种数据增强符合控键截图实际情况,不会造成数据分布的改变。
  [3] 对比损失:对比损失函数采用ContrastiveLoss,它是一种在欧式空间的pair based loss,其作用是减少一致图像对距离,保证不一致图像对的距离大于margin,其中margin=2。
  [4] 相似度量:相似度量也是采用计算图像对特征向量的欧式距离的方法,并归一化到区间[0, 1],作为输出的图像对相似度。
  5.4 消息推送
  消息推送作为回放流程的最终环节,我们依赖于美团内部自建的消息队列服务与OA SDK消息推送能力,可以进行测试报告的实时推送。在此之上,还可以针对不同团队的推送诉求,做消息模板的定制化。
  消息定制:消息推送与触达的核心,是满足业务诉求;不同业务对自动化测试报告中各项指标的关注点不同,这就需要AlphaTest具备消息推送定制的能力;将消息推送的模板以配置文件的形式提供出来,不同的业务使用不同的业务消息配置文件;再利用OA提供的图文、多媒体等消息推送能力,可以将自动化测试报告的各项指标自定义拆分;除此之外,消息还需要减少冗余,在这个信息泛滥的时代,我们愿意为无孔不入的消息、通知做减法,只将最重要、最核心的消息推送给最需要的人,既可以推动自动化测试流程的高效流转,又可以让各相关业务人员享受到自动化测试能力的便捷性。
  一键触达:以往的研发人员冒烟测试,主要依赖于测试人员在用例管理平台建立测试计划,研发人员根据用例进行手工用例测试结果标记,之后去提测完成后续流程。这中间缺失的主要环节是,难以对研发人员冒烟测试的质量进行把控。而AlphaTest正可以解决此问题,流程转换为,研发人员在敏捷协同平台触发一键提测流程,调用AlphaTest的自动化测试能力对冒烟用例进行自动化测试回归,完成之后将测试生成的测试报告同步提测平台,作为研发人员冒烟的结论依据,同时在冒烟过程中发生的问题,也可以及时通知到对应的研发人员与测试人员进行改正。既保证了质量,又避免了人力空耗。
  6. 落地与实践
  外卖C端主要承担了用户在App端点餐、下单、配送的所有核心流程,场景繁多、业务复杂,这也给测试人员的版本测试带来了诸多挑战,其中最核心也最耗费人力的便是二轮回归测试环节。目前,C端采用的双周敏捷迭代的开发方式,每个迭代周期给测试人员用来进行二轮核心流程回归的时间为三天,为此C端测试团队投入了许多人力资源,但即便如此,仍难以覆盖全部流程;而AlphaTest的设计初衷也正是为解决此问题——UI测试流程全覆盖及自动化验证。
  6.1 业务共建
  用例的转化与维护
  [1] AlphaTest 在外卖C端测试团队的落地初期,我们采用了共建的模式,也就是业务研发人员与对应测试人员共同来进行用例录制与维护的工作;推荐这种工作模式的核心原因是,在C端功能迭代流程中的二轮周期的原有工作模式为,研发人员进行二轮冒烟测试,完成测试之后提交二轮包交由测试人员进行二轮回归测试,所以这本来就是一个双方都需要参与的环节;而二轮测试作为版本上线前的最重要一个测试流程,保证核心流程的正常也是测试人员与研发人员所关心重点。
  [2] 经过多轮的使用与磨合之后,这种模式被证明是行之有效的,在整个C端二轮用例的转化过程中,测试人员主要负责了用例的录制与迭代流程,研发人员则主要负责版本回放数据的统计及问题用例的发现与解决。
  外卖二轮落地情况
  [1] 目前,AlphaTest已经在外卖多个业务落地,支持了大于15个版本的二轮回归测试,用例覆盖率达到70%。
  [2] 覆盖了Native、Mach、React Native、美团小程序、H5 技术栈的测试工作,能力上可进行支持:UI自动化测试、埋点自动化测试、动态化加载成功率自动化测试、无障碍适配率自动化测试。
  未来,我们会朝着“智能化”和“精准化”两个方向探索,覆盖更多测试场景的同时,更进一步提升测试人效。
  6.2 实践效果
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号