【干货】通过真机实现页面自动化适配(含直播回放)(1)

在稳定性方面,一个任务执行可能长达数个小时,期间受机器状态等影响可能会出现一些异常,因此我们需要一些任务执行异常的异常处理逻辑。其次是日志debug系统,帮助我们及时的调试脚本执行的逻辑,快速找到问题以修改。对于一个任务我们也需要去监控他执行的状态和结果,关注他的状态,所以需要任务监控体系。

对于一个系统,易用性也同等重要,脚本的编辑时我们需要一个良好的脚本编辑器,具备语法校验和api提示等通用辅助功能。其次对于一个通用的执行逻辑,我们可以通过脚本录制去快速的生成我们需要的脚本。然后对于一些通用的高频的场景,我们可以把他们抽象出基础能力,直接通过勾选机器、app就可以创建任务,而非一定要手动写脚本,比如对于通用的h5页面多app的打开测试。

  整体架构

至此便推导出了目前我们整个系统的整体架构,底层是我们业务涉及的app集合,以及常用的测试机器集合。中间核心是我们的JS脚本引擎,能够简析通用的JS逻辑,左右是我们抽象出的一系列真机操作和图像相关的api,可以通过JS的调用和机器交互。上层是我们系统的通用能力,包含:scheme池、账号池、设备池…等等。

  API设计

在api的设计上,为了能够更好的和机器交互,使它能够更好以及更简洁的完成我们的任务,我们把api分为5类:app操作、图片操作、基础方法、行为操作、同时包含一些常用的复合功能。

app操作包含:安装app并处理通用的app设置逻辑、比如授权权限这类弹窗;通过scheme去打开app;在某个app中去打开我们的h5页面;以及判断当前系统是哪个app,用于判断crash或者唤端是否成功;关闭app、卸载app等。

图片操作包含:获取当前屏幕截图、或者当前屏幕中文字的位置、获取屏幕中某个局部图片的位置、对比图片的兼容性相似度、以及上传图片到手机相册等。

基础的方法包含:执行特殊的adb命令、等待时间、保存结果、记录日志等api。

行为操作api可以去模拟用户的基本行为,包含:滚动、点击、返回、输入等操作。

复合功能类api包含一系列常用api的组合去处理常用的功能,如:处理各种系统、app弹窗、站外H5登录、一些常用app的登录封装、发送钉钉消息等。

以上便是目前的整体架构设计和api设计思路。

  适配流程

基于这样的一套解决方案,以一个标准的h5页面适配流程为例:首先我们正常的开发我们的页面或者局部模块,然后我们可以构建mock数据用于联调和展示,在开发完成之后我们便可以基于mock数据定义各标准状态的截图,然后我们通过scheme池获取到待测试app的打开h5的scheme形式,之后我们就可以编写测试脚本,通过api打开h5页面,然后模拟用户的行为操作页面,再关键状态截图与标准状态对比。之后把这样的脚本在多个机器和app上运行,便可以获取到这个页面的“多状态”X“多机型”X“多app”测试报告数据。

使用案例

===

接下来我们看两个实际的使用例子

  使用案例一

第一个例子是品牌新享搜索功能相关的适配流程。当我们频道货品数量达到一定数量的时候单纯的推荐可能没法很好的满足用户的需求,需要考虑增加搜索功能以满足用户的个性化查找。该搜索功能包含三个状态:搜索框、搜索列表页、搜索结果页。

我们在平台里面创建这样的一个任务,选择机器、并编写自定义测试脚本。

脚本第一段是通过scheme 使用app去打开我们的页面,第二段是找到搜索框并点击进入搜索列表页,然后第三段通过点击搜索按钮进入搜索结果页,并在搜索结果页同标准的页面状态进行对比,得到一个兼容性相似度评分。

整个脚本在不同机器上运行之后就产出了这样的一张适配结果图,我们可以发现在honor 8x这个机器上是有兼容性问题了,页面被撑开了找不到搜索按钮。

  使用案例二

第二个是利用脚本去做线上页面巡检的例子,在充值中心业务中,我们期望定时的去执行任务,输入不同的省、市、运营商的手机号,并判断页面上针对这个手机号是否出现异常展示。

同样是在平台创建一个任务

然后脚本逻辑中,第一段通过scheme去打开充值中心页面,第二段找到输入框,然后最后通过一个for循环对96个不同省、市、运营商的号码输入、判断有没有异常展示,并清空输入框、输入下一个手机号码。

运行中一旦出现异常便会通过钉钉告警。

好处‍‍‍‍‍‍‍‍

