
Airtest
工具简介
AirtestProject是由网易游戏推出的UI自动化测试解决工具、是由Python开发的第三方库
项目构成如下:
Airtest
基于Python的、跨平台的UI自动化测试框架,基于图像识别原理,适用于游戏和App。
Poco
基于UI控件搜索的自动化测试框架,其核心优势是除了对Android、IOS之外,对游戏也是支持的,同时也支持微信小程序、微信小游戏和H5应用。
AirtestIDE
专用代码编辑器
自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程
支持基于图像识别的Airtest框架,适用于所有Android/iOS/Windows应用
支持基于UI控件搜索的Poco框架,适用于Unity3d,Cocos2d与Android/iOS App等多种平台
能够运行在Windows、MacOS、Linux平台上
下载:
工具入门
OS环境搭建
1.Android
打开手机设置-开发者选项-USB调试开关
在AirtestIDE设备面板中点击refresh ADB按钮,查看连接上的设备
如果没有显示出设备,试试restart ADB,如果还不行,参考FAQ文档进行问题排查
能够成功看到设备后,点击对应设备的Connect按钮,进行初始化
adb无需配置PTP防火墙、因此在办公时如遇到公司防火墙提示USB设备无权限、也不用管、adb完全可以连接
Device Window出现对应手机侧画面、则表示连接成功
2.IOS
ios-Tagent环境配置
ios_Tagent最高仅支持iOS16.7.1、已放弃此方案!见下文Appium
ios-Tagent下载
git clone git@github.com:AirtestProject/iOS-Tagent.git
Appium+WDA环境配置(墙裂推荐!)
背景:ios-Tagent的开发者FaceBook已于2020年停止更新、WDA最高仅支持iOS16.7.1、Xcode最高仅支持12.1、存在局限性
故转而使用还在更新的Appium、Appium内置了更新的WDA
不过在搭建Appium+WDA前,还需安装其他必须环境,如下:(必须在MACBOOK上搭建!)
Python环境
不要用最新版本!兼容性不足
推荐3.10.10及以下
安装无脑不多介绍
Git环境配置
下载及安装省略,具体参见:
此处主要记录出现的这个问题:
Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因
客户端与服务端未生成 ssh key
客户端与服务端的ssh key不匹配
找到问题的原因了,解决办法也就有了,重新生成一次ssh key ,服务端也重新配置一次即可。
客户端生成key
ssh-keygen -t rsa -C "znexrenew@gmail.com"
ssh -v git@github.com
ssh-agent -s
ssh-add ~/.ssh/id_rsa
服务端配置Key
打开你刚刚生成的id_rsa.pub,将里面的内容复制,进入你的github账号,在settings下,SSH and GPG keys下new SSH key,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key。
切记注意SSH Key的强制文本格式
git clone git@github.com:AirtestProject/iOS-Tagent.git
再执行一次git clone即可正常
JAVA环境(Macbook)
详见以下大神写的攻略
Xcode环境
App Store搜索安装本体(约20G)
安装后打开任意项目、Iphone与Macbook连接、开始下载最新的iphone-iOS支持库(约7G)
Homebrew环境
在Macbook的终端中进行
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
下载源推荐阿里
Appium环境
Appium分为桌面可视化版(Desktop)、和指令版、此处仅介绍Desktop版本
下载 并 安装Appium-Server-GUI-mac-Version.dmg
WDA(WebDriverAgent)更新
1.Macbook的文件管理器中、打开Appium-Server-GUI的自带WDA路径
/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
2.下载最新版WDA
下载最新版本的Source code(zip)
解压后将所有内容粘贴覆盖至Appium-Server-GUI的自带WDA路径
完成WDA更新
WDA环境配置
双击WebDriverAgent.xcodeproj文件、使用XCode打开
将WebDriverAgentLib的Team追加(Apple_Developer账号登录)
将WebDriverAgentRunner的Team追加、Bundle identifier更改为其他合法字符串(例:com.renew.WebDriverAgentRunnerTest
)
将真机-用数据线连接iPhone至Mac
选择项目,在菜单栏 product -> Scheme -> WebDriverAgentRunner
选择设备,在菜单栏 product -> Destination -> 选择你的真机
启动Test,在菜单栏 product -> Test
iPhone侧WebDriverAgent app被安装、则证明WDA环境搭建成功
报错排查
1.
Previous preparation error: Developer Mode disabled. To use 越狱兔的iPhone12 for development, enable Developer Mode in Settings → Privacy & Security.
iPhone设备开发者模式已关闭
打开iPhone的设置,搜索隐私与安全性-安全性-开发者模式 默认为关闭 打开
2.
The request to open "com.facebook.WebDriverAgentRunner20240401yutu.xctrunner" failed.
证书未信任
VPN与设备管理-信任证书
3.
Thread 1: "-[__NSXPCInterfaceProxy_XCTMessagingChannel_RunnerToDaemon XCTexchangeProtocolVersion:reply:]: unrecognized selector sent to instance 0x28146df90"
这个类型的报错或是其他代码中内容报错
优先考虑Appium+WDA环境版本不对应、不要擅自更改代码
Tidevice环境搭建
在常规测试流程中,通常需要在Macbook上配置AirTest环境,并在该设备上完成编码、运行和测试工作,同时必须保持Xcode运行。
然而,利用阿里巴巴开发并开源的Tidevice工具,可以在不依赖Macbook和Xcode的情况下,仅使用Windows操作系统来执行iPhone设备的Airtest完整测试流程。即在Windows上启动WDA(WebDriverAgent)香!
pip install tidevice
安装完成后
tidevice list
能识别出设备环境即搭建成功
如果报错:
则需安装并启动iTunes
Windows上启动WDA服务
tidevice applist
获得WDA服务的名称
运行WDA
tidevice xctest -B com.renew.WebDriverAgentRunnerTest.xctrunner
WebDriverAgent 启动成功后,后台挂着该命令行窗口即可。
DeviceIdentifier/uuid
Airtest IDE连接iPhone设备
http+usbmux://DeviceIdentifier/uuid
IOS实时画面表示、则代表iOS环境搭建完成
AirTest额外环境配置
poco环境搭建
与Airtest框架一样,Poco实际上也是Python的一个第三方库。
为了获取Android平台的原生控件信息,我们的安卓设备上必须安装上pocoservice.apk
手机安装poco环境(Android)
正常情况下部分机型第一次运行会自动安装到手机,但如果没有自动安装成功、则需要手动安装
安装包路径如下:安装到手机即可
代码部分调用poco
#调用poco库
from airtest.core.api import *
from airtest.core.android.android import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
android = Android()
指令入门
连接方式默认为USB、无线连接实测延迟较大不推荐
连接设备(By Commond)
通常使用上述的AirtestIDE中可视化连接即可连接设备、但若想通过脚本进行固定设备的连接、也可使用命令
①连接任意手机
auto_setup(__file__, devices=["Android:///"],logdir=True,compress=90)
②连接特定手机
设备在打开开发者模式⇒USB调试、与PC连接后、cmd中使用adb devices
获取设备的唯一UUID
如我手头的这台Google Pixel 7、UUID为:31111FDH2001QC
auto_setup(__file__, devices=["Android://127.0.0.1:5037/31111FDH2001QC"],logdir=True,compress=90)
connect_device("Android:///31111FDH2001QC?cap_method=javacap&touch_method=adb")
init_device(platform="Android",uuid="31111FDH2001QC", cap_method="JAVACAP")
APP启动
获取APP Package包名
此处介绍使用AirtestIDE自带的Android Assistant工具进行包名查询
封装的adb命令
#检测是否已安装App
check_app("com.fujifilm.xapp")
#打开App
start_app("com.fujifilm.xapp")
#关闭App
stop_app("com.fujifilm.xapp")
#安装App
install(r"C:\Users\FUJI\Desktop\connection.air\xapp_v210_IT10.apk")
#清除应用数据
clear_app("com.fujifilm.xapp")
#唤醒手机
wake()
#输出手机的UUID
from airtest.core.android.android import *
android = Android()
print(android.get_default_device())
KeyEvent
#回主画面
keyevent("HOME")
或
home()
#切替手机状态:休眠/唤醒
keyevent("POWER")
#文本输入
text("任万新真帅!")
Poco控件定位
控件定位
基本选择器
指定遍历获取到的元素(Element)
如:
【即时取景拍摄】按钮的Element有很多、但大部分都不是唯一的、此处即可指定唯一的【name】元素来实现【点击】动作
相对选择器
空间顺序选择器
.bat执行Airtest脚本
主要用于同一脚本在一台PC上运行于多个手机
.bat 文件是可执行文件,它包含一条或多条命令。使用 .bat 文件进行批处理操作,可以帮助我们简化日常或者重复性的操作。 .bat 文件里面的命令也是靠 cmd.exe 解析执行的,所以我们可以在 .bat 文件中编写运行airtest脚本的命令,以此来执行airtest脚本。
在任意位置新建以下.bat文件,并执行即可
执行单个脚本
::关闭回显
@echo off
::切换到D盘
D:
::进入D盘的test目录
cd D:\test
::执行 airtest run 命令
start airtest run newsLogin.air
exit
连续执行多个脚本
@echo off
D:
cd D:\test
title 正在执行第一个脚本
airtest run newsLogin.air
title 正在执行第二个脚本
airtest run newsUsing.air
title 正在执行第三个脚本
airtest run newsExit.air
exit
多个手机同时跑脚本
@echo off
D:
cd D:\test
start "正在使用雷电模拟器跑脚本" airtest run newsLogin.air --device Android://127.0.0.1:5037/emulator-5554
start "正在使用mumu模拟器跑脚本" airtest run newsLogin.air --device Android://127.0.0.1:5037/127.0.0.1:7555
exit