2019独角兽企业重金招聘Python工程师标准>>>

概述

  回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他的代码出现错误。传统的自动化回归测试需要手动编写脚本获得页面元素的视图树,与原有的元素视图树进行比对。当功能进行频繁迭代时,测试同学维护这些视图元素验证点比较繁杂。因此在自动化回归测试过程中,直接比较代码修改前录制的页面和代码修改后回放的页面差异,可以快速定位代码产生的缺陷,从而提高测试同学的工作效率。

  以闲鱼应用举例,录制和回放页面差异检测存在的一些难点包括:图像上,闲鱼页面由顶部固定区域、中间可滚动区域、底部固定区域组成,需要对页面进行版面切割,之后分别对每一个区域进行处理。另外录制和回放页面中一些图标或者图片纹理复杂的区域往往像素值分布不同,但是语义层面又是同一个物体,因此需要从语义层面进行检测识别。业务上,两张页面中间区域因为滚动带来的差异不需要检测出来,并且一些特殊的标记差异(比如一张页面某个位置有光标,另一张页面同一位置没有光标)不需要检测出来。

  如上图四组录制和回放页面所示,其中每组图左边为录制页面,右边是回放页面。a)中因为中间区域的滚动带来了文字和图标的差异,b)中价格组件“¥69”右边的光标带来了差异,c)中输入框里的文字不一样,d)中“库存”那一栏的图标具有语义差别。其中a)和b)中的差异不需要检测出来,c)和d)中的差异需要检测出来。

方法

算法流程

  整个算法流程如下图所示:

  1. 输入的录制和回放页面图像灰度化后进行版面切割,提取顶部区域、中间区域、底部区域
  2. 两张页面的中间滚动区域进行对齐
  3. 两张页面的每个区域分别进行相似度计算并排除无效的差异框
  4. 两张页面中分别标记最终的差异框

版面切割

  闲鱼大部分的页面是由顶部固定区域、中间可滚动区域、底部固定区域组成,版面切割的目的是找到中间可滚动区域的上下边界,即将页面切割为三块区域,之后对每块区域分别进行处理。

  版面切割只针对中间区域有滚动的情况,对于中间区域无滚动的情况即可用整张图进行后续处理。考虑到录制和回放页面在滚动区域上下边界处会产生明显的差异,因此分别从图像的第一行和最后一行开始进行比较,比较对应行的结构相似度指数(SSIM),当对应行的结构相似度指数小于给定的阈值,则终止。

  结构相似度指数是一种衡量两幅图像相似度的指标,其从图像组成的角度将结构信息定义为独立于亮度、对比度的反映物体结构的属性,用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量。具体公式如下:

其中(x,y)分别为录制和回放图像,ux,uy,σx2,σy2,σxy分别表示图像的均值、方差和协方差,c1,c2,c3为小的正常数,避免分母为零而出现不稳定,利用参数α,β,γ调整三个成分所占的比重。在实际工程中,一般设定α=β=γ=1,以及c3=c2/2,可以将SSIM简化为:

  SSIM为介于0到1之间的一个值,值越大表明两幅图越相似。下图a)b)为高2001像素、宽1125像素的录制和回放页面图像,选取SSIM阈值为0.95,计算得到的滚动区域的上边界为192,下边界为1832,如c)所示。

滚动区域对齐

  对齐录制和回放图像的滚动区域后便可对比同一位置的差异,本文采用基于特征点的图像对齐方法, 即检测录制图像的一组稀疏特征点来匹配回放图像的一组稀疏特征点,通过两组特征点的匹配来计算一个转换矩阵,这个转换矩阵能变换对齐两幅图像的滚动区域。由于滚动区域只在垂直方向有位移,因此采用一般的刚性配准方法,如下式:

  录制图像坐标(x,y)通过一个3x3的位移矩阵转换到回放图像坐标(x',y')。位移转换矩阵可以通过对齐两幅图像的特征点来求取。在计算机视觉中,常见的特征点描述方法有SIFT、SURF、ORB等等,本文采用ORB方法,因为相比于SIFT和SURF方法,ORB在满足足够高的准确性前提下,速度更快并且使用不受专利约束。

  ORB全称是Oriented FAST and Rotated BRIEF,即是由FAST特征点检测和BRIEF特征点描述组成,并且在两者基础上加入了图像金字塔和图像重心方向等改进措施使得ORB对尺度和旋转不敏感。

  滚动区域对齐的具体步骤为:

