首页>会议文档 >

质量&测试_何畅_APP自动遍历程序的技术实现

page:
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现
质量&测试_何畅_APP自动遍历程序的技术实现

质量&测试_何畅_APP自动遍历程序的技术实现

所属会议:GITC 2017全球互联网技术大会 北京站会议地点:北京


下载

手机看
活动家APP客户端

扫二维码下载
或点击下载
Android iOS

6292次
浏览次数
GITC 2017全球互联网技术大会 北京站所有文档 移动互联网 金昊 搜狐-如何解决视频直播APP开发与性能痛点 移动互联网 刘振峰 移动社区的云实现和技术实践——Mob刘振峰 移动互联网 齐屹屹 高德地图SDK自动化实践之路高德-下载版 全球化专场-Joe-拥抱全球互联时代_部分1 全球化专场-Joe-拥抱全球互联时代_部分2 全球化专场-Joe-拥抱全球互联时代_部分3 互联网金融 刘发鹏 新零售互联网金融分布式架构实践-GITC2017-V3-4GITC 互联网金融 刘江-携程大数据风控实践携程-下载版 互联网金融 马俊 互联网技术团队如何应对互金业务的多变和挑战 网信财富集团 互联网金融 徐佳晶 Fintech场景下大数据处理的挑战与实践_徐佳晶 互联网金融 杨敏强 金山云互联网金融解决方案 网络安全 董俊杰 业务安全之反爬虫实践猎聘-下载版 网络安全 何艺 流量安全分析平台建设gitc-heyi 网络安全 刘刚 电商大促的那些事 网络安全 王志刚 DevOps开发模式下软件安全 网络安全 袁曙光 Docker安全实践探索 联众游戏-演讲版 网络安全专场 陈莹 实时攻击检测的智能化之路 携程 下载版 移动互联网 陈曦 链家网组件化路由方案解析 链家网路由 GITC 移动互联网 陈云龙 精益化数据分析——让你的企业具有BAT的数据分析能力 移动互联网 董岩-阿里巴巴-Apache Weex:移动研发的进阶之路 移动互联网 胡彪-饿了么Mobile Infrastructure Platform建设 GITC演讲稿 质量&测试 邱化峰 基于java代码的覆盖率在饿了么的应用 质量&测试 茹炳晟 测试基础架构的演进之路 ebay 下载版 质量&测试 陶文-基于流量回放技术进行中台建设 质量&测试 田西西 演讲版PPT 质量&测试 王公瑾 汽车电商架构测试实践 汽车之家 质量&测试 薛亚斌 京东金融app测试探索与实践 互联网金融 高少峰-金融科技引领金融变革GITC_部分1 互联网金融 高少峰-金融科技引领金融变革GITC_部分2 互联网金融 李少伟 大数据驱动下的互联网金融创新 国美金融-GITC IoT峰会 吴川常 物联网商业系统构建之路 IoT峰会 郑晔 一个工业物联网应用的架构与实现 大大演讲_部分1 IoT峰会 郑晔 一个工业物联网应用的架构与实现 大大演讲_部分2 智慧物流论坛 陈俊波物流无人技术应用与探讨-陈俊波 智慧物流论坛 解本齐-国美安迅物流-GITC2017 智慧物流论坛 杨威 新物流--智能仓储机器人快人一步 智能仓储 让人类不再搬运 智慧物流论坛-李波-盛丰物流结算一体化的探索与实践(新) 智慧物流论坛-李伟-如何做到物流信息化建设的加减乘除_部分1 智慧物流论坛-李伟-如何做到物流信息化建设的加减乘除_部分2 智慧物流专场 伍冠军+苏宁物流在实时大数据的最佳实践 IoT峰会 仇剑东 智能家居生态系统的架构与实践 南京物联传感技术有限公司 IoT峰会 李玉峰 IOT运维之路 前端技术 苗典 小程序框架-teddy 滴滴出行_部分1 前端技术 苗典 小程序框架-teddy 滴滴出行_部分2 前端技术 曲毅 多业务场景下的灰度解决方案2017-11-17_部分1 前端技术 曲毅 多业务场景下的灰度解决方案2017-11-17_部分2 前端技术 禹立彬 苏宁渐进式前后端分离实践 前端技术 郑勇 rn-web的设计与实现 携程_部分1 前端技术 郑勇 rn-web的设计与实现 携程_部分2 前端技术 邓国梁-前端开发前后端分离实践 饿了么-下载版 前端技术 黄勇 酷家乐 Virtual DOM在3D渲染中的应用——类ReactJS库的实现及3D应用 前端技术 林溪-tree-shaking性能优化实践 百度外卖-下载版 基础架构 陈杰-支付宝关系链平台设计与实现 基础架构 高飞航 陌陌服务化架构实践 基础架构 梁向东 饿了么API框架的实践 - API Everything R1 基础架构 刘星辰如何优雅的落地中间件-GITC_部分1 基础架构 刘星辰如何优雅的落地中间件-GITC_部分2 基础架构 刘星辰如何优雅的落地中间件-GITC_部分3 基础架构 宁克凡 目睹直播下载版终稿 基础架构 沈国勋-阿里旺旺百亿消息架构演进 基础架构 沈剑 互联网分层架构演进 基础架构 孙杰 大型企业云平台的实践之路 外发版 基础架构 魏云-轻轻家教-下载版-构建基于容器的混合云架构实践 基础架构 杨培锋 广东奥飞数据科技股份有限公司-下载版 基础架构 张良 小米MySQL高可用架构演进 基础架构 赵国光途牛系统架构演化实践GITC-下载版 基础架构 郑树新 爱奇艺高可用高性能服务器编程架构实践 - v6 大数据 赵天烁_魅族大数据可视化平台建设之路 运维 权熙哲 智能时代数据中心网络实践与趋势 运维 王忠宁-搜狗运维自动化平台架构设计与实践 运维 熊亚军 新ITOM 新监控_部分1 运维 熊亚军 新ITOM 新监控_部分2 运维 熊亚军 新ITOM 新监控_部分3 运维 熊亚军 新ITOM 新监控_部分4 运维 杨金全-微服务架构的应用性能监控 运维 余珂 爱奇艺-爱奇艺基于DPDK的网络优化实践-下载版 运维 周彦伟-用开源工具之利器,善MySQL运维之琐事 运维专场 黄振 开源运维自动化平台架构实现与运营实践 运维专场 宋国欢 猎豹移动可持续性自动化运维的探索与创新 大数据 曹永鹏-Mobike大数据平台建设 大数据 常雷-新一代数据仓库:Apache HAWQ 大数据 陈涛-喜马拉雅数据计算平台xql 大数据 高鹏 数据分析领域的黑马-ClickHouse-新浪-高鹏_部分1 大数据 高鹏 数据分析领域的黑马-ClickHouse-新浪-高鹏_部分2 大数据 高鹏 数据分析领域的黑马-ClickHouse-新浪-高鹏_部分3 大数据 高鹏 数据分析领域的黑马-ClickHouse-新浪-高鹏_部分4 大数据 黄波 微博机器学习平台实践 大数据 刘一鸣_Kyligence_Apache Kylin加速大数据OLAP 大数据 欧阳辰-实时大数据分析之利器Druid 大数据 吴君-基于大数据的智能交通搜索和一键预定系统 大数据 杨少航 从位置服务到数据赋能 大数据 张博 搜狗人工智能实践与合作生态 大数据 张惠亮 联动大数据处理架构的选择和演进 大数据 张翼-携程大数据平台实践 主会场 郭炜 智能时代的大数据用户分析 主会场 侯震宇_金山云混合云网络架构设计与实现 主会场 谭晓生 互联网进入大安全时代 主会场 王卓然-语义智能:技术探索与产品落地 主会场-陈国成 构建10亿级商品的电商平台架构(微店) 运维 张兴龙-京东基础运维的智能化实践 运维 陈怡婷 呼叫中心语音线路自动化运维之路 运维 程捷 海量数据在线分析技术剖析 运维 强昌金 MySQL_NDB_Cluster实践

