工具简介

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平台上

下载:

https://airtest.netease.com/

工具入门

https://airtest.doc.io.netease.com/tutorial/0_automated_testing/

OS环境搭建

1.Android

  1. 打开手机设置-开发者选项-USB调试开关

  2. 在AirtestIDE设备面板中点击refresh ADB按钮,查看连接上的设备

  3. 如果没有显示出设备,试试restart ADB,如果还不行,参考FAQ文档进行问题排查

  4. 能够成功看到设备后,点击对应设备的Connect按钮,进行初始化

adb无需配置PTP防火墙、因此在办公时如遇到公司防火墙提示USB设备无权限、也不用管、adb完全可以连接

Device Window出现对应手机侧画面、则表示连接成功


2.IOS

https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/4_ios_connection/https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247485577&idx=1&sn=bdc1895134f66c7e106f6cb668d77f13&chksm=f97ce88ace0b619cdd7c18fd698141eebf02086311c331a91ce5dad4a9eb6dee35bf99ce0629&token=669080103&lang=zh_CN#rd
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及以下

python-3.10.10-amd64.exe

安装无脑不多介绍


Git环境配置

下载及安装省略,具体参见:https://www.runoob.com/git/git-install-setup.html

此处主要记录出现的这个问题:

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)
https://www.oracle.com/

详见以下大神写的攻略

https://blog.csdn.net/m0_61780691/article/details/132194075


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版本

https://github.com/appium/appium-desktop/releases

下载 并 安装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

https://github.com/appium/WebDriverAgent/releases

下载最新版本的Source code(zip)

解压后将所有内容粘贴覆盖至Appium-Server-GUI的自带WDA路径

完成WDA更新


WDA环境配置

双击WebDriverAgent.xcodeproj文件、使用XCode打开

20240613-133505.jpg

将WebDriverAgentLib的Team追加(Apple_Developer账号登录)

将WebDriverAgentRunner的Team追加、Bundle identifier更改为其他合法字符串(例:com.renew.WebDriverAgentRunnerTest

截屏2024-06-13 12.18.28-lfps.png

将真机-用数据线连接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

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)

正常情况下部分机型第一次运行会自动安装到手机,但如果没有自动安装成功、则需要手动安装

安装包路径如下:安装到手机即可

image-20211119165145246

代码部分调用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

API

https://airtest.readthedocs.io/zh-cn/latest/README_MORE.htmlhttps://poco.readthedocs.io/zh-cn/latest/index.html