Airtest自动化测试之iOS

Airtest自动化测试之iOS
熊猫不是猫Airtest自动化测试之iOS
引子
其实早在17、18年,因为工作需要,自己也就弄过自动化测试,就是因为公司舍不得钱,公司的测试人员一波一波的换人之后,能力是越来越拉胯。而我所在的部门,主职是移动端的开发,顺带也管着测试这帮人,鉴于测试人员的能力有限,当时也就做过一些自动化的测试平台,比如接口健壮性的测试,应用层面的功能测试等等,当然这些都得是自动化的。也是源于那时的经验和观念,现今所在的公司里,也做了一整套自动化的东西,其中也包括我们部门产出的自动化测试,Android、iOS以及PC上的都有覆盖。
本来做完了这些功能之后,也就是偶尔修修补补,让负责的同事维护着就行。不过近段时间,自己想要做的一些小活儿,又遇到了自动化的需求,又重新搭了一遍环境,还是遇到了一些问题,干脆就记录下来,以备不时之需。而我的这个活儿是在需要在iOS设备上来完成的,就直接在iOS上开整了,后续看情况要不要部署Android、unity等环境。
技术选型
从刚开始接触自动化测试的时候,选择HttpRunner、Locust做接口的测试,Macaca做移动端的测试,时隔将近十年,各种框架是一茬接着一茬,包括Airtest、Appium等,当初所用的Macaca也停止更新,Airtest是网易开发的,并且有图像识别能力,也有IDE可以使用,要方便不少。同时使用Python写脚本,简单好上手,也可以脱离IDE直接使用脚本运行,同时支持Android、iOS、Windows应用,对于游戏包括unity、cocos引擎也有支持,覆盖很全,所以成了我的首选方案。
我也调研过facebook新出的的 idb - iOS Development Bridge ,折腾了半天,似乎它只支持iOS的模拟器,我在真机上测试的时候,比如滑动屏幕就会报错,可以参考这个issue。
Airtest
安装ide
官网上直接下载安装包安装即可。
iOS环境搭建
官方文档 - iOS设备连接
Airtest官网上的文档有介绍如何连接iOS设备(真机),选择他们首推的iOS-Tagent方式。
为什么不实用appium的wda:
- 值得注意的是,airtest1.2.5及以上版本,或者是AirtestIDE1.2.14及以上版本,我们不仅兼容了高版本的iOS系统和xcode,而且优化了iOS设备的点击和滑动速度,所以我们非常建议同学们使用我们的 ios-tagent 来对你的真机进行调试。
- 在真机上部署appium的wda,然后使用1.2.8及以上版本的AirtestIDE连接该iOS设备,并不会影响Airtest和Poco相应功能的使用,与iOS-Tagent项目一致;但可能存在iOS卡顿较严重的情况,暂无优化方案。我就遇到了这个问题。
安装iOS-Tagent
参阅 文档
按照步骤将 iOS-Tagent 安装到手机并运行。
可能遇到的问题:
- 记得修改bundleid
- 记得到手机里设置信任证书,否则xcode会提示不能运行应用
手机上会安装一个 WebDriverAgent 的应用,并且测试期间需要保证此应用开启,开启时屏幕上会显示水印(Automation Running)。
设置代理
iproxy 可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了。
一般情况下,需要通过设置usb代理的方式访问手机上的Agent,直接通过wifi对手机进行访问可能会出现问题,具体的原因可以参考 Issues 和 detail
通过 Homebrew 安装iproxy
$ brew install libimobiledevice
运行iproxy
$ iproxy 8100 8100
启动成功后,可以试着在浏览器访问 http://127.0.0.1:8100/status ,如果访问成功并且可以看到一些json格式的手机信息,即表示启动成功(我能看到这个)。此时,访问 http://127.0.0.1:8100/inspector 可以看到iPhone屏幕投影在浏览器上(我看不到这个画面,而且还有报错,但是Airtest中能连上画面)。
连接画面
完成上面两个步骤后,就可以在AirtestIDE的iOS地址栏填入地址 http://127.0.0.1:8100 ,点击 “connect” 连接设备,开始编写你的Airtest测试脚本了。
连接后的效果:
写个脚本试试
创建一个脚本文件,并输入以下代码:
1 | # -*- encoding=utf8 -*- |
这是使用 相对选择器 定位抖音,并打开抖音的代码。
总结
基本的环境搭建和简单的代码操作也就完成了,之后就是编写代码实现各种不同的测试需求了,这里就不再赘述,多看看Airtest的文档。










