拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Airtest 与 Poco 手游自动化测试(上篇)

前言准备篇我们把环境跑通了还截了第一张屏。从这篇开始正式干活用 Airtest 的眼睛和手操作 App。我们会先搞懂 Airtest 找图的原理再逐个学会六个核心 API最后在官方 AirtestDemo 上跑通第一个完整用例。学完这篇你就具备独立写一个简单自动化脚本的能力了。1. 核心思路一切操作都基于当前屏幕画面先想一个问题Airtest 怎么知道开始游戏按钮在哪答案不是坐标不是控件而是——它先截一张当前屏幕的图然后在图里找你要的那张小图。找到了小图的中心位置就是按钮的位置点那里就行。这个思路决定了 Airtest 的一切操作模式截屏拿当前画面找目标图在画面里匹配小图操作在找到的位置点击/滑动/输入。所以用 Airtest 写脚本本质是用图片描述你想操作的东西。你需要先准备好目标图片比如按钮截图脚本才能找到它。2. 图片识别原理模板匹配Airtest 找图的技术叫模板匹配template matching。原理很简单你有一张小图模板和一张大图当前屏幕截图程序把小图放在大图的各个位置逐个比对相似度找到最像的位置。fromairtest.core.apiimport*# 在屏幕里找 start_btn.png 这张小图touch(Template(rstart_btn.png))这里有一个重要参数相似度阈值threshold。# 相似度要 0.8 以上才认为匹配成功0~1越大越严格touch(Template(rstart_btn.png,threshold0.8))threshold 越高找得越挑不容易点错但也可能找不到比如按钮颜色稍有变化threshold 越低越容易找到但可能点错位置。新手容易在找不到图和点错图之间反复横跳。记住一句话找不到就调低一点点错了就调高一点。后面实战里我们会具体体会。3. 六个核心 APIAirtest 常用 API 就六个每个都很直白。我们挨个看都配代码和大白话解释。3.1 snapshot截屏fromairtest.core.apiimport*# 截一张当前屏幕保存为图片文件snapshot(home.png)大白话拍个照存下来。用于查看当前状态、留证据、或者作为下一步找图的基础。3.2 touch点击# 在屏幕上找到这张图点它的中心位置touch(Template(rstart_btn.png))大白话看到这个按钮点它。这是 Airtest 用得最多的操作。3.3 swipe滑动# 从屏幕 (500, 1500) 滑到 (500, 500)也就是向上滑一屏swipe((500,1500),(500,500))大白话在屏幕上划一下。坐标是屏幕像素坐标上滑列表、翻页都靠它。也可以基于图片滑动比如从这张图的位置向上滑动一段距离# 从列表第一项这张图的位置向上滑动swipe(Template(rfirst_item.png),vector[0,-0.5])3.4 text输入文字# 在光标处输入文字前提输入框已经获得焦点text(hello)大白话打字。测登录、搜索时用。注意它输入到当前焦点位置所以通常先点击输入框再输入。3.5 assert_exists断言# 断言屏幕上必须出现这张图否则测试失败assert_exists(Template(rlogin_success.png),登录成功页出现了)大白话检查这个东西在不在。在测试继续不在测试直接失败。这是自动化测试的灵魂——跑完要知道对没对。3.6 wait等待# 等待这张图出现最多等 10 秒超时算失败wait(Template(rhome.png),timeout10)大白话等它出现。App 启动、页面加载都需要时间直接操作会扑空先等目标出现再动手。4. 完整用例AirtestDemo 主流程现在把六个 API 串起来跑一个真实用例。场景打开 AirtestDemo点开始游戏滑动列表点进详情断言结果。先确保模拟器连着、AirtestDemo 装着准备篇做完的事。fromairtest.core.apiimport*# 1. 连接模拟器MuMu 用 7555雷电用 5555connect_device(Android:///127.0.0.1:7555)# 2. 启动 AirtestDemo包名以你安装的版本为准可用 adb shell pm list packages 查询start_app(com.netease.airtestdemo)# 3. 等待主页出现最多 10 秒wait(Template(rhome.png),timeout10)# 4. 点击开始游戏按钮touch(Template(rstart_btn.png,threshold0.8))# 5. 等游戏界面加载sleep(2)# 6. 向上滑动浏览列表swipe((500,1500),(500,500))# 7. 点击列表里的某一项用它的截图touch(Template(ritem.png))# 8. 断言详情页的标题出现了assert_exists(Template(rdetail_title.png),进入了详情页)# 9. 截屏留证snapshot(case_done.png)逐行解释一遍关键点start_app(包名)直接拉起 App比手动点击图标稳定wait(...)放在touch前面先等目标出现再操作这是脚本不手忙脚乱的关键threshold0.8找按钮时要求相似度 0.8 以上防止点错sleep(2)页面切换需要时间简单粗暴地等一下assert_exists(..., 说明)第二参数是失败时的提示文字写清楚点报错时一看就懂。运行之后如果一切顺利你会得到一张case_done.png里面是详情页的画面——这就是你写的第一个完整测试用例。如果某一步失败怎么办找不到图是新手最常遇到的。按这个顺序排查先snapshot()截屏肉眼看看当前画面是不是你想的那样确认截图里的按钮和模板图长得像尺寸、颜色、是否被遮挡把threshold调低一点比如 0.8 → 0.7再试。这个排查思路很朴素但 90% 的找不到图都是这样解决的。小结这篇我们掌握了 Airtest 的完整套路核心思路一切操作基于当前屏幕画面截屏 → 找图 → 操作图片识别原理模板匹配 threshold 阈值六个核心 APIsnapshot / touch / swipe / text / assert_exists / wait跑通了第一个完整用例启动 → 等待 → 点击 → 滑动 → 点详情 → 断言 → 截屏。Airtest 能解决看得见、点得着的问题。但它有个天生短板靠图片认东西容易受分辨率、遮挡、相似图标影响。下一篇我们上 Poco——用控件树精准定位解决认工牌 vs 认长相的问题。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门