目前京东APP整体UV相对于去年日增加2000w以上,且处于逐年递增的状态,业务需求激增的同时也带来页面数量和功能的成倍增加,测试人员的业务压力也随之增大。京购小程序也面临同样的问题,作为京东创新业务和POP商家生态主要阵地,全功能对标京东App,在22年承接微信一级入口日均曝光1100W,相对于主站迭代周期更加频繁,达到一周两次。在此背景下,单纯的依靠传统自动化case进行覆盖不能很好地解决测试成本激增的问题,而且维护越来越多的自动化脚本还会带来额外的负担。那么具有不依赖脚本书写、自动探索页面元素、自动检出页面缺陷的UI遍历工具更适合当下业务高频迭代的需要。传统的UI遍历技术依赖uiautomator和wda框架获取页面Dom数据结构,然后解析Dom结构并筛选有效可操作元素进行遍历,并在遍历过程进行简单的稳定性断言。但是传统技术方案具有稳定性差,不能兼容小程序、H5等多端业务形态,断言能力太少等问题。业界内也不断在此基础上演进一些新的技术方案,例如结合AI的智能探索方式最大程度提升遍历效果、利用yolo目标检测模型识别UI类问题、集成图像视觉获取页面元素等等,大家都在原始遍历能力的基础上寻求演进更适合自己应用的UI探索方案。京东也在这方面不断深耕,期望自己的遍历工具实现更全面的页面元素遍历方式,集成丰富的TestbyAI智能断言,且能做到跨多端问题巡检的能力,最终目标是辅助测试人员对页面进行完善的功能兜底测试,前置发现更多问题减少线上事故,有效保障应用质量。
Monkey作为传统移动端稳定性测试工具之一,向系统发送随机点击、滑动、横竖屏等事件流,实现对正在开发的应用程序进行压力测试。
与Monkey的随机性相反,UI遍历需要提前在页面捕获可操作元素,然后再进行点击、滑动等与元素之间的交互,在捕获可操作元素上目前存在两种方案,一、通过捕获页面中的GUITree根据标签属性获取可以操作的元素,这种方式适合相对开放的Android系统。二、通过获取应用程序截图,然后通过图像视觉分割页面,通过OCR文字识别技术和ICON目标检测的方式获取页面元素,此方式弥补了第一种方式的局限性,更加具有普适性,一般应用于H5、小程序、iOS等不易通过视图树获取元素的界面。在操作元素的过程中,可以根据跳转的逻辑和获取的页面截图判断页面中是否存在UI类异常,文本显示异常,功能异常等等,相对于Monkey单一的检测能力和场景局限性,UI遍历技术的场景定制化和检测能力要更加强大,但压力效果会相应降低,如下图1:Monkey效果展示,图2:遍历效果展示。
图1
图2
在遍历框架技术选型上,力求方案能够兼容京东目前的多种业务场景,除了兼容基本Android端和iOS端,同时还要满足小程序端和H5页面的业务诉求,在此需求背景下,结合传统dump hierarchy获取视图树和openCV页面分割两种技术手段,可以满足多端的页面元素获取诉求。在此过程中iOS端也经历过从视图树方式到图像分割方式的技术转型,主要原因还是iOS端获取视图树API性能问题,在某些极端场景下获取页面元素时间已经长到无法容忍的地步(如多商品购物车场景),所以切换成图像分割的技术方向。此文也会从多个方向更深入介绍此方法的实践细节,重点涵盖以下内容:除了使用传统的通过Dom解析页面中可操作元素,在不易获取Dom结构的页面中,例如小程序,H5等页面,我们采用基于截图解析图像的方式获取元素,其实现原理是截取应用程序页面截图,借助穹天图像saas服务分割页面成若干个单元格,遍历每个单元格经过AI服务识别单元格中的不同元素,最终获取整个页面中的若干元素和对应坐标,如图3。1. 图像预处理,包含裁剪,过滤掉状态栏、导航栏、黑边场景,同时将图片灰化、二值化,方便统计像素值。2. 横竖方向分割,把横纵向黑白像素集合多样性作为判别标准,识别UI区域和非UI区域,根据临界值进行横竖分割。3. 元素聚合,横向两个UI区域间隔较短的进行UI聚合,竖向文本区域聚合4. 元素识别,基于YOLO目标检测模型识别ICON,OCR识别文本,经过以上四个步骤,最终可以达到图4中的分割效果
图4
跳转页面过程中的广告弹窗or权限弹窗如果不及时处理,会导致遍历始终处于同一界面,影响遍历效率。那么如何智能高效的处理弹窗?
在我们获取应用程序截图传输到京东穹天图像saas服务中,除了会调用页面分割能力,还会经过弹窗智能判断服务,先通过图像的水平和竖直投影特征判断页面是否存在弹窗,如图5,然后通过两种方式来进行弹窗的处理:一、通过OCR服务判定当前页面是否存在关键字,支持模糊匹配,如果存在则触发文字处理弹窗逻辑,会根据OCR服务返回需要点击的文本坐标,关键字和点击文本映射关系如图6,这种方案主要应用于小程序端权限获取弹窗,可以有效解决小程序遍历过程中需要不断申请权限的特点。二、通过AI服务目标检测识别关闭icon,并根据AI服务返回的坐标处理弹窗,并且此项能力也集成在京东穹天图像saas服务,应用于录制回放、自动化测试等测试工具中。
图5
图6
页面的唯一标记是记录遍历过的页面,记录点击生效事件,保证页面元素不重复遍历的关键参数,在Android端可以很方便的采用页面activity进行标识,但是使用图像技术获取页面元素的小程序、H5、iOS端如何生成页面唯一性标识呢?从初期采用页面图像Hash作为页面的唯一标识,通过不同页面的Hash对比获取两个页面之间的相似度,并根据提前设定的相似度阈值判定两个页面是否相同,但是在应用的过程中发现,很多页面之间虽然相似度符合阈值标准,但是实际上页面并不相同,例如:页面特征元素相对较少的情况下,容易引起误判相似,如图7。
图7
那么如何解决这个问题呢?结合传统相似度判别的基础上,再利用上述页面分割获取页面结构的方法对比两张图片中的元素轮廓是否符合阈值要求,如图8,虽然相似度算法判定相似,但是由于结构轮廓不符合要求,则判定两个页面不相似,从而能更精准的保证页面唯一性。
图8
除了基于深度优先遍历原则(Depth First Search),为了更好结合京东分模块的业务形态,重点将指定页面遍历逻辑进行应用,这样能够更好地完成多端的线上问题巡检、大促会场监控、回归测试功能兜底等活动。
由于页面众多,根据用户需要对指定页面进行重点监控,降低主线业务发生问题的频次。方式一 通过uri隐式跳转原理定义的一种uri超链接openApp协议,APP通过openApp链接方式跳转指定页面,利用页面白名单方式在指定区域内进行操作,更快,更高效完成指定页面的遍历任务。方式二 小程序通过官方接口urlscheme.generate,生成url即可实现指定页面的跳转,同样可以实现快速遍历指定页面的能力。移动端页面具有“千人千面”的特性,会根据账号pin值、商品sku等参数影响页面展示不同的元素,为了能覆盖多样化的页面元素,我们加入动态参数设定,在执行任务前用户可以自定义选择决定页面显示元素的关键入参,并设定动态参数,如图9,启动任务之后工具会根据设定的参数去遍历不同的页面,从而达到最大程度覆盖效果。
图9
1. 稳定性问题,结合京东鹰眼崩溃监控平台,在遍历过程中如果发现崩溃问题可以联动鹰眼平台快速做到问题归因。
图10
2. 集成AI服务的UI异常诊断,包括白色块,文字重叠,乱码,文字截断等UI问题检测,如图11-5。
详情请参阅智能测试系列文章《智能测试实践之路 - UI缺陷检测》,链接:
https://mp.weixin.qq.com/s/_gCgA95QB_c1rIM1Oc3Apw
原理:京东ducc统一配置中心动态维护异常词库,通过AI服务中的OCR能力获取页面中的文字集合,结合异常词库匹配进行断言,如图11-4。原理:针对页面始终处于当前页,不能正常返回上级页面的异常,在排除应用强制挽留弹窗的前提下,多次调用系统返回键,结合安卓activity页面标识和小程序等图像页面标识实现返回异常问题断言。原理:根据异常兜底图库,依据图像匹配算法判断当前页面截图中是否存在指定异常图片,从而实现异常兜底断言,如图11-3。原理:结合区域性白屏和黑白屏异常的图像像素特征,计算像素占比对比阈值实现断言,再利用OCR文字识别规避具有白屏特性的正常页面,避免过多的白屏虚警,如图11-1,图11-2。图11 (以上均来自工具拦截线上问题)
截止目前遍历工具覆盖京系APP和京系小程序共计25个,工具在大促断网演练、线上问题巡检、功能回归测试兜底、埋点覆盖、流水线质量门禁等许多场景下都发挥重要作用。提效和发现问题方面,双周迭代周期内单应用执行161.1H,单周提效人日17.62,有效节约人力成本。发现问题方面,以下单以京东主站APP为例,在近2个月线上问题巡检专项测试中,检出问题共计56例有效问题,数据汇总分布如图9,其中通过AI图像异常检测的有效问题占比68%,可见目前基于AI+图像视觉+OCR的智能断言方式在巡检过程中的重要性。
图12
一、楼层遍历自动化(更精准范围的验证),结合京东楼层功能模块化的特性,利用局部遍历、图像diff、版本控制、mock中心等能力,输出一套楼层标准化测试流程。
二、基于强化学习方式的增强型页面探索功能,让页面探索更符合人工操作逻辑。
三、不局限当前AI检测能力,结合图像视觉、目标检测、文本识别等技术探索更多智能监控UI类问题的可能性。