内容简介:导读:最近微信小程序的 x5 内核貌似都关闭 debug 属性了,导致测试微信小程序有影响,也引发 TesterHome 社区多位技术专家的讨论
导读:最近微信小程序的 x5 内核貌似都关闭 debug 属性了,导致测试微信小程序有影响,也引发 TesterHome 社区多位技术专家的讨论 [1] 。本文作者分享了对 FAT 的硬核源码解读笔记,供耐心参考。 文末有福利 !
01 前言
FAutoTest [2] 简称 FAT,主要用来解决微信内的 UI 的自动化测试问题,包括微信内的 H5 页面和小程序。不过这个项目已经 8 个月没更新了,关注度越来越低,笔者看到这种情况,实在是痛心。
因为这个项目的思路想法都还很不错的,直接通过 chrome dev tools 与小程序交互,而没有使用 chromedriver 这种中间层,稳定性应该更高一些。
这篇文章是我看这个项目的源码学习到的,希望能给大家带来帮助,希望腾讯官网也能够再次重视起来这个项目。
为了防止写文章的时候,突然又有提交了,或者下掉了,我先 Fork 一份代码到了这里 [3] 。
02 架构
下面直接从官方项目 README 中摘抄
代码结构设计
-
整体采用分层设计,API 设计方式参考 WebDriver
-
整体框架是一个同步阻塞的模型:在一个线程中循环的执行 receive 方法,等待收到 response,发送消息后,阻塞,只有当 receive 方法获得消息时,才会解除阻塞,发送下一条消息,具备超时异常处理机制
-
框架内打包了 Python 版本的 UIAutomator,方便在安卓 Native 页面进行操作
H5 页面/小程序 UI 自动化执行流程
03 使用
在 sample 目录下提供了 3 个使用的例子。考虑到长得都差不多,我们只看 H5Demo.py
这个文件。
先看 h5Driver=H5Driver()
这行的实现,需要打开 fastAutoTest/core/h5/h5Engine.py
这个文件。
为了方便理解,很多代码我没有贴出来,也有些地方我稍微改了一点。
这里的这个 self._pageOperator
对象由 H5PageOperator()
实例生成。先看刚才这段代码的最后两行
这个 _pageOperator
实际上就是用来生成 clickCommand
这个命令用的。继续向下追踪 clickElementByXpath
的方式实现。
文件 fastAutoTest/core/h5/h5PageOperator.py
其中的 h5UserAPI.ActionType.CLICK
对应字符串 click
我们再看 CommandProcessor
的实现。路径 fastAutoTest/core/common/command/commandProcessor.py
这里有个 JsonContact 的实现需要查看下 路径 fastAutoTest/core/common/command/jsonConcat.py
这里的 contat 函数返回的是一个 json 字符串,我们用下面这些代码测试下
文件 fastAutoTest/core/h5/h5CommandManager.py
有各种各样的定义。
看到这里我也感觉代码真的有点绕了,去掉这些绕绕,我们之前提到的代码 clickCommand=self._pageOperator.clickElementByXpath(x,y)
等价于
获取到命令之后,就是通过下面的代码 returnself._networkHandler.send(clickCommand)
发送给手机的 websocket 进程了。
跟 websocket 通讯的代码还真少。那个 SingleThreadExecutor
的作用就是让函数可以顺序调用,感觉用处不大。
WebSocketDataTransfer 则主要负责 websocket 的通信。
我们只直接来看 self._networkHandler.send(clickCommand)
的实现
这里可以频繁的看到 switchToNextPage
这个方法,其实这个方法将 websocket 断了,然后在重连。
04 总结
FAT 的代码逻辑太多,这里仅仅分析九牛一毛。接下来我应该会写一篇文章,用简洁一些的代码,讲述 FAT 的原理。花了很多时间去看,感觉还是挺有收获的。
References
[1]
原文链接: https://testerhome.com/topics/19446
[2]
FAutoTest: https://github.com/Tencent/FAutoTest
[3]
源码解读:
https://github.com/codeskyblue/FAutoTest
05 活动推荐
关于 微信小程序的测试 ,TesterHome 联合腾讯 WeTest 邀请到 腾讯技术架构部高级测试工程师 谢锦辉 分享《 微信小程序 质量体系 》 议题,腾讯互娱品质管理部高级工程师 童立舟 分享《 小程序全链路性能测试 》议题。
另,本文作者 孙圣翔 ,ATX 开源 工具 作者,阿里巴巴手淘测试开发技术专家,也将分享《 ATX 在手淘自动化测试的实践 》议题, 期待在 MTSC2019 大会上现场交流。
MTSC2019 测试开发大会 | 倒计时
向顶级测试技术专家和质量大咖学习,全面提升软件质量,尽在 MTSC2019!
MTSC2019 第五届中国移动互联网测试开发大会 将于 2019 年 6 月 28-29 日 在北京国际会议中心举行,60+ 来自 Google、BAT、TMD 等一线互联网企业的测试大咖分享软件质量保障最佳实践,涵盖 移动自动化测试、服务端测试、质量保障 QA、高新测试技术(AI+、大数据测试、IOT 测试),游戏测试,工程效率提升 等专题。
MTSC2019 大会日程发布,门票即将售罄,预购从速!
http://2019.test-china.org/
报名地址:
https://www.bagevent.com/event/2202999?bag_track=YTTesterHome 福利时间
转发文章到朋友圈,抽奖赠送 TesterHome 定制版精美礼物(卫衣/图书等)、MTSC2019 测试开发大会门票或优惠折扣,以及其他福利等!
-
Step1: 转发本文到朋友圈,扫描二维码加小助手微信;
-
Step2 : 回复「 福利 」入群抽奖;
-
SteP3 : 回复「 组团 」入群,以 团购优惠价 购买 MTSC2019 门票;
P.S. 对于 MTSC 往届参会者 ,可享受 7.5 折福利 ,请进群咨询;
扫描二维码,或点击“ 阅读原文 ” ,抢购 门票!
以上所述就是小编给大家介绍的《硬核 | Tencent FAutoTest 源码解读》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Phoenix解读 | Phoenix源码解读之索引
- Phoenix解读 | Phoenix源码解读之SQL
- Redux 源码解读 —— 从源码开始学 Redux
- AQS源码详细解读
- SDWebImage源码解读《一》
- MJExtension源码解读
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux从入门到精通
刘忆智、等 / 清华大学出版社 / 2010-1-1 / 59.00元
linux是目前增长最迅速的操作系统。本书由浅入深、循序渐进地向读者介绍linux的基本使用和系统管理。全书内容包括linux概述、linux安装、linux基本配置、桌面环境基本操作、shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、linux编程工......一起来看看 《Linux从入门到精通》 这本书的介绍吧!