硬核 | Tencent FAutoTest 源码解读

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

内容简介:导读:最近微信小程序的 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 源码解读》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

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

Twisted Network Programming Essentials

Twisted Network Programming Essentials

Abe Fettig / O'Reilly Media, Inc. / 2005-10-20 / USD 29.95

Developing With Python's Event-driven Framework一起来看看 《Twisted Network Programming Essentials》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具