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:描述此断言语句对应的测试点内容

方法组合实例:

什么是断言?

所谓的断言,就是让程序代替人工对程序执行结果检查的过程,这个过程会在报告中体现,这个就是区分于判断语句的本

质区别,因为判断语句不会在报告中体现,而断言会在报告中标示用例的成功与失败