1. 输入录制和回放滚动区域。当上一步版面切割没有计算出滚动区域时,输入整幅图像的中间部分<br>
2. 检测特征点。使用ORB检测两幅图像的角点。工程实现时可以设置每幅图像最多需检测出的特征点数<br>
3. 匹配特征点。利用hamming距离来衡量两组特征点的相似性以及Brute Force暴力法尝试所有特征点来找到最佳匹配。基于匹配的特征点距离值进行排序,选取距离值较小的一部分特征点<br>
4. 计算转换矩阵。输入两组特征点坐标位置通过最小二乘求解最优的转换矩阵<br>
5. 对齐图像。应用转换矩阵将回放图像滚动区域映射对齐录制图像滚动区域<br>

  下图为匹配的两组特征点,计算出来的转换矩阵中tx=0,ty=-96

相似度计算及后处理

  对录制和回放页面的顶部区域、底部区域和对齐的滚动区域分别计算结构相似度SSIM(如果图像不存在滚动区域,则对整图计算SSIM),差异的地方用矩形框标识,后续通过一定的后处理排除掉无效的差异。具体步骤如下:

  差异检测。对顶部区域、底部区域和对齐的滚动区域每个像素在一定的领域范围内计算SSIM,得到同等尺寸的SSIM结果图;再对SSIM结果图用大津法得到二值化的SSIM结果图,其中有差异的地方为1,没有差异的地方为0;接着提取二值化SSIM差异部分的外接轮廓;之后再计算轮廓的最小外接矩形框。得到的结果如下红框所示:

  后处理。上图红框显示的是对齐滚动区域带来的差异,通过判断每个框是否落到特定区域范围内来进行排除,这个特定区域在垂直方向上以滚动区域上边界起始,向下移动ty行结束或者以滚动区域下边界起始,向上移动ty行结束。另外对于一些噪声点带来的差异,可以通过限制差异框包含的面积进行排除。对上图使用以上两步后处理后,红框全部被排除。其他一些录制和回放图像中的特殊标记(比如光标)差异在业务层面需要排除,或者一些纹理丰富的图标/图像虽然像素层面存在差异,但语义层面属于同一类,即使SSIM计算不相似,也需要排除。

  上图a)显示光标差异模式,b)显示纹理丰富的图标/图像差异模式,c)显示其他差异模式。这些差异模式是对应位置差异框绝对差得到的结果,其中a)和b)需要排除,c)需要保留。分析这几种不同模式类型,设计了一种如下图所示CNN二分类网络。图像缩放到64x64大小,然后输入到三层conv+pooling+relu的卷积结构中,后接128个节点和2个节点的全连接层,以softmax作为类别判定输出。通过分类网络便可将业务层面或像素层面的差异进行排除。

结果

  一些差异检测的结果如下,其中红框标示的是在录制和回放页面中存在差异的部分。a)只有中间区域滚动带来的差异,业务上不需要检测出来; b)和c)能将页面中存在语义差异的部分检测出来并且没有误检和漏检; d)两张页面不存在语义差异,但底部有个文字区域出现了误检,分析原因是页面在没有滚动的情况下,误检区域没有上下严格对齐,导致计算的SSIM值偏小,认为此处存在差异。

总结

  本文以闲鱼自动化回归测试应用举例,实现了一种版面切割、滚动区域对齐、相似度计算及后处理的录制和回放页面差异检测方法。这种方法在使用过程中达到了检出语义差异的预期,并且方法具有普适性,对其他app的自动化回归测试具有一定的参考意义。当然本方法也存在着一些不足,对于像素分布不同但语义相同的差异模式会有一部分误检,这是由于SSIM在计算相似度时对于局部像素值的变化比较敏感,未来可对页面中的文字和图片独立提取出来进行进一步的语义分析优化。

原文链接

转载于:https://my.oschina.net/u/1464083/blog/3025004

