使用Airtest框架如何在IOS上做UI自动化?
Airtest介绍
AirtestProject是由网易游戏推出的UI自动化测试解决方案,项目构成如下:
Airtest框架
Airtest 是一个跨平台的、 基于图像识别 的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS:Poco框架
Poco 是一款 基于UI控件识别 的自动化测试框架,目前支持Android原生、iOS原生、Unity3D、cocos2dx、UE4和Egret等平台,也可以在其他引擎中自行接入poco-sdk来使用。AirtestIDE
AirtestIDE 是一款跨平台的 UI自动化测试编辑器 ,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写 Airtest 和 Poco 代码。手机集群解决方案-DeviceFarm
DeviceFarm 是网易推出的自动化测试集群解决方案,它是软硬件一体化方案,包含设备集群建设、集群设备批量维护管理、监控报警和云端真机等功能,可以为您在企业内部搭建稳定高效的设备管理平台, 提升设备利用率,赋能自动化测试流程搭建:Airlab云测试平台
Airlab云测试平台支持用例管理、脚本管理、任务预约、任务调度、云端报告等功能,可以快速构建企业自动化测试全流程,支持ios和安卓的回归测试及兼容测试。
Airtest文档:https://airtest.doc.io.netease.com/
WebDriverAgent 是什么?
WebDriverAgent是Facebook 推出的一款iOS 移动测试框架,WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。
官方github:https://github.com/facebook/WebDriverAgent (官方版本目前已不进行维护)
特点:
- 支持真机+模拟机
- 简单易上手
在做iOS自动化测试的时候,一般都需要确保手机上已经安装有WebDriverAgent应用,这个WDA应用可以是Airtest修改版、Appium修改版也可以是Facebook原版,本文以Appium修改版为例来进行说明,其他版本同样适用。
- Appium对 WebDriverAgent工具进行了封装
- Airtest的 iOS-Tagent工具也对WebDriverAgent工具进行了封装。
- 既可以使用Appium的 WebDriverAgent 工具来部署iOS真机
- 也可以使用Airtest底下的 iOS-Tagent 工具来部署iOS真机。
- 对于低版本的iOS(iOS11以下),建议使用Airtest的 iOS-Tagent 工具。
- 高版本的使用Appium的 WebDriverAgent 工具。
安装部署
环境准备
注意:尽量升级Xcode到最新版本,iPhone版本大于14,我这里使用的版本情况如下:
Xcode版本:13.4.1
iPhone版本:15.6.1
MacOS版本:12.4
Python版本:3.8+
安装Airtest的iOS-Tagent
参考:https://github.com/AirtestProject/iOS-Tagent/blob/master/Introduction/README_zh.md
安装Appium的WebDriverAgent工具
拉取代码
1 | git clone https://github.com/appium/WebDriverAgent |
Xcode设置
进入WebDriverAgent项目根目录,双击打开WebDriverAgent.xcodeproj,然后在Xcode中的TARGETS里选中WebDriverAgentLib,按照下图数字序号依次点击,注意步骤4要开启自动管理签名。
在Team选项那里添加账户然后选中,这里的账户可以是个人免费账户也可以是付费开发者账户,区别在下面会提及。
接着在TARGETS里面选中WebDriverAgentRunner,用步骤1、2中同样的方法设置好证书。
如果是个人免费版的证书,还需要修改下WebDriverAgent的BundleID,随便加后缀,不要跟别人重复就好,如果是付费版开发者证书则不需要这步操作。
运行测试
- iPhone通过usb连接电脑,在设备里如果可以看到自己的手机即可:
- xcode和ios版本需要对应,可在这查看对应关系:https://xcodereleases.com/
- 按照下图中提示,分别选择WebDriverAgentRunner和目标设备:
- 然后点击Product菜单下的Test,这时候会提示输入本机电脑的密码,输入完成后点击始终允许即可。
- 如果是个人免费版证书还会弹出下面的提示:
- 这是因为WDA应用没有被信任,需要进入手机设置-> 通用-> 描述文件与设备管理,点击开发者APP信任一下就可以了
- 然后再次运行Test,就可以在Xcode控制台看到下面的输出信息:
- 通过上面给出的IP和端口,加上/status合成一个url地址,例如http://127.0.0.1:8100/status
- 然后浏览器打开,如果出现下图的输出,就说明WDA安装成功了。
- 但是有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上,这个时候执行下面的命令即可:
1
2brew install --HEAD usbmuxd
iproxy 8100 8100
连接Airtest
上述步骤执行完成没有问题后就可以用Airtest连接iPhone进行case编写
写自动化case
iOS 的测试和其他设备差不多,支持图像识别和UI检索,下面简单介绍一个iOS测试例子:
- 连接设备
- 点击home键
- 截屏
- 执行滑动操作
- 使用poco点击app Safari
- 使用poco点击浏览器的搜索框,获取焦点
- 在搜索框输入“airtest”
- 在搜索页面往下滑动
- 判断是否存在airtest官网地址
1 | from airtest.core.api import * |
重复执行
- 拔掉手机后重新连接usb需要做
- 打开WebDriverAgent工程,选择WebDriverAgentRunner,运行菜单栏Product->Test
- 执行
1
2iproxy 8100 8100
浏览器访问:127.0.0.1:8100/status或者localhost:8100/status 看到手机信息即表示连接成功 - 编写运行自动化case
Airtest技巧
局部截图
- 打开airtest设置
- 鼠标放到手机上会自动显示该点的坐标
- 实例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14# -*- encoding=utf8 -*-
from airtest.core.api import *
from poco.drivers.ios import iosPoco
from airtest.aircv import *
# file_path未文件保存路径,比如:/Users/Desktop/test.png
file_path="xxx"
screen = G.DEVICE.snapshot()
# crop_image的参数:1. 图片,2. 截图坐标(0,270)是左上角坐标,(1284,2650)是右下角坐标
screen = aircv.crop_image(screen, (0, 270, 1284, 2650))
aircv.imwrite(file_path, screen, 99)
print("截图完成..")