文档介绍

主要讲述搜狐视频开源项目APP自动化遍历的架构及技术实现。从为解决测试痛点而产生全自动测试想法,到自动遍历思路的诞生;从代码实现过程中遇到的棘手问题,到寻找解决方案的过程;从代码结构的组成,到其功能在测试过程中的应用策略。同时讲述搜狐视频自动化工具——小王子的其他功能模块如何在兼容性测试、稳定性测试、功能测试、回归测试等多种测试过程中发挥其作用价值。

演讲实录

11月24日网络安全专场上,搜狐视频高级测试开发工程师何畅分享了《APP自动遍历程序的技术实现》演讲,介绍了自动化测试工具小王子。
搜狐视频高级测试开发工程师何畅主要讲述了搜狐视频开源项目APP自动化遍历的架构及技术实现。从为解决测试痛点而产生全自动测试想法,到自动遍历思路的诞生;从代码实现过程中遇到的棘手问题,到寻找解决方案的过程;从代码结构的组成,到其功能在测试过程中的应用策略。同时讲述搜狐视频自动化工具——小王子的其他功能模块如何在兼容性测试、稳定性测试、功能测试、回归测试等多种测试过程中发挥其作用价值。

APP自动遍历技术

首先讲一下自动遍历这个模块, 为什么今天要把自动遍历这个模块拿出来单独讲讲,在做自动化测试工具研发的时候,可能都遇到这样的问题:研发好这个工具以后,在推广的过程中可能会遇到一些阻碍。因为测试同学可能有自己固有的测试方法,可能比较熟练。而且测试任务比较繁重,在这种环境下让他们再去学习其他自动化测试工具,这无形之中给他们带来一些压力,所以他们内心可能是拒绝的,于是就像做一个这样的一个功能,只要点一个开始按钮或者简单的设置就能让它自动完成一个测试。测试之后还能给出一定的测试结果,这样他们就没有额外学习的压力了,很容易的用这个自动化测试工具去帮助他们解决测试的问题。所以自动遍历的需求就这样诞生了。

