在移动应用和游戏测试中,重复的手动操作不仅耗时耗力,还容易出现人为失误。而 AirtestIDE 作为网易出品的一站式自动化测试工具,凭借图像识别 + UI 控件识别双核心能力,无需复杂环境配置,就能快速实现移动 APP、小程序、游戏的自动化测试,成为测试工程师的必备神器。本文将从核心介绍、热门应用场景、详细教程到实战案例,带你全面掌握 AirtestIDE 的使用,新手也能快速上手!
一、AirtestIDE 核心介绍
1. 什么是 AirtestIDE?
AirtestIDE 是一款跨平台、可视化的自动化测试 IDE,内置 Python3.6.5 运行环境及 Airtest、Poco 两大核心框架,支持 Windows、Mac、Linux 系统,可对 Android、iOS、Windows、Unity3D、Cocos2d-x 等多平台应用进行自动化测试。其核心优势在于 "无侵入式" 和 "低代码门槛",既适合新手快速录制脚本,也支持资深工程师自定义开发。
2. 核心优势
- 免环境配置:解压即用,无需本地安装 Python 及依赖库,新手零门槛上手;
- 双框架协同:Airtest(图像识别)+ Poco(UI 控件识别),覆盖不同测试场景;
- 可视化操作:支持脚本录制、截图编辑、UI 树查看,无需死记 API;
- 多平台兼容:支持 Android/iOS 原生 APP、微信小程序、游戏(Unity3D/Cocos)、Windows 应用;
- 灵活扩展:支持 Python 第三方库,可集成到持续集成(CI/CD)流程,支持批量执行与报告生成。
3. 核心组件:Airtest vs Poco
| 框架 | 核心原理 | 适用场景 | 优势 |
|---|---|---|---|
| Airtest | 图像识别 | 无源码 APP、小程序、跨平台应用 | 无需依赖控件,快速上手 |
| Poco | UI 控件识别 | 有源码 APP、游戏(Unity/Cocos) | 稳定性高,不受界面变化影响 |
二、热门应用场景
AirtestIDE 凭借强大的兼容性,在多个领域都有广泛应用,以下是最热门的 5 个场景:
1. 移动原生 APP 自动化测试
适用于电商、金融、社交类 APP 的核心流程测试,比如:
- 电商 APP:商品搜索→加入购物车→下单→支付流程自动化;
- 金融 APP:登录→转账→账单查询流程回归测试;
- 优势:支持多品牌 Android/iOS 真机连接,可批量执行兼容性测试。
2. 微信 / 支付宝小程序测试
小程序无需安装,传统测试工具难以适配,AirtestIDE 可通过:
- 手机微信打开小程序后,通过 USB 连接设备,直接识别小程序界面(图像识别 + Poco 控件识别);
- 适用场景:小程序功能回归、多机型适配测试(尤其解决 H5 页面控件定位难题)。
3. 游戏自动化测试
针对 Unity3D、Cocos2d-x 等引擎开发的游戏,Poco 框架可直接识别游戏内 UI 控件:
- 场景:游戏新手引导流程自动化、日常任务重复执行、战力测试(自动打怪、升级);
- 优势:支持游戏内滑动、拖拽、长按等操作,稳定性远超图像识别。
4. 回归测试批量执行
版本迭代时,重复执行核心功能用例是测试痛点,AirtestIDE 可:
- 编写批量执行脚本,一次运行多个.air 用例;
- 自动生成可视化报告,标记失败用例,提升回归测试效率。
5. CI/CD 持续集成集成
支持命令行运行脚本,可无缝集成到 Jenkins、GitLab CI 等工具:
- 场景:代码提交后自动触发自动化测试,生成报告并发送邮件通知;
- 优势:减少人工干预,缩短测试周期,适配敏捷开发流程。
三、快速上手教程(新手必看)
1. 环境准备(30 秒完成)
- 下载:找到官网下载,文章开始也提供便捷的下载方式。
- 安装方式:下载压缩包后直接解压,无需安装(内置 Python3.6.5、Airtest、Poco 环境);
- 注意:若需使用 Python2 或第三方库(如 requests),需本地配置 Python 环境,在 IDE 中指定 Python.exe 路径(参考 IDE 配置文档)。
2. Android 真机 USB 连接(关键步骤)
以华为手机为例,其他品牌流程类似:
- 开启开发者模式:设置→系统→关于手机→多次点击 "版本号";
- 开发者选项配置:允许 USB 调试、连接 USB 时弹出提示、监控 ADB 安装应用(可选 "仅充电模式下允许 ADB 调试");
- 连接设备:关闭手机助手,USB 线连接电脑与手机,选择连接方式(已开启 "仅充电 ADB" 则选 "仅充电",否则选 "传输照片");
- Airtest 连接:IDE 左侧设备列表点击 "Connect",未识别则点击 "Refresh ADB" 刷新。