我们在多个业务中使用了这样一套方案去帮助我们完成适配以及线上页面的巡检任务,发现有三个方向的好处,首先通过脚本调度机器完成任务,减少了测试成本,提升了我们整个项目的测试效率。其次,这些脚本可复用,我们在做了一个项目的技术迭代后,直接可以回归验证,无需重新编写。再者,我们借助定时任务,可以定时去巡检我们的线上页面,持续的保障产品的质量和消费者的体验。

优缺点

这样的一套方案,对比传统的自动化测试框架有优势也有不足,首先优势是:通过真机执行,更好的能反应用户的真实环境,其次调度机器的链路短,更稳定,二是这样的方案是不依赖开发语言和待测试的app的,更不依赖于代码的实现,脚本的编写也相对简单,只需要一些核心的api就可以完成大部分工作。不足处在于:断言依赖于图像的识别能力,没法深入到请求数据、页面的dom节点结构等。

解决问题归类

基于图像识别的断言我们可以解决这几类问题:

检测页面上是否有特殊字符 undefined null等

判断页面是否展示不全,空窗、元素丢失等

检测页面是否出现了异常,如白屏、无效的链接、crash等

以及其他的一些通过图像和app层判断的断言类型。

扩展场景

这样的一套方案在保障用户体验上除了用于做适配和定时巡检,我们还可以用在其他的一些场景。

  素材监测

比如针对我们投放的素材监测链路,我们可以通过真机模拟用户行为去浏览一些合作的app,当发现我们投放的广告素材时,点击看看承接链路是否正常以及唤端链路是否正常。


  开屏监测

第二个是我们通过真机去打开访问一些app,去识别出一些开屏广告,去判断他的唤端和承接链路是否正常以及判断投放的这些素材是否有损用户体验。

直播疑问权威回应

Rose`mi

如果按钮是gif logo的话如何截图,截图后如何进行对比的

浴风

代替他去决策。所以可以自动化,但是它目前是以智能提醒的方式存在的,去做分析决策的依然是实验者。如果按钮是gif图在两个地方处理上会有差异:

第一是通过截图要找到这个gif图按钮位置,因为截图可能是任意gif的帧,所以有个取巧的办法是通过这个gif按钮周边的某个文字或者静态图片的位置,进行一个计算,比如坐标加多少,得到这个gif图按钮的位置。

第二是如果截图中有gif图,如何和目标图片对比兼容性?目前我们采用的兼容性度量,是通过识别图片中文字、元素及位置、以及图片处理后的像素对比等维度做一个加权得到的值,是一个相对的评估值度量,所以局部的gif图对于整体的兼容性对比值会有一些小的差异,不同的业务中,对这个值可以有不同的相对性评估。

执着的超人

图片比对是通过像素对比吗?

浴风

图片比对会把手机图片做一些预处理,比如去掉状态栏、导航栏、操作栏、然后做一些等比放大、缩小操作,保证尽量和目标图片一致;然后通过文字、图像元素及位置、像素等维度做一个加权的度量计算,最终会得到一个兼容性相似度度量值,作为兼容性判断的一个参考值。

excaliburhan

这个系统后面还可以做一些什么事情?

浴风

真机和图像后面可能结合用户行为,做行为回放,或者结合机器学习做行为模拟,甚至是一些智能化的测试机器人。

(以上三位提问者将获得阿里巴巴淘系技术定制书包一个,请联系淘大橙拿奖哦!)

直|播|预|告

时间:2021年4月20日19:00-20:00

配测试以及持续的保障线上页面的稳定性成为了一类新的技术问题。

在本次分享中,会跟大家简单聊聊,我们是如何把“真机操作技术”以及“计算机视觉技术”结合在一起,形成真机监测平台,代替人工去完成页面的自动化适配及线上巡检任务。

“CyberSpace”概念早在1980年代就已在人类文化中出现,不过在漫长的岁月里它一直局限在小说影视与游戏等艺术领域中。但这些年,随着“虚拟偶像”的概念成功破圈,我们相信在电商行业里也会有很大的潜力和价值,比如“虚拟主播带货”、“多人视频会议”等场景。

你或许好奇 CyberSpace和电商有个鬼关系?捏脸换装是怎么做到的?虚拟角色是如何做出与真人一样的表情的?以及这和做游戏有啥不同?而且感觉用Web 做还更差……

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

那么如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(一)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(二)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Redis常见面试题汇总(300+题)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

[外链图片转存中…(img-SzBa0Z95-1713547553270)]

Mysql面试题汇总(一)

[外链图片转存中…(img-NYzOor9H-1713547553271)]

Mysql面试题汇总(二)

[外链图片转存中…(img-ecB80XH2-1713547553273)]

Redis常见面试题汇总(300+题)

[外链图片转存中…(img-LD0tbuIk-1713547553275)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值