FAtest微信小程序自动化框架初探
一、FAT简介
微信H5、小程序、公众号,QQ公众号,H5等UI自动化测试框架,并由腾讯测试开发今年9月进行开源发布,开源地址:https://github.com/Tencent/FAutoTest
二、框架流程
三、调研调试过程
环境:安卓mumu模拟器(夜神模拟器一直映射不到端口),华为荣耀真机,微信6.6.3/6.7.3进行调试,腾讯医典小程序,地产人名片小程序
- 搭环境;
PC端:需要安装python库,利用pip install安装python所需要的各种库;安装java1.8版本,安装安卓sdk,配置环境变量等;
手机端:针对不同的手机还需要安装uiautometor.apk; 安装指定版本的微信6.6.3(调研时使用6.7.3也行),在真机上微信端打开x5和小程序debug模式(模拟器不用)。 - 调试过程会遇到比较多的问题;
主要问题:
a. 端口映射总是找不到小程序pid,按说明真机上只能通过进入微信发现,搜一搜再进入小程序才能映射成功(咨询测开说是6.6.3版本可以不通过搜一搜,但真机上验证不成功,模拟器上验证可以);
b. 在真机上全自动测试会报各种错,主要通过手动在cmd命令中先映射后端口后,才可以初始化小程序,成功调试(这点会比较折腾),模拟器上要成功率会高点;
c. 对于原生态界面,如启动微信,在微信中进入小程序需要使用到uiautomator或uiautomator2框架要调用;调试过程中我使用的uiautomator2框架,对于uiautomatorview要抓包十分不稳定,总是抓不到控件(也可能和手机相关);
d. 对小程序进行抓控件,要使用chrom:inspect,针对不同的手机系统需要使用不同离线调试包,而公司无法在线下载,所以会导致部分手机无法调试;
e. 控件定位还未进行调试,一直连不上chrome:inspect。
四、报错及解决 - 初始化找不到pid
出现这类问题,先关闭手机端所有小程序杀微信进程,真机的话从发现–搜一搜再进入小程序(为何要这样,怀疑是不同入口的进程名不一样,待深入研究);本地打开127.0.0.1:9223/josn,检查是否正常与手机建立了端口映射,如果不行的话手动在cmd中进行映射,具体方法可参考API文档:https://github.com/Tencent/FAutoTest/blob/master/docs/INITERROR.md。如果手动还是不行,建议换模拟器或换手机试试(本人使用夜神未调通,换mumu后可以调试)。 - 找不到debug url
这类问题也经常出现,一般是端口可以映射成功但初始化时报错;在调试过程中,发现出现这种问题一般是在调用这个fastAutoTest\core\wx\wxWebSocketDebugUrlFetcher.py下面的一个方法_handleAndReturnWebSocketDebugUrl时架框未做对应的处理;要么获取到了4个链接,而框架中只处理了3个链接的情况(已反馈后续应会更新),要么获取到的debug url路径不正常。
如果只有2个链接,请查看这里的数据是否正确
目前这种情况对我们本地使用还是比较好解决;
第1种,就是不停的换手机或模拟器直到能用为止(会有点蛋痛);
第2种,改这里的返回,打印responseJson找到正确的 webSocketDebuggerUrl,可以直接返回,也可以加if eslep视自己的项目推广情况,如直接返回来解决。
else:
#url_str = ‘ws://localhost:9223/devtools/page/12ea48dd-ad59-45f0-8684-196a4031b4e0’
url_str = responseJson[0][‘webSocketDebuggerUrl’]
return url_str
3. 全流程跑通
有些同学需要从启动微信到,跑H5或小程序,那就要用到其它框架了,如我这边使用的是uiautomer2来做微信的登录,启动,进入小程序的操作,再进行小程序初始化使用FA框架对小程序进行操作;
还有需要使用测试报告等等,可以接入其它的一些框架如unittest等等,若进行二次开发也可以采用分层思想进行封装UI层,逻辑层,用例层等(扯远了,欢迎大佬一起讨论分享)。
4. chrome:inspect 连不上
度娘上有答案,关于离线包问题,附件中提供一个,不一定管用。
五、框架优缺点
优点:
- 由腾讯开源,市场中暂无比较好的针对小程序的开源软件;
- 支持腾讯系X5内核H5页面,支持小程序,公众号;
- 用例编写与其它框架类似,容易上手;
- 相比uiautomator和appium框架Api文档中有对比的优点。
缺点:
5. 开源时间不长,稳定性和兼容性不太好,缺少维护(一般是遇到问题反馈给测开,或自己本地改框架);
6. 只能使用安卓版本和指定的微信版本;
7. 需要结合其它框架进行整体的测试,如用uiautomator找控件会用到uiautomatorview和chorme:inspect;
8. 使用经验和分享的博客较少,暂无太多参考。
六、结论
- 目前该框架只支持安卓,ios暂无法支持;
- 框架目前暂只支持微信的某些版本,如6.6.3,高版本可能会不支持,无法做全兼容;
- 由于chrome:inspect离线调试包问题,只有某些安卓手机可以进行定位元素进行调试;
- 各项目可视项目情况部署到模拟器上运行。
备注:
框架地址和操作说明:https://github.com/Tencent/FAutoTest