3. 核心框架初始化
(1)Airtest 初始化(图像识别)
新建.air 脚本后,默认生成初始化代码,无需手动修改:
# -*- encoding=utf8 -*-
from airtest.core.api import *
auto_setup(__file__) # 自动初始化设备,无需手动配置
(2)Poco 初始化(UI 控件识别)
根据应用类型选择初始化方式,IDE 会自动插入代码:
-
Android 原生 APP:
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
poco.device.wake() # 唤醒设备 -
Unity3D 游戏:
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
4. 脚本录制与编写
AirtestIDE 支持 "录制 + 手动编写" 结合,新手优先用录制功能:
(1)Airtest 录制(图像识别)
-
打开 Airtest 辅助窗(右侧),选择操作类型(touch 点击、swipe 滑动、text 输入等);
-
点击按钮后,在设备画面框选目标区域(如 "网易云音乐图标"),自动生成代码:
点击"网易云音乐"图标(图像识别,可双击图片修改参数)
touch(Template(r"网易云音乐.png", threshold=0.7, target_pos=5, rgb=False))
输入文本
text("Once&Forever")
滑动(从下往上)
swipe([0.5, 0.8], [0.5, 0.2])
(2)Poco 录制(UI 控件识别)
Poco 支持 3 种模式,核心用 "冻结模式" 定位控件:
-
点击 IDE 顶部 "Poco Pause" 进入冻结模式(屏幕冻结,UI 树停止刷新);
-
在左侧 UI 树中找到目标控件(如 "text = 网易云音乐"),双击自动插入代码:
点击"网易云音乐"APP(UI控件识别,不受图标位置影响)
poco(text="网易云音乐").click()
滑动列表(如推荐歌单)
scrollView = poco(type="ScrollView")
scrollView.focus([0.5, 0.8]).drag_to(scrollView.focus([0.5, 0.2])) # 上滑半页
5. 脚本编辑窗口核心功能(重点补充)
(1)图片编辑器:参数精细化调整
双击脚本中的图片可打开图片编辑器,支持 6 个核心参数配置,大幅提升识别准确率:
| 参数名 | 类型 | 作用说明 | 默认值 | 推荐配置 |
|---|---|---|---|---|
| filename | 字符串 | 图片文件名,修改后会生成副本(如 "网易云音乐.png") | 自动生成 | 自定义命名(便于维护) |
| threshold | 浮点型 | 匹配阈值(0.0-1.0),可信度 > 阈值则识别通过 | 0.7 | 识别错误时调至 0.8-0.9 |
| target_pos | 整型 | 操作位置(1-9 对应九宫格,5 为中心) | 5 | 按钮类选 5,边缘元素选对应位置 |
| rgb | 布尔型 | 是否启用彩色识别(False 为灰度识别) | False | 色彩鲜明的元素设为 True |
| scale_max | 整型 | mstpl 算法最大匹配范围(700-2000) | 800 | 大屏设备设为 1000 |
| scale_step | 浮点型 | mstpl 算法搜索步长(0.001-0.1) | 0.01 | 需精准匹配时设为 0.005 |
实用技巧:点击编辑器内「Snapshot Recognition」按钮,可截取当前手机屏幕并验证识别效果,成功会标注识别区域,方便调试。
(2)单独调试功能(避坑指南)
- 选中 1 行 / 多行代码右键「只运行选中代码」,无需执行整个脚本;
- 注意:调试 Poco 脚本时,需同时选中 Poco 初始化代码(否则会报 "poco is not defined" 错误)。
(3)高效操作快捷技巧
- 图片 / 代码模式切换:右键选择切换,纯代码模式可避免桌面自动化时识别到脚本窗口的图片;
- 快速注释 / 取消:选中代码按「ctrl+/」;
- 快速缩进 / 取消:选中代码按「Tab」缩进、「shift+Tab」取消缩进;
- 实用快捷功能:点击脚本名称右键,可快速打开项目目录、导出报告、压缩脚本、清理多余图片(一键删除未使用的截图)。
6. 命令行运行与报告生成
(1)运行脚本
打开终端,切换到脚本目录,执行命令:
# 基础运行(默认使用第一台连接设备)
airtest run netease_music.air --log E:/log # --log指定日志目录
# 可选参数(常用)
airtest run netease_music.air --device Android:///123456 --log E:/log --recording
# --device:指定设备(Android://adbhost:adbport/设备序列号)
# --recording:录制执行过程(生成MP4,嵌入报告)
(2)生成可视化报告
脚本运行后,执行以下命令生成 HTML 报告:
airtest report netease_music.air --log_root E:/log --outfile E:/log/report.html --lang zh --export E:/export_report --plugin poco.utils.airtest.report
# --export:导出可移植报告(含图片、CSS,可发送给他人)
# --plugin:支持Poco脚本的报告展示
四、实战案例
网易云音乐核心流程自动化(含详细操作步骤)
案例背景
测试网易云音乐 "启动→搜索歌曲→播放→验证播放状态" 流程,结合 Airtest 图像识别与 Poco 控件识别,全程可视化操作,新手可直接跟随步骤执行。
前置准备
- 手机已安装网易云音乐 APP(包名:com.netease.cloudmusic);
- 手机已通过 USB 连接 AirtestIDE,设备状态显示 "Connected";
- 新建脚本命名为
netease_music.air,IDE 自动生成 Airtest 初始化代码。
详细操作步骤(共 6 步,含 IDE 操作截图说明)
步骤 1:插入 Poco 初始化代码(适配 Android 原生 APP)
-
点击 IDE 顶部 "Poco" 选项卡,选择 "Android Uiautomation" 作为应用类型;
-
脚本编辑区弹出 "插入初始化代码" 提示,选择光标位置(初始化代码后),点击 "Yes";
-
自动生成 Poco 初始化代码,补充 "唤醒设备" 语句,最终代码如下:
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
poco.device.wake() # 唤醒设备,避免黑屏
步骤 2:录制 "打开网易云音乐" 操作(Airtest 图像识别)
-
打开 IDE 右侧 "Airtest 辅助窗",点击「touch」按钮(操作类型:点击);
-
在左侧设备画面中,鼠标左键框选 "网易云音乐" 图标,松开鼠标自动生成代码;
-
双击脚本中的自动生成的图片(默认名如
tpl1633763908637.png),打开图片编辑器:- 修改
filename为 "网易云音乐.png",点击 OK,弹出 "确认修改文件名" 提示,选择 "Yes"(脚本目录下生成图片副本); - 调整
threshold为 0.75(提升识别准确率),rgb设为 False(灰度识别,避免色彩干扰); - 点击「Snapshot Recognition」按钮,验证当前设备屏幕中能识别到图标(识别成功会标注绿色框),点击 OK 保存;
- 修改
-
补充
sleep(3)语句(等待 APP 加载),最终代码:点击"网易云音乐"图标(图像识别,参数已优化)
touch(Template(r"网易云音乐.png", threshold=0.75, target_pos=5, rgb=False))
sleep(3) # 等待APP加载完成