其次,在做自动遍历之前,做了一些技术调研,发现网上的这些资料并不是很完整,都是一些零零碎碎的,所以想把一些经验分享给大家。

自动遍历到底有什么功能,首先它可以针对APP内所有的控件遍历点击一遍,其次在每一步点击过程中会记录截图,并且提取出一些出错图片;黑名单机制,能够过滤掉不想点击的控件,在测试的同时可以兼顾性能测试,能够实时记录内存、CPU等等这些性能信息。在测试结束之后会输出excel报告日志,能够统计在遍历过程中的一些点击情况,以及崩溃或者异常的信息。

整个过程是通过安卓自带的Uiautomator框架来完成的,通过QT去编写界面,最后通过java去完成算法的实现。

自动遍历的基本架构主要分成三层,交互界面层,业务逻辑层和数据层。交互界面包括设备管理APP列表的管理,系统的设定以及最后显示界面等等。通过交互接口去和业务逻辑层的算法进行交互,这个业务逻辑层包括遍历顺序,列表的维护以及黑名单的算法等等。最后数据层主要对日志和截图进行抓取,对于性能信息进行统计最后合成报告。

其中最重要的一层就是业务逻辑层,这一层也是通过三块来完成的,adb、Uiautomator框架和java的原生代码,其中adb这一块主要做的是信息的导出; Uiautomator的框架就是自动化的开源框架,它可以完成控件的操作比如点击、滑动、截图之类的;java这一块做的是文件的处理,线程的管理等等一些逻辑。

