App自动化测试工具 - AirTest
本次专题分享的系列目标
AriTest简介
AirTest能做什么
AirTest搭建方式
AirTestIDE工具下载
AirTestIDE安装步骤
AirTestIDE布局
AirTestIDE链接Android设备
远程设备连接
兼容模式
AirTest图像框架API
新建脚本类型选择
区别:
Tips:
运行脚本
查看报告
元素操作方法
Touch方法
图像识别扩展
AirTest的坐标系
使用屏幕坐标的功能查看坐标
Wait方法
swipe方法
exists方法
text方法
keyevent方法
snapshot 方法
sleep方法
assert_exists方法
assert_not_exists方法
assert_equal方法
assert_not_equal方法
本次专题分享的系列目标
认识Airtest
了解AirTest能做什么
AirTest安装及环境搭建
掌握AirTest图形化api使用
AriTest简介
AriTest由网易团队出品,是一个基于图像识别原理的跨平台UI自动化测试框架,主要是面向游戏的UI自动化测试,同样也支持
Android原生app、iOS app、微信小程序的UI测试。
特点:
跨平台:AriTest几乎可以在所有平台上执行游戏和App的自动化
易操作:使用图像识别技术来定位UI元素,无需嵌入任何代码即可对游戏和应用进行自动化
可扩展性:通过使用AriTest提供的命令行与python API接口,可以很轻松的在大规模设备集群上运行脚本
GUI工具: AriTestIDE是一个强大的GUI工具,可以帮助你录制和调试测试脚本
AirTest能做什么
Game:借助图像识别和UI层次结构,支持所有游戏引擎和应用,多平台,使用方便
Android:Android原生应用测试的测试过程中,AirTest可以发挥至关重要的作用,即插即用
Windows:支持Windows应用,一次编写,跨平台运行
iOS:AirTest支持对iOS进行方便快捷的测试,可以通过Poco来快捷获取iOS设备页面中的原生元素的位置和信息
Web:给予Chrome Devtools Protocol协议,自动录制生成selenium脚本,精确定位与操作界面元素
AirTest搭建方式
python
命令:pip install -U airtest
说明:安装python的AirTest库,通过python代码直接调用AirTest库的Api方法
提示:此种方式,需要一定python代码基础
Gui工具
工具:AirTestIDE
说明:AirTestIDE工具自带python环境,无需单独安装
提示:使用工具可以录制操作,也可以手动编写调用api
AirTestIDE工具下载
官网下载地址: https://airtest.netease.com/
找到对应自己设备平台的版本进行下载
点击同意并下载
AirTestIDE安装步骤
下载完成后,直接点击下载好的dmg文件,进行安装
安装完成后,进入到登录页面,点击右下角跳过,直接进入AirTestIDE
AirTestIDE布局
菜单栏和快捷按钮
用于创建新项目,保存项目,运行脚本和检查报告输出
Airtest辅助窗
基于图像识别技术框架
Poco辅助窗
基于UI控件搜索框架,支持主流游戏引擎、Android应用程序
Selenium Window
Web项目,Selenium框架
脚本编辑窗
脚本区域
Log查看窗
日志区域
设备窗
实时手机屏幕,支持使用鼠标事件来远程控制设备
AirTestIDE链接Android设备
Android真机连接准备:
先安装手机对应品牌的官方驱动,确保能使用电脑对手机进行USB调试
确保已经打开了手机中的"开发者选项",并且打开"开发者选项"内的"允许USB调试"
由于设备厂商不同,开启开发者模式的步骤有区别,但是大多是针对版本号进行多次点击即可开启开发者模式
部分手机需要打开"允许模拟位置"、"允许通过USB安装应用"等设置
关闭电脑上已经安装的手机助手软件,能避免绝大多数问题
使用USB线连接手机和电脑,手机上出现的 "USB" 弹窗
勾选一律允许使用这台计算机进行调试,避免以后的重复操作
点击
点击连接面板中的 "ADB" 按钮,设备列表将会刷新
点击列表内对应设备的 "Connect" 完成连接
如果经上述步骤后,设备未刷出,点击 "ADB" 按钮
如果遇到任何Android设备连接问题,请参阅Android连接常见问题
远程设备连接
已知IP和端口的远程设备 ip:port,AirtestIDE可以直接连接
点击设备窗内的 ""
将 adb connect ip:port 字段填入填充框内,点击 "" 按钮,
远程设备将出现在设备列表中,点击 "connect"按钮。
主流模拟器的设备连接代码如下:
模拟器 |
adb连接代码 |
网易MuMu |
adb connect 127.0.0.1 :7555 |
夜神 |
adb connect 127.0.0.1 :62001 |
逍遥 |
adb connect 127.0.0.1 :21503 |
iTools |
adb connect 127.0.0.1 :54001 |
天天 |
adb connect 127.0.0.1 :6555 |
海马玩 |
adb connect 127.0.0.1 :26744 |
BlueStacks |
adb connect 127.0.0.1 :5555 |
兼容模式
AirTestIDE提供了3个备用的连接参数: Use javacap 、Use ADB orientation 和 Use ADB touch
Use javacap 是给部分无法正常看到手机画面、minicap初始化失败 的手机或设备用的,所以模拟器看到黑屏、部分特
殊的平板等设备可以考虑勾选这个选项
Use ADB orientation 是 屏幕旋转 的,如果在安卓手机屏幕旋转方向检测有问题、或者是部分特殊的平板无法显示
正确的屏幕方向时可以勾选
Use ADB touch 是 发送adb指令来点击屏幕 ,效果很差,速度也很慢, 不建议勾选,只有在部分无法点击屏幕的特殊
安卓设备上才需要使用(例如智能后视镜、特殊型号的平板等设备上) 正常情况下,手机都可以点击,如果无法被点击 (比如小米设备),一般都是因为手机设置有选项漏了打开,特别是小米设备要注意 开启允许模拟点击 的设置
AirTest图像框架API
AirtestIDE中提供了Airtest录制辅助窗,可以快速生成Airtest常用语句,帮助我们录制脚本
在AirtestIDE的Airtest录制辅助窗内,包含有三种类型的录制按钮:
操作类型 |
辅助类型 |
断言类型 |
点击:touch |
输入文本:text |
断言存在:assert_exists |
滑动:swipe |
关键词操作:keyevent |
断言不存在:assert_not_exists |
等待截图:wait |
等待:sleep |
断言相等:assert_equal |
存在截图:exists |
断言不相等:assert_not_equal |
|
对当前画面截图:snapshot |
Tips:光标悬浮至API上,显示提示参数信息
新建脚本类型选择
.air AirTest项目:生成一个项目名称.air目录,目录下有一个项目名.py文件
.py 纯python(高级用户):生成一个项目名.py文件
区别:
相同点:都是python文件
不同点:脚本文件初始化代码不同,一个采用默认值无法看到,一个可以看到默认值,进行修改
Tips:
AirTest框架自带python解释器及标准库,无需单独安装python环境
运行脚本
运行脚本有两种方式
运行脚本
菜单 ->运行 →运行脚本
F5
运行单行代码
光标定位当前行代码 ->右键 ->只运行选中代码
查看报告
快捷键 Ctil + L
元素操作方法
Touch方法
作用:触摸动作
常用参数:
v:触摸对象图像或坐标
times:触摸次数,默认1
duration:触摸时间,默认0.01秒
基础操作: 使用touch 触摸「Monkey」应用
点击touch按钮
拉选应用图标
实例:
图像识别扩展
图像触摸位置
图像识别匹配度
filename:图片名称,可修改文件名,敲击Enter确认修改。
threshold:识别阈值,范围[0,1]。识别可信度低于此阈值的结果将被舍弃。 (可自行调节,默认匹配度为70%) target_pos:范围1-9,对应九宫格键盘位置,如上图所示。(默认位置0;5,均在图像中央位置)
rgb:图片颜色(默认灰色)
AirTest的坐标系
使用绝对坐标系的touch和swipe接口
AirTest的touch接口,实际上点击的是一个 (x, y)绝对坐标,在截图语句中, AirTest会先根据传入的图片找到该图片在
当前画面上的位置坐标,然后进行点击。
而AirTest的swipe接口,滑动起点和滑动终点使用的也是(x, y)绝对坐标。
打开IDE的选项>–设置,可以看到在Device设置部分,有实时坐标显示和相对坐标显示俩个选项。
勾选实时坐标选项,可以实时在手机屏幕画面上显示出鼠标位置的坐标,方便大家获取绝对坐标。此时 点击鼠标右键,还可以自
动将当前坐标信息复制到剪贴板中,在代码里只需要直接粘贴即可插入点击位置的坐标。
在勾选了实时显示坐标的情况下,再勾选相对坐标选项,将会以(0, 0) 到 (1, 1) 为范围显示出相对坐标。使用相对坐标可以避
免跨分辨率的操作点超出屏幕的问题,使坐标操作兼容性更好。
Wait方法
作用:等待某个元素出现,如果出现则返回元素的中心坐标点,否则抛出异常(TargetNotFoundError)
主要解决问题:元素存在,但加载需要一定时间
应用:推荐与其他支持坐标点操作API一起使用
常用参数:
v:图片
timeout: 等待超时时间(默认20秒)
interval:每次匹配间隔的时间(默认0.5秒)
基础操作: 在菜单中找到“消息”tab则进行点击
实例:
扩展使用:在消息页,查找 会员订阅,0.1秒找一次,最多找5秒钟
实例:
swipe方法
作用:滑动 - 两个坐标点或两个元素之间滑动,从屏幕的一个位置滑动到屏幕的另一个位置
常用的参数:
v1:图片或者坐标(x,y)
v2:图片或者坐标(x,y),从v1滑到v2
vector:[x,y]录制时候自动生成,记录屏幕中滑动比例,向右为x轴正向,向下为y轴正向
提示:坐标点根据实际屏幕来定
注意:坐标点使用时,每组值需要使用小括号单独扩起来
基础操作:在me页面 coin -> 订阅图标
实例:
exists方法
作用:判断元素是否存在,如果存在返回图片中心点坐标,如果不存在返回 False;(根据图片是否存在选择分支,不存在不操
作)
常用参数:
v:传图片参数
text方法
作用:输入文本操作
常用参数:
text:要输入的文本(注:输入的位置为当前页面默认焦点元素一般配合touch一起使用)
enter:完整输入后执行Enter 操作,默认为true
keyevent方法
作用:模拟键盘输入支持键码,支持键码;如:3为home键
常用的参数:
keyname:固定键名或者键码
keyname |
value |
content |
KEYCODE_MENU |
82 |
菜单键 |
KEYCODE_HOME |
3 |
按键Home |
KEYCODE_BACK |
4 |
返回键 |
KEYCODE_VOLUME_UP |
24 |
音量增加键 |
KEYCODE_VOLUME_DOWN |
25 |
音量减小键 |
KEYCODE_ENTE |
66 |
回车键 |
KEYCODE_ESCAPE |
111 |
ESC键 |
KEYCODE_POWER |
26 |
电源键 |
KEYCODE_DEL |
67 |
退格键 |
KEYCODE_CALL |
5 |
拨号键 |
KEYCODE_ENDCALL |
6 |
挂机键 |
snapshot 方法
作用:截取当前屏幕图片,可以在测试报告中显示
常用参数:
Filename:保存截屏为指定的文件
msg:描述测试点,可以在HTML报告中呈现
sleep方法
作用: 暂停时间,强制等待
常用参数:
secs:延迟时间(s),默认是1.0秒
方法组合实例:
assert_exists方法
作用:断言页面存在元素
常用的参数:
v:图片(要判断页面是否存在元素)
msg:描述测试点
return:找到图片则返回图片中心点坐标,否则将返回(raise Assertion Error)
assert_not_exists方法
作用:断言(判断)页面不存在元素
常用参数:(和assert_exists)一样
v:图片(注:判断当前页面不存在图片元素,不存在通过,存在失败)
msg:描述测试点(测试报告中显示)
assert_equal方法
作用:判断第一个值与第二个值相等
常用参数:
first:第一个值
second:第二个值
msg:描述此断言语句对应的测试点内容
assert_not_equal方法
作用:判断第一个值与第二个值不相等
常用参数:和(assert_equal)一样
first:第一个值
second:第二个值
msg:描述此断言语句对应的测试点内容
方法组合实例:
什么是断言?
所谓的断言,就是让程序代替人工对程序执行结果检查的过程,这个过程会在报告中体现,这个就是区分于判断语句的本
质区别,因为判断语句不会在报告中体现,而断言会在报告中标示用例的成功与失败