步骤 3:录制 "点击搜索框" 操作(Poco 控件识别)
-
点击 IDE 顶部「Poco Pause」按钮,进入冻结模式(设备画面冻结,UI 树停止刷新);
-
左侧 "UI 渲染树" 中,搜索 "searchBar";
-
双击该控件,脚本编辑区自动插入代码:
poco(resourceId="com.netease.cloudmusic:id/searchBar").click(); -
补充
sleep(1)语句,代码如下:点击搜索框(Poco控件识别,不受位置变化影响)
poco(resourceId="com.netease.cloudmusic:id/searchBar").click()
sleep(1) # 等待搜索界面加载
步骤 4:录制 "输入歌曲名" 操作(Airtest 文本输入)
-
右侧 "Airtest 辅助窗" 点击「text」按钮,在弹出的输入框中输入 "Once&Forever",点击 "确认";
-
脚本自动生成代码:
text("Once&Forever"),补充sleep(1)语句(等待搜索结果加载),最终代码:输入歌曲名"Once&Forever"
text("Once&Forever")
sleep(1)

步骤 5:录制 "点击搜索结果" 操作(Poco 正则匹配)
-
再次点击「Poco Pause」解除冻结模式,设备画面恢复交互;
-
手动在设备上点击搜索结果列表(确保结果显示),再次点击「Poco Pause」冻结;
-
UI 渲染树中搜索 "Once&Forever",因结果可能带歌手信息(如 "Once&Forever - Billkin"),使用正则匹配:
- 脚本中手动修改代码为
poco(textMatches="^Once&Forever.*$").wait(5).click(); wait(5)表示最多等待 5 秒,避免搜索结果加载延迟;
- 脚本中手动修改代码为
-
补充
sleep(2)语句(等待歌曲播放),代码如下:点击搜索结果(正则匹配,适配带歌手信息的场景)
poco(textMatches="^Once&Forever.*$").wait(5).click()
sleep(2)
步骤 6:添加 "断言播放状态"(Airtest 图像识别)
-
设备上歌曲开始播放后,右侧 "Airtest 辅助窗" 点击「assert_exists」按钮;
-
框选设备画面中的 "暂停" 按钮(红色圆形按钮,如图所示),自动生成断言代码;
-
双击断言代码中的图片,打开图片编辑器:
threshold设为 0.8(暂停按钮图标固定,提高阈值提升准确率);rgb设为 True(暂停按钮为红色,彩色识别更精准);- 点击「Snapshot Recognition」验证识别成功,点击 OK 保存;
-
最终断言代码:
断言歌曲正在播放(识别"暂停"按钮)
assert_exists(Template(r"tpl_pause_btn.png", threshold=0.8, rgb=True), msg="歌曲未播放")
print("网易云音乐搜索播放流程测试通过!")
步骤 7:添加异常处理与退出 APP
在脚本末尾添加异常捕获和退出 APP 代码,确保脚本完整性:
except PocoTargetTimeout:
print("错误:未找到目标控件(可能是APP加载超时)")
except Exception as e:
print(f"测试失败:{str(e)}")
finally:
# 无论成功与否,均退出APP
stop_app("com.netease.cloudmusic")
完整脚本整合
# -*- encoding=utf8 -*-
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from poco.exceptions import PocoTargetTimeout
# 初始化Airtest
auto_setup(__file__)
# 初始化Poco(Android原生APP)
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
poco.device.wake() # 唤醒设备
try:
# 步骤1:点击打开网易云音乐(Airtest图像识别)
touch(Template(r"网易云音乐.png", threshold=0.75, target_pos=5, rgb=False))
sleep(3)
# 步骤2:点击搜索框(Poco控件识别)
poco(resourceId="com.netease.cloudmusic:id/searchBar").click()
sleep(1)
# 步骤3:输入歌曲名
text("Once&Forever")
sleep(1)
# 步骤4:点击搜索结果(正则匹配)
poco(textMatches="^Once&Forever.*$").wait(5).click()
sleep(2)
# 步骤5:断言播放状态
assert_exists(Template(r"tpl_pause_btn.png", threshold=0.8, rgb=True), msg="歌曲未播放")
print("网易云音乐搜索播放流程测试通过!")
except PocoTargetTimeout:
print("错误:未找到目标控件(可能是APP加载超时)")
except Exception as e:
print(f"测试失败:{str(e)}")
finally:
# 退出APP
stop_app("com.netease.cloudmusic")
脚本调试与运行
- 单独调试:选中每段代码(含初始化代码),右键「只运行选中代码」,验证每步操作是否正常;
- 完整运行:点击 IDE 顶部「运行」按钮,脚本自动执行所有步骤;
- 生成报告:运行完成后,执行命令生成报告,查看每步操作截图和执行结果。
五、常见问题与避坑指南
- 设备连接失败:检查 USB 调试是否开启、手机助手是否关闭、连接方式是否正确,可重启 ADB(IDE 中点击 "Refresh ADB");
- 图像识别不准确:调节 threshold 阈值、启用 rgb 彩色识别、扩大截图区域,避免动态元素(如广告);
- Poco 无法识别控件:确认应用类型与 Poco 初始化方式匹配(如 Unity 游戏需用 UnityPoco),部分 APP 需关闭混淆;
- Poco 单独调试报错:必须同时选中 Poco 初始化代码,否则提示 "poco is not defined";
- Mac 图片编辑器卡死:点击 OK/Cancel 后 IDE 卡死,建议调试完成后再保存,或暂时使用 Windows 环境;
- 报告无 Poco 步骤 :生成报告时必须添加
--plugin poco.utils.airtest.report参数。