硬核 | Tencent FAutoTest 源码解读

栏目: 编程工具 · 发布时间: 5年前

内容简介:导读:最近微信小程序的 x5 内核貌似都关闭 debug 属性了,导致测试微信小程序有影响,也引发 TesterHome 社区多位技术专家的讨论

硬核 | Tencent FAutoTest 源码解读

导读:最近微信小程序的 x5 内核貌似都关闭 debug 属性了,导致测试微信小程序有影响,也引发 TesterHome 社区多位技术专家的讨论 [1] 。本文作者分享了对 FAT 的硬核源码解读笔记,供耐心参考。 文末有福利

01 前言

FAutoTest [2]  简称 FAT,主要用来解决微信内的 UI 的自动化测试问题,包括微信内的 H5 页面和小程序。不过这个项目已经 8 个月没更新了,关注度越来越低,笔者看到这种情况,实在是痛心。

因为这个项目的思路想法都还很不错的,直接通过 chrome dev tools 与小程序交互,而没有使用 chromedriver 这种中间层,稳定性应该更高一些。

这篇文章是我看这个项目的源码学习到的,希望能给大家带来帮助,希望腾讯官网也能够再次重视起来这个项目。

为了防止写文章的时候,突然又有提交了,或者下掉了,我先 Fork 一份代码到了这里 [3]

02 架构

下面直接从官方项目 README 中摘抄

代码结构设计

  1. 整体采用分层设计,API 设计方式参考 WebDriver

  2. 整体框架是一个同步阻塞的模型:在一个线程中循环的执行 receive 方法,等待收到 response,发送消息后,阻塞,只有当 receive 方法获得消息时,才会解除阻塞,发送下一条消息,具备超时异常处理机制

  3. 框架内打包了 Python 版本的 UIAutomator,方便在安卓 Native 页面进行操作

硬核 | Tencent FAutoTest 源码解读

H5 页面/小程序 UI 自动化执行流程

硬核 | Tencent FAutoTest 源码解读

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 大会日程发布,门票即将售罄,预购从速!

硬核 | Tencent FAutoTest 源码解读

大会官网

http://2019.test-china.org/

报名地址

https://www.bagevent.com/event/2202999?bag_track=YT

TesterHome 福利时间

硬核 | Tencent FAutoTest 源码解读

转发文章到朋友圈,抽奖赠送 TesterHome 定制版精美礼物(卫衣/图书等)、MTSC2019 测试开发大会门票或优惠折扣,以及其他福利等! 硬核 | Tencent FAutoTest 源码解读

  • Step1: 转发本文到朋友圈,扫描二维码加小助手微信;

  • Step2 : 回复「 福利 」入群抽奖;

  • SteP3 : 回复「 组团 」入群,以 团购优惠价 购买 MTSC2019 门票;

硬核 | Tencent FAutoTest 源码解读

P.S. 对于  MTSC  往届参会者 ,可享受 7.5 折福利 ,请进群咨询;

扫描二维码,或点击“ 阅读原文 ,抢购 门票!


以上所述就是小编给大家介绍的《硬核 | Tencent FAutoTest 源码解读》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux从入门到精通

Linux从入门到精通

刘忆智、等 / 清华大学出版社 / 2010-1-1 / 59.00元

linux是目前增长最迅速的操作系统。本书由浅入深、循序渐进地向读者介绍linux的基本使用和系统管理。全书内容包括linux概述、linux安装、linux基本配置、桌面环境基本操作、shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、linux编程工......一起来看看 《Linux从入门到精通》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码