硬核 | Tencent FAutoTest 源码解读

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

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

查看所有标签

猜你喜欢:

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

测试驱动的JavaScript开发

测试驱动的JavaScript开发

Christian Johansen / 赵勇、程德、凌杰、高博 / 机械工业出版社 / 2012-2-9 / 69.00元

本书是一本完整的、基于最佳实践的JavaScript敏捷测试指南,同时又有着测试驱动开发方法(TDD)所带来的质量保证。领先一步的JavaScript敏捷开发者Christian Johansen的讨论涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走查整个开发的生命周期,从项目启动到应用程序部署。本书的主要内容包括:掌握自动化测试和TDD;构建有效的自动化测试工作流......一起来看看 《测试驱动的JavaScript开发》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具