ps:4399AT是基于appium定制改造的安卓UI自动化工具,可以用于全自动化多设备兼容测试,压力测试,遍历测试,功能测试,覆盖安装测试等,定位方式除了常规定位方式,包含多xpath定位,图像识别来解决webview及同一个apk不同版本控件定位问题;功能多多,就不再描述,自行查看订阅号文章;
做安卓UI自动化的一个最大问题,就是截图,截图可以用于发现问题步骤 追溯以及不同设备同一个页面的对比,图像识别定位等,那目前基于google系统开始安全性进行升级,特别是从Android 9以上系统,由于权限问题造成minicap中的minitouch没有权限,造成黑屏,只有华为的手机部分手机可以支持,可以支持到android12,而小米手机,oppo等手机你就别想了,除非类似小米手机,你用它自己编译的minicap.so,并且minicap的兼容升级跟不上android 系统的升级,老是慢一拍,这样就造成维护成本以及做多手机兼容性测试就存在问题了。好在还有一个谷歌的“儿子”scrcpy,这个可兼容性贼强,维护成本低,也不存在不同厂商的兼容性问题。所以就折腾起来。
解决方案有几个:
1.开发一个apk用来跟自动化工具进行通讯,截图,貌似airtest 就是这样,这样成本很大,而要经常维护,对于不同厂商设备还不一定兼容,涉及权限技术问题;
2.持续查找每个厂商的自己编译minicap.so,也不大现实,貌似只有小米的找到的比较多,其余OV等品牌少,不显示,放弃;
3.用scrcpy,直接自动化配合scrcpy进行改造,恩,可行,但遇到问题,开发要求高,要修改scrcpy底层代码,也尝试修改了,遇到了技术瓶颈,暂时放弃了,技术,成本有限,暂时放弃;
4.scrcpy-minicap, scrcpy手机端流转成minicap可接受的jpeg格式,这方案是成本低,实现最快的,改动原来框架量也是最小,这个也是看别人论坛有实现过;综合以上,就第四个方案,开干:
设计跟实现思路是这样:主要是通过 scrcpy 的socket 通讯机制 及 adb forward 端口转发让手机和pc建立socket连接,然后通过获取视频流的frame将frame转成jpeg格式的二进制数据(使用libturbojepg.so 及 libjpeg.so进行jpg转换及压缩)通过socket发送给pc端。pc端获取数据,并将二进制数据保存成jpeg文件;恩,没错就是这样,杠杠的。
scrcpy github地址:https://github.com/Genymobile/scrcpy ;主要修改server.java 图片质量,比特率设置,DesktopConnection.java 主要修改 socket连接方面,screenEncoder.java 主要修改屏幕编码相关,ScreenEncoder.ImageAvailableListenerImpl.java 主要是修改对jpeg图片进行压缩,并压入socket,JpegEncoder.java 主要修改加载处理jpeg库.。(代码就不放出来,太多了,这是测试开发同学的成果) 经过反复测试,经过安卓10以上10个品牌测试,没有问题,其中发现的两个坑是:1.由于pc端使用的是minicap用来接收数据,所以socket 传输的数据格式遵循minicap的数据格式;2.使用System.loadlibary() 加载 so库,建议使用库的全称,省略前缀(lib)和后缀(.so)部分手机可能会无法正常加载动态连接库;
具体的可以查看这个案例视频:http://mpvideo.qpic.cn/0bc36iaaaaaau4addrzmubrvb4wdadzaaaaa.f10002.mp4?
(视频有点长,可以耐心看下) 这个简单的视频自动化实现的功能有:1.apk自动化授权;2.测试过程任意提示框跳出的点击;3.图像识别(一张图片在任意手机同样页面都可以识别到);4.scheme协议跳转功能(解决步骤多,执行效率和用例成功率问题,也解决数据的录制和任意多种数据随机测试);至于报告等其他的功能就不说了。 以上,就是关于整体解决UI自动化的卡脖子问题的分享