在研发过程遇坑无数,比如界面怎么去标记,控件如何去识别。遍历顺序采用深度遍历还是广度遍历等等。接下来我把这些经验和大家分享一下:

首先是标记界面和Tab页去重点击,其实这是两个问题,但是这两个问题是通过一种方法来实现的,先说这个标记界面,目前用的比较多的标记界面的方法就是用图片来标记界面,看一下两幅图片的变化阈值是不是发生变化,再通过阈值变化的程度确定界面是否发生变化。一开始我也尝试用这种方法,但是也遇到一些问题,图象处理算法是比较复杂的,还有阈值问题,这个阈值如何判定,变化多少才判定这个界面是变化的,是没有相关的规定的。

其次,还有一种情况,比如一个界面底层没有发生变化,但是上层可能有一个浮层,或者一个弹框,这种情况,认为它到底是变化了,还是没有变化?都不太好去做处理,所以我决定换一种方式。

在解决这个问题的同时,又遇到了第二个问题,就是Tab页去重点击的问题,什么是Tab页去重点击?如右侧的两幅图,这个是搜狐视频旗下的直播产品——千帆直播APP的两个截图,其中对应的是热门和小视频的两个界面。如果以图片做界面识别的话,这两张图片肯定是两个界面了,变化很大。

这两个界面最上方都有Tap页这个控件,都会有热门、小视频、互动这几个按钮。如果在这两个界面中,对于这些控件都进行点击的话,效率是很低的。要把在不同界面中同时包含相同tab页的这种情况进行一个去重点击的优化。他们共同的特点是都在同一个activity中。所以可以用activity来作为页面的标记,进到一个新的页面以后,去判断一下它的activity有没有发生变化,如果发生了变化,肯定界面已经发生变化了,如果这个活动没有发生变化,可以检测一下,这个activity中有没有新的控件生成,如果有新的控件产生的话,就可以把新的控件加到活动的控件列表中。

遍历顺序的问题,目前遍历顺序有深度遍历也有广度遍历,这两种遍历方式有自己的优缺点,广度遍历的优点就是容易追踪控件被点击的情况,一张图中有多个控件,哪些点到了,哪些没有点到,一目了然,很容易查看。

但广度遍历也有缺点,广度遍历需要不停的返回,要返回到刚刚的页面中进行其他控件的点击,需要不停的返回,这样很浪费时间,而且效率比较低。

对比着看深度遍历,它的优点效率就会比广度遍历高一点,因为没有重复的操作,同时比较符合我们的视觉效果,因为一层一层的深入点击。但是它也有缺点,很容易点乱,不同界面的点击操作会遇到同一个界面,或者再一个界面内所有控件都被点击后,需要返回到上一个界面的时候会出现无法返到上一层页面的情况,这样很容易点乱。

通过对比发现,广度遍历的顺序问题是没办法优化的,但深度遍历的缺点是可以通过算法进行优化的,所有最终采用了深度遍历的方式。

下一个问题是识别控件,识别控件有很多种方法,一开始采用Text来作为控件的识别,但是有一些控件可能就是图片,没有Text的属性,这样可能就获取不到控件,而且在会有一个界面中出现两个控件的text是一样的情况,比如在这个图中有两个“关注”按钮。后来尝试用Reesourceld来作为这个控件识别的方案,但是安卓比较低的版本是没有Resourceld这个属性的,而且有一些控件也没有设置这个Resourceld。所以用Resourceld可能也会有一些识别不到控件的情况。

此外,也尝试了用Xpath来解决,Xpath是一种路径标记语言,可以通过xpath文件树的结构去完成一个节点的记录、一个路径的记录,现在也有一些人去用Xpath来做控件的识别。但是它的问题就是性能差,而且页面有微小变化的时候,路径可能不存在了,可能会影响到其他控件的路径。

