ATX
: AutomatorX简称,本文主要讨论的iOS自动化测试的框架
WDA
: WebDriverAgent的简称,是Facebook为苹果开发的一个自动化测试框架
优点(对比Appium)
引用作者原话:
1. ATX依赖比较少,安装快,上手也快
2. 可以测试第三方应用,比如微信,网易新闻之类
3. 更新方便,可以使用pip直接更新应用
4. 集成图像识别,可以解决仅靠UI无法定位识别的问题
5. 集成测试报告
6. 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比appium更及时的响应需求,还可以用中文交流和沟通。
使用ATX之前要先安装WebDeiverAgent(以下简称WDA). 其实也很简单:
1. 到github上面把包下了
2. 进工程的根目录,运行./Scripts/bootstrap.sh下载依赖库(要用到Carthage和npm)
3. 打开工程文件WebDriverAgent.xcodeproj
4. Scheme选择WebDriverAgentRunner
5. 设备选择模拟器或者iPhone都可以
6. command + u
WDA还可以通过命令行启动:
1 | xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$(idevice_id -l)" test |
---|
1 | xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS Simulator,name=iPhone 6' test |
---|
——WDA据说是Facebook的开发人员,因为Linux下没有iTunes可以用,所以破解了iTunes和iPhone之间的通信协议,以此获取当前的屏幕的元素树.—— 上面的操作完成后,Xcode控制台会输出如下log:
我们就可以通过ServerURLHere->后面的连接去监听设备了,WDA里面有一个js脚本,建立一个inspector的页面,供我们方便查看元素:
中间视图显示的树,就是我们可以使用xpath来查找元素的基础了.
ATX其实是一个纯Python库,可以直接通过pip安装,但是要先安装opencv:
1 | brew install python pillow opencv |
---|
安装开发版的ATX:
1 | pip install --upgrade --pre atx |
---|
看到这行就安心了…… PS:最后要说的是输入法,测试之前需要将输入法却换到系统默认的英文输入法。某狗输入法是不可以的。
首先要知道应用的bundle_id, 有两种方法: 连接手机,终端使用命令 ideviceinstaller -l 查看当前手机所有已安装的应用:
通过Xcode 查看, 在美聊实验的时候,才知道,美聊Xcode编译出来的,测试版本的,线上版本的,bundle_id全是不同的…….
然后可以写第一个脚本了:
12345 | # coding: utf-8 import atxd = atx.connect('http://localhost:8100')d.start_app('com.netease.idate4dt')print d.status() |
---|
这里我们把DEVICE_URL写成了localhost:8100,如果是真机的话,需要根据实际情况改成对应的手机IP和Port. 这是我之前写的一个demo:
打开应用 点击登录 输入帐号 输入密码 点击登录 点击个人 进入设置 退出登录
说明: 尽量使用xpath语法 因为美聊会保存账户,所以输入帐号之前先清除textField的内容 倒数第3,4行多了一个scroll() 它的功能是滑动屏幕使其按钮可见
因为ATX集成了测试报告,所以生成响应的测试报告也很简单 在第3行代码之后加入以下代码
123 | from atx.ext.report import Reportrp = Report(d)rp.patch_wda() |
---|
再次运行一遍代码,在当前脚本所在目录下就可以看到一个report目录,里面有一个image目录,里面是每一步的截图
因为一般游戏的测试会用到图片识别多一点,所以用了一个我自己玩的游戏做例子:
ATX的图片识别,是支持分辨率缩放匹配的,前提就是,在保存截图的时候要注明是在哪个分辨率下面截的图,命名方式如下:
原理大概就是:从文件名获取源分辨率,从设备获取设备分辨率,然后将图片按照比例缩放
因为numpy的版本冲突,但是os x10.10之后, 对系统文件夹有SIP保护,所以没有办法对特定的系统文件夹进行修改,解决方法