自动化测试|录制回放效果差异检测相关推荐

  1. 微信小程序自动化测试——录制回放

    前文 微信小程序自动化测试--智能化 Monkey 提到Monkey虽然使用简单方便,但是不支持输入文本,页面逻辑校验等操作.如果用户希望做自动化回归测试,那么必然会涉及到逻辑相关校验点,这时候可以尝 ...

  2. 软件测试实训|界面自动化测试工具Selenium IDE 录制回放

    Selenium IDE是安装在浏览器上的一个开源的Web自动化工具,是Selenium的一个组件.可以利用Selenium IDE录制页面操作来创建测试用例.录制并回放测试用例. 01 项目目的 掌 ...

  3. 控件获取图像可从几方面取得?_基于图像特征与布局刻画的移动测试脚本跨平台录制回放...

    一. 引言 移动应用在全球范围内有着越发举足轻重的地位,因此移动应用的快速迭代和频繁的需求变更的特点引发了对应用质量保障的要求不断提高.在大型设备集群上迁移测试脚本是移动应用质量保障的关键技术之一,因 ...

  4. 录制快、回放稳,爱奇艺iOS云录制回放平台技术实践

    众所周知,移动APP的周期短.迭代速度快,测试人员在保证新功能正常运行的情况下需要回归大量的历史功能,自动化回归便成为重要的回归手段之一.iOS端自动化由于以下问题,一直很难在业务线广泛开展. 落地成 ...

  5. 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (二)——repeater-console 使用

    本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...

  6. SilkTest那些事儿_第一章 ST的HelloWord_录制回放1

    [size=x-small;][size=12px;] [/size]但凡程序员学习一门新语言,他要干的就是打出一个hello world来.甚至某位程序员联系书法,展开宣纸,磨好墨,tian四声(此 ...

  7. java pc的录制与回放,用Java事件处理机制实现录制回放功能

    下载本文示例代码 目前在一些java应用程序的GUI测试工具,可以提供捕获用户操作的能力并在代码被修改之后能够自动回放用户的操作.文章将分析Java的事件处理模型及其原理,介绍了基于事件源识别的捕获/ ...

  8. 月光宝盒(vivo流量录制回放平台)正式对外开源

    作者:vivo 互联网服务器团队- Liu Yanjiang 月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率.因为其解决方案具有很强的通用 ...

  9. 爱奇艺APP的自动化录制回放系统 全云化处理新体验

    在面对大量的APP功能用例回归测试的时候,测试开发工程师最头痛的问题之一便是新功能交付时间紧迫,原有功能回归测试耗时长,自动化脚本都没时间跟进补齐测试用例.导致核心功能回归遗漏,新功能测试质量也得不到 ...

最新文章

  1. DCN-2655同异步端口
  2. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman
  3. SpringMVC + MyBatis整合 【转】
  4. 关于数位动规(入门到进阶,难度中档)
  5. android应用程序的混淆打包(转)
  6. API网关Kong系列(二)部署
  7. 北航计算机组成原理ppt,北航计算机组成原理课件.ppt
  8. linux锐捷代码_Linux下锐捷上网操作
  9. matlab正太分布的反函数,怎样用matlab求标准正态分布函数的反函数函数值
  10. html点击按钮状态改变,html点击按钮改变文字怎么实现
  11. TP6多应用部署简单的个人总结--第一篇【原创】
  12. SIGCOMM2019几篇有意思的文章
  13. to写日志or not to写日志,is a question.-.-
  14. 【Linux】Linux文件锁
  15. 求职路要敢于学习亮剑精神
  16. GIS功能区类型识别
  17. 计算机吉祥如意制作贺卡作业,贺卡制作教案
  18. apt-get --allow-unauthenticated upgrade
  19. 深度解读互联网新时代:Web3.0
  20. 怎么用c语言编写画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件...

热门文章

  1. checkbox控件的checked属性作用是_VB6基本控件的使用,制作一个数据输入窗口
  2. html 按钮ajax请求,使用单个提交按钮和Ajax在JSP中提交两个HTML表单
  3. pycharm如何分两页阅读_雅思高分喜报| 听力、阅读、写作突破7分,2个月轻松突破雅思总分7, 她是如何做到的?...
  4. 视觉检测无脊椎机器人或vipir_机器人视觉引导系统原理及解决方案
  5. haproxy负载均衡_基于mycat+haproxy+keepalived搭建mysql数据库高可用负载均衡
  6. 昆明理工大学2017计算机考研题,2017年昆明理工大学现代农业工程学院341农业知识综合三[专业硕士]之计算机网络考研题库...
  7. apache文件服务器加权限,apache2运行权限设置
  8. mysql可以关联视图_Mysql 五: 数据库自关联、视图
  9. **Java有哪些悲观锁的实现_Redis 分布式锁的正确实现方式(Java版)
  10. tensorboard的初次使用