最后采取的方案是把以上几种方式结合运用,先用xpath去过滤掉一些不能点击的控件,其次以resourceId作为主要标记项,text作为辅助标记项,这样会提升一些控件的识别率。

接下来是黑名单机制,在遍历一个界面过程中,一般顺序都是从左向右,从上倒下,如果按照这种方式,在这个界面,第一个要点击的控件就是左上角的返回按键,如果刚进到这个界面就点了这个返回键,就会退出这个界面,导致其他的控件可能遍历不到,虽然可以用记录路径的方式再次进入界面,对这些控件进行点击,但是这样效率会变低,如果把这样的一个控件加到黑名单中,遇到这样的控件之后,不第一个点击它,而是把它的顺序排到最后,把所页面所有的控件都点击过了以后再点击返回按键,这样的逻辑就符合遍历的逻辑了。所以就把这种不想第一个去点击的控件,把它加到黑名单中,提高一下遍历效率,这个就是黑名单机制。

下一个问题是APP跳出检测机制,在遍历过程中,对于一些按钮进行点击的时候,很容易拉起第三方的应用。如果在它拉起第三方应用时不做操作的话,它会在第三方的APP中继续遍历,这样显然不是想要的结果。所以每一次点击以后都会去判断一下这个APP是不是的目标APP,如果它符合,那么继续点击,如果不符合,就需要对第三方的APP进行操作,把它杀死,让它返回到目标的APP中继续点击,一直到结束为止,这个就是APP跳出检测机制。

小王子其他功能简述

接下来讲一下自动化测试工具小王子的其他的功能,小王子是一个单机版的测试工具,目前也是一个开源的项目,开源地址会在最后呈现出来,目前小王子有八个模块,十二项功能,可以在冒烟测试、性能测试、兼容性测试、稳定性测试等等多个测试环节中去应用。

录制和回放模块

这两个功能大多数自动化测试工具都会有,它可以把对一台手机操作的过程录制成一个脚本,再把录制过程在其他的手机中进行自动回放,这样便节省了把每一台手机都操作一遍的时间。

录制是通过adb来完成的,除了录制以外也可以手动编辑这个脚本,有很多命令去满足我们的多种对手机的操作。回放的原理和APP遍历是一个自动化测试框架——Uiautomator框架,通过这个框架可以回放脚本的操作内容,并且实时返回操作事件,并且可以监控Crash信息,以上就是录制和回放的两个功能。

性能测试模块

左侧看到的图就是性能测试界面图,图中左侧部分是设备和APP的列表管理,右侧的这六个图片就是我们性能的实时数据,可以对内存、CPU、电池温度、CPU温度、WiFi和mobile的流量六个数据进行监测,黄色的线就是实时的性能数据,上面红线是能够设定的预警值,如果认为一个APP它的内存数据超过200M性能不好,则可以把200设置成预警值。从图中能够看到,如果黄线超过红线就认为性能不好了。

在这个模块里面还有一个功能叫做数据对比,如右图,能够选择不同的数据文件,这个文件是在测试过程中生成的报告,把每次生成的结果选择到列表框里,点击对比按钮之后,就会在左侧六个图中对这些数据进行显示,很方便的能够看到对比结果的情况。以上就是性能测试。

稳定性测试模块

稳定性测试就是在跑monkey,monkey的命令是比较复杂的,每次测试都要手动去敲很多命令,小王子做的就是要把繁琐的命令转化成一个可视化的界面,就像图中这样,把每一个命令都做成可选择的框,通过可选择的框去完成命令的编辑。

在设置界面中还有个功能叫做日志关键子过滤,在跑monkey的时候,出现了crash等信息,如果不去设置关键字的话,就需要手动的从这些日志中去找这些关键字,我们把关键字写到框里,最后测试过程中,小王子会自动把关注的这些字段单独提取出来,以这种方式列出来,让很容易看到结果。

