Airtest自动化测试
1. 安装AirtestIDE
AirtestIDE下载地址。我下载的是AirtestIDE_2019-09-10_py3_Mac10-12.dmg。下载完成之后,直接安装即可。
2. 设备连接
2.1 部署iOS-Tagent
iOS-Tagent下载地址
git clone [email protected]:AirtestProject/iOS-Tagent.git
把手机连接到电脑上然后 打开Xcode, product -> Scheme -> WebDriverAgentRunner 如图
然后点击 product -> Test 当出现如图的情况,说明iOS-Tagent环境部署成功
(我自己本地部署后的服务器地址是: http://172.20.10.7:8100)
2.2 设置代理
iproxy 可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了
brew install libimobiledevice // 通过 Homebrew 安装iproxy
iproxy 8100 8100 // 运行iproxy,将手机的8100端口,映射到电脑的8100端口上。这样我们就能通过访问电脑的8100端口来访问到手机了 (我运行部署的环境是8100,所以写的8100)
启动成功后,可以试着在浏览器访问 http://172.20.10.7:8100/status ,如果访问成功并且可以看到一些json格式的手机信息,即表示启动成功。如图所示:
此时,访问 http://172.20.10.7:8100/inspector 可以看到iPhone屏幕投影在浏览器上 如图
2.3 AirtestIDE与iPhone连接
通过ip方式连接iPhone,实时刷新界面,可进行UI测试。在AirtestIDE的iOS地址栏填入地址 http://172.20.10.7:8100,点击 “connect” 连接设备,开始编写你的Airtest测试脚本了。如图所示
注意: Xcode中的iOS Simulator模拟器部署过程和真机一样,但是可以省略步骤2.2 设置代理,不需要另外执行proxy
3. 脚本编写
3.1 Airtest图像编写脚本 例如:使用 touch 操作,选择touch 按钮 如图
具体详情 可以参考 Airtest脚本编写。
3.2 Poco编写脚本 如图
具体详情 可以参考 Poco脚本录编写。
4. 运行脚本
4.1 使用AirtestIDE运行脚本
单击AirtestIDE的 Run Script 按钮即可 如图
4.2 使用AirtestIDE命令行运行
将运行脚本时 AirtestIDE 生成的这段命令行代码(如下图圈出来的部分)复制到你的命令行终端里,回车运行就可以了
注意: 这种使用AirtestIDE命令行来运行脚本的方式,是一个简单快速的方式,假如想要批量执行、同时执行的话,可能会遇到效率不佳的问题。
4.3 使用本地python环境运行脚本
部署Python环境
Mac 系统自带Python 环境,环境支撑Python(2.7或<=3.6),我们更推荐使用 Python3
brew install python3
Airtest安装
pip install airtest
Poco安装
pip install pocoui //请注意库的名称为 pocoui,不要填错
环境部署完成后,我们就能够脱离AirtestIDE,在不同的宿主机器和被测平台上运行脚本了。使用python命令行运行脚本
airtest run untitled.air --device ios:///手机设备号 --log log/
python -m airtest run untitled.air --device Android:///手机设备号 --log log/
这两个命令行的效果是相同的,我们用airtest运行了一个叫做 untitled.air 的脚本,传入了 --device 和 --log 两个参数,分别是我们的手机设备和log输出目录。
5. 生成报告
5.1 在IDE里点击生成报告按钮来生成报告
在运行脚本后,可以立即在log窗口中看到当前脚本执行成功还是失败,然而不能够看到更加详细直观的执行结果。在AirtestIDE中,可以点击上侧图标菜单的最后那个“查看报告”的按钮,快捷键为Ctrl+L,稍后片刻将会自动使用默认浏览器打开结果报告页面。如图所示:
另外,我们可以在AirtestIDE上右键点击脚本标题,选择“打开报告”,来打开log所在的文件夹。
5.2 使用命令行来生成报告
我们的脚本运行过程,与报告生成过程是独立的两个步骤,所以我们可以先用airtest run 指令来运行脚本:
# 用airtest运行了untitled.air这个脚本
# airtest run 后面接的是脚本文件的路径
airtest run untitled.air
注意: 如果airtest run 指令没有指定--log参数,将不保存log内容和截图,且命令行会提示do not save log;如果指定--log log/, 将把生成的log内容放到当前命令行的执行目录里;如果指定了--log +某个指定目录 参数,log内容与截图将会放在指定目录里。
然后,我们可以运行 airtest report 指令来生成一份HTML格式的报告:
# 最简单的命令行,log文件与脚本文件在同一文件夹里
# 运行以下指令,在当前目录生成一个log.html
airtest report untitled.air log.html
具体详情 可以参考 Airtest_generate-html-report。
*注意:在有些浏览器上打开报告可能出现白屏现象,这是由于官方对有些浏览器没有适配全,建议用最新版本的chrome去打开。
6. 常见的问题
6.1 如何在模拟器安装应用
把xx.ipa 改成xx.zip,解压得到xx.app
打开模拟器, 在终端运行 xcrun simctl install booted xx.app
tips: 不可以把真机 app 包安装在iOS模拟器上,真机的app是基于arm的,而模拟器是运行在 X86 指令集上的,强行安装会导致闪退的问题。
6.2 如何进行iOS多机测试
目前暂未开放iOS多机测试功能
6.3 Api 支持状况
iOS设备与Android设备有很大的不同,以下通用的 Airtest 的 API 在iOS上都是支持的:
start_app: OK
stop_app: OK
snapshot: OK
home: OK
touch: OK
swipe: OK
text: OK
wait: OK
exists: OK
find_all: OK
assert_exists: OK
assert_not_exists: OK
但是以下API是不支持的: - wake: 暂未支持 (考虑用home方法替代) - keyevent: 只支持home 事件 - clear_app: 暂未支持 - install: 暂未支持 - uninstall: 暂不支持
6.4 有些浏览器打开生成的报告空白
这是由于官方对有些浏览器没有适配全,建议用最新版本的chrome去打开。