此外,在设置中还有一项叫做参数测量选项,在这个选项框中,可以对这六个性能数据进行勾选。比如在测稳定性的同时,也可以对性能测试进行一个监测,在最后测试结果中也会有性能的信息,参数测量功能是在所有模块中都有的,以上就是稳定性测试的模块。

埋点统计模块

在对一个手机操作的时候会有一些上报的URL信息,正常测试这些上报的时候是通过抓包工具来做的,比如fiddler或者Charles,要从抓取的数据中很多条数据中去选择一条关注的那条上报,还要从这一条上报中找到关注的字段,把这个字段单拿出来看一下它是不是正确的,整个过程是比较复杂的,也比较消耗时间。

小王子把这个过程进行简化,首先需要把关注的URL转化成XML文件,当然每个URL要有自己的唯一识别的字段,但凡监测到了唯一识别的字段出现,就认为这一条URL在上报,而且把唯一识别的字段作为XML文件的属性,可以和我们抓到的数据进行匹配。

转换好XML文件之后,测试之前就可以对关注的XML文件进行选择,在测试过程中,通过第三方的命令行抓包工具来抓取数据,抓到了以后和刚刚选中的XML文件进行对比,如果它们两个匹配符合,就认为这一条上报是正确的。

如果说没有抓到,没有和它匹配的XML文件,就认为这一条上报没有上报,而且如果在匹配的过程中,发现有一些字段是匹配不上的,就认为这一条上报的信息有问题。

结合界面去看一下测试过程,左侧的列表就是XML文件的列表,可以通过前面的勾选框去选择,每一条XML后面都会有状态的显示,比如黄色的三个点就代表这一条XML文件是待检测的;绿色的勾认为这一条上报已经检测到了,而且它的数据和XML文件的信息是完全符合的;红色的错号,代表这条上报确实有,但是它错了,有些上报不符合预期,是有问题的。在右上方可以显示出来URL的具体信息,下面是对于URL的拆分结果,如果拆分之后的结果和拆分文件中是匹配的,就会打一个勾。如果不匹配会用红色的方式显示出来,这样使结果清晰明了。

在这样的测试之后,很容易看到哪些上报是正确的,哪些上报是错误的,这个就是我们埋点统计的模块。

接口测试模块

接口测试只是针对移动端简单接口的抓取,它的原理和埋点统计的原理是一样的,都是通过第三方的抓包工具来抓取数据。但是它在这儿可以对这个接口的完整信息进行展示,比如它的响应时间,它的方法、协议等等。包括最后它的反馈数据,它会以符合人类视觉的方式去展示出来。

同样也结合着界面来说一下,左侧就是设备和列表,中间这部分就是对整个URL的详细展示,在这个过程中我们可以设置时间的预警值,比如接口的响应时间超过100毫秒,就认为这条接口它的性能可能不好,就可以把预警值设为100,然后在测试的过程中, 如果抓到这个接口它的响应时间是大于100的,就会用红色显示。,如图上面这两条是超过100的。它的默认显示的顺序是按照时间从大到小的顺序排列的,也可以通过前面的ID去使其按照出现顺序进行排序。右侧是对接口具体信息的展示,包括返回值,都是转换成符合我人类觉的方式去显示的。以上是接口测试模块内容。

小王子除了以上的几个功能模块以外,还有一个功能是发送crash邮件,比如在测试过程中出现了Crash,它会立刻把crash对应的信息,或者对应的log日志进行抓取,然后把这些信息整合一下去发送给测试或者开发,使他们及时处理问题,如上图是邮件的简单截图。

此外,它在每一天测试的结束之后,会把这一整天的测试结果进行整合,以日报的形式发送出来,可以获取它一天完成了哪些工作,APP有什么问题。

以上就是关于小王子功能的介绍,下图是我们的开源地址,可以扫二维码去查看具体的开源代码。

×

打开微信扫一扫,分享到朋友圈