UI自动化测试之Airtest

官方文档:
本文我们讲解下Airtest的使用,主要学习目标有以下几点:
(1)认识Airtest
(2)了解Airtest能做什么
(3)Airtest安装及环境搭建
(4)掌握Airtest图形化api使用
(5)Airtest实现APP电商自动化测试
(6)Airtest连接ios真机实现自动化测试

Airtest简介及环境搭建

1、Airtest简介
Airtest由网易团队出品,是一个基于图像识别原理的跨平台UI自动化测试框架,适用于游戏和应用程序。
特点:
(1)跨平台:Airtest几乎可以在所有平台上执行游戏和APP自动化
(2)易操作:使用图像识别技术来定位UI元素,无需嵌入任何代码即可对游戏和应用进行自动化测试。
(3)可扩展性:通过使用Airtest提供的命令行和Python API接口,可以轻松地在大规模设备集群上运行脚本
(4)GUI工具:AirtestIDE是一个强大的GUI工具,可以帮助你录制和调试脚本。
 
扩展:Airtest的3种图像算法SURFMatching、TemplateMatching和BRISKMatching 深度对比。
(1)模板匹配 TemplateMatching
  • 优点是速度很快,缺点是无法跨分辨率识别
  • 一定有相对最佳的匹配结果
  • 方法名:"tpl"
(2)特征点匹配
  • 跨分辨率识别
  • 不一定有匹配结果
  • 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
特征点匹配算法的性能对比结论:
内存占用:kaze > sift > akaze > surf > brief > brisk > orb
CPU占用:kaze > surf > akaze > brisk > sift > brief > orb
运行时长:kaze > sift > akaze > surf > brisk > brief > orb
识别效果:sift > surf > kaze > akaze > brisk > brief > orb
 
2、Airtest能做什么
Airtest支持:Game、Windows应用、Andriod应用、iOS应用、web应用的自动化测试。
特点:
Game:借助图像识别和UI层次结构,支持所有游戏引擎和应用,多平台,使用方便。
Android:Android源生应用测试的测试过程中, Air test可以发挥至关重要的作用, 即插即用。
Wino dws:支持Windows应用, 一次编写, 跨平台运行。
iOS:Airtest支持对iOS进行方便快捷的测试,可以通过Poco库来快捷获取iOS设备页面中的原生元素的位置和信息。
Web:基于Chrome Devtools Protocol协议,自动录制生成selenium脚本, 精确定位与操作界面元素。
 
Airtest优点:
1)框架基于图像识别,UI和控件识别,操作简单,功能简洁。
2)对代码能力要求不高,容易上手。结合工具本身的脚本录制功能,开发脚本速度快,适合版本快速迭代的要求。
3)可引入Python第三方库,支持Python进行个性化脚本编程。
4)可一键生成测试报告,报告美观,清晰明了。
Airtest缺点:
1)最大的缺点是图像、控件定位不够准确,如果不同设备的尺寸、分辨率不同,或者图像的背景色变化,控件图案修改的话。
2) 因为是基于图像识别的框架,所以代码执行速度慢,容易造成图像识别不到。
总结:优点大于缺点,且图像识别准确度的问题有很多办法可以改善、提高。
 
3、Airtest库
Airtest有图像识别、Poco、selenium三大类库。
 
4、Airtest环境搭建
(1)Python
输入cmd打开命令行窗口,执行命令:pip install -U airtest
说明:安装Python的Airtest库,通过Python代码直接调用Airtest库的API方法。
提示:此方法需要有一定的Python基础。AirtestIDE内置了Python3.6.5,亲测Python3.6.5版本可以安装airtest。
(2)GUI工具
工具:AirtestIDE
说明:AirtestIDE工具自带Python环境,下载解压即可使用,免安装。
提示:使用工具可以录制操作,也可以手动编写调用API。
本次视频教程学习GUI工具。
(3)下载AirtestIDE
(4)解压
(5)启动
双击AirtestIDE.exe可执行程序即可。
(6)Airtest页面布局
 

Airtest与安卓模拟器进行连接

常用的安卓模拟器:网易的MUMU、夜神、雷电等。我们这里使用网易MUMU,直接下载安装到C:\Program Files\MuMu
1、准备工作
(1)打开开发者模式
一般安卓手机:进入设置—>系统(或关于手机)—>找到版本号,多点击几次,就可以开启开发者模式。
小康设备:首页下拉进入导航栏—>时间连续点击5次—>点击原生设置—>系统—>关于AIV—>版本号连续点击7次
说明:如果设备已经打开开发者模式,点击版本号会提示:您正处于开发者模式。
(2)打开USB调试模式
先打开开发者模式,进入开发人员选项,可开启USB调试。
注意:一定要选择USB配置:MIDI(打开文件传输)!!!
(3)连接设置
a.启动安卓模拟器
b.在Airtest窗口点击【刷新ADB】或【远程设备连接】
c.使用备用连接参数,设置兼容模式
AirtestIDE提供了3个备用的连接参数: Use javacap 、Use ADB orientation 和 Use ADB touch
① 第一个 Use javacap ,是给部分无法正常看到手机画面、minicap初始化失败 的手机或设备用的,所以模拟器看到黑屏、部分特殊的平板等设备可以考虑勾选这个选项。
② 第二个 Use ADB orientation 是 屏幕旋转 的,如果在安卓手机屏幕旋转方向检测有问题、或者是部分特殊的平板无法显示正确的屏幕方向时可以勾选。
③ 第三个 Use ADB touch 是 发送adb指令来点击屏幕 ,效果很差,速度也很慢,不建议勾选,只有在部分无法点击屏幕的特殊安卓设备上才需要使用(例如智能后视镜、特殊型号的平板等设备上) 正常情况下,手机都可以点击,如果无法被点击(比如小米设备),一般都是因为手机设置有选项漏了打开,特别是小米设备要注意 开启允许模拟点击 的设置。
 
(4)修改设备地址及端口号(因为真机或模拟器都分不同的厂商)
Airtest远程连接,默认展示的是网易MUMU的端口号。如果使用其他厂商的模拟器,需要修改端口号。
常用模拟器的默认IP地址和端口号如下:

Airtest图像库(Touch、脚本运行、测试报告)

1、学习目标
掌握touch方法应用
掌握脚本运行
掌握测试报告查看
理解图像识别扩展(位置、匹配度)
 
2、Airtest图像框架API查看参数信息
方法:将光标悬停到左侧栏API上,气泡显示调用该方法所需要传入的参数。
 
3、Touch方法
作用:触摸/点击动作
常用参数:
v : 点击对象的图像或坐标
times: 点击次数,默认是1
duration: 点击时间,默认是0.01秒
 
(1)需求:
使用Touch方法,点击启动小康桌面应用(电视家)
运行脚本测试是否成功
 
(2)需求实现步骤:
a、新建脚本类型选择
.air Airtest项目:生成一个【项目名称.air】的目录,目录下有一个【项目名.py】的文件
.py 纯Python(高级用户):生成一个纯Python的【项目名.py】的文件
 
两者区别和联系:
相同点:都是Python文件
不同点:脚本文件的初始化代码不用,一个无法看到默认值,另一个可以看到默认值并可以修改。
提示:Airtest自带Python解释器及标准库,无需单独安装Python。
 
b、使用Touch点击小康桌面应用(电视家)
左侧点击Touch
右侧拉选电视家icon图标
 
c、运行脚本
点击三角形的【运行】按钮,或者使用快捷键F5
停止运行:Shift + F5
运行单行代码:选中代码行,右键,选中并单击“只运行选中代码”
 
d、查看报告
方法1:点击菜单栏【运行】——>打开报告目录
方法2:右键脚本文件名称Tab——>打开报告文件目录
方法3:使用快捷键:Ctrl + L
方法4:cmd打开命令行窗口,进入脚本所在路径,执行如下命名:
airtest report D:\zxt\AirtestIDE\xiaokang.air\xiaokang2_auto_script.py --log_root D:\zxt\AirtestIDE\xiaokang.air\log --outfile D:\zxt\AirtestIDE\xiaokang.air\log\xiaokang2_auto_script.log\log.html --static_root D:\zxt\AirtestIDE\airtest\report --lang zh --export D:/zxt/AirtestIDE/xiaokang.air/log
方法5:右键脚本文件名称Tab——>导出报告
这种方法,可以将相对路径的图片资源和静态资源整个打包,后续发送给其他查看。
方法6:
# generate html report
from airtest.report.report import simple_report
simple_report(__file__,logpath=True,output='D:\zxt\AirtestIDE\xiaokang.air\report\log.html')
 
4、图像识别扩展
在脚本编辑区域,双击图片,展示Image Editor弹框,如下:
filename: 图片文件名称,自动生成
threshold: 阈值或临界值,只有达到设置的阈值,图像识别才能成功。
target pos: 击位的目标点置,默认是位置5。图片的目标位置一共分上、中、下9点位,正中间区域是位置5.

Airtest图像API-wait

wait()方法
作用:在等待界面元素出现,默认0.5s找一次,最多找20s。如果找到则返回返回图片中心点坐标;否则,raise TargetNotFoundError
常用参数:
v:图片
timeout:等待超时时间,默认是20s
interval:每次匹配的时间间隔
 
需求:进入小康首页,等待“娱乐”icon出现,0.1s查找一次,持续3s,如果找到,点击“娱乐”icon。
小结:
(1)wait方法解决什么问题?
解决界面元素存在,但加载需要时间的问题。
 
第6课、Airtest图像API-swipe
swipe方法基本使用:
作用:从屏幕一个位置滑动到另一个位置
常用参数:
v1: 图片 或 坐标(x,y)
v2: 图片 或 坐标(x,y),从v1滑动到v2
vector: [x,y]录制时自动生成,记录了屏幕中的滑动比例,向右为x轴正方向,向下为y轴正方向。
 

Airtest图像API(text、snapshot、sleep、keyevent)

1、text方法
作用:输入文本操作
常用参数:
text: 要输入的文本
(注:输入的位置为当前页面光标焦点所在的位置,一般与touch方法一起使用)
enter: 完成输入后自动执行Enter操作,默认为True
 
2、keyevent方法
作用:模拟键盘按钮输入,支持键码,如3为home键
常用参数:
keyname: 固定键名或键码,参考:https://www.cnblogs.com/vip136510786/p/14705567.html
 
3、snapshot方法
作用:截取当前屏幕图片,可以在测试报告中显示。
常用参数:
filename: 保存截屏为指定文件。
msg: 描述测试点,可在html报告中呈现。
 
4、sleep方法
作用:暂停时间
常用参数:
secs: 暂停时间,单位秒,默认1.0s
示例需求:
启动百年奥莱app
点击搜索输入框
输入:耳机
完成屏幕截图
暂停3秒
按home键,返回桌面

Airtest图像API-断言方法

1、assert_exists方法
作用:断言页面存在某元素,结果是布尔类型值
常用参数:
v: 图片
msg:描述测试点
return:找到图片,则返回图片中心点坐标;否则,将raise AssertionError
 
2、assert_not_exists方法
作用:断言页面不存在某元素,结果是布尔类型值
常用参数:
v: 图片(注:判断当前页面中不存在指定图片,不存在则通过,存在则不通过)
msg:描述测试点
 
3、assert_equal方法
作用:判断第一个值和第二个值相等
常用参数:
first:第一个值
second:第二个值
msg:描述此断言语句对应的测试点内容。
 
4、assert_not_equal方法
作用:判断第一个值和第二个值不相等
常用参数:
first:第一个值
second:第二个值
msg:描述此断言语句对应的测试点内容。
 
需求:
启动百年奥莱APP
判断首页是否存在搜索图标
点击底部【分类】TabBar
断言不存在搜索图标
断言False与assert_exists(搜索图标图片)的值是否相等
查看测试报告如下:

Airtest图像框架实战(app登录、退出)

1、需求:
启动钉钉APP
实现登录、退出业务自动化,并断言是否登录成功、退出成功
2、拓展:
如何解决无法输入账号的问题:MUMU模拟器设置——>语言和输入法——>将输入法改为nemu-vinput
 
切换代码模式:在代码编辑区域,选中代码行,右键选择并点击“图片/代码模式切换”。

Airtest-实战iOS真机(环境搭建)

1、环境搭建需要
(1)硬件
一台苹果电脑(运行xcode)
一部iphone手机(运行APP)
(2)软件
iOS-Tagent(WebDriver服务器)
xcode(iOS集成开发工具,运行iOS-Tagent)
iproxy(代理工作,做端口映射)
AirtestIDE(图像识别自动化测试工具)
 
2、软件功能
(1)iOS-Tagent
作用:在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素。
运行依赖:xcode
 
(2)xcode
作用:iOS集成开发工具,主要作用为运行WebDriverAgent文件到手机中
下载:appStore搜索xcode
运行依赖:开发者账号
 
xcode设置:
前提:将真机使用数据线连接上mac电脑
测试运行WebDriverAgentRunner到手机
如果失败,排查思路:
①在xcode中点击Test后,第一次将WebdriverRunner时,手机需要信任该项目(设置->通用->
设备管理)
②在手机中启用UI自动化(设置->开发者->EnableUIAutomation)
③如果有其他异常,根据异常提示信息自行参考百度或访问
https://github.com/appium/appium/blob/master/docs/en/drivers/ios-xcuitest-real-devices.md
查阅相关解决方案
 
xcode需要的操作:
a.添加开发者账号,普通apple ID即可
b.配置WebDriverAgent(Team、Product Bundle Identifier)
c.测试运行WebDriverAgentRunner到手机

Airtest-实战iOS真机(连接设备)

1、连接真机注意事项
(1)在xcode中点击Test前, 检查项目默认终端是否选择真机设备。
(2)点击在xcode中Test之后, 要查看控制信息, 如果控制台没任何信息输出,可以等待或者多Test几次, 直到控制台输出启动相关信息
(3)xcode配置iOS-T agent只需第一次配置,之后使用无需在单独配置, 切莫乱修改参数;
(4)真机设备中, 要开启自动化测试和信任iOS-T agent项目
 
2、连接真机步骤
(1)将真机使用数据线连接电脑
(2)启动xcode并打开配置好的iOS-T agent项目(菜单-Product->Test启动自动化服务程序)
(3)打开终端运行:i proxy 81008100(启动端口映射服务程序)
(4)启动Air Test IDE工具(选择【连接ios设备】->点击【connect】)

Airtest-实战iOS真机(钉钉登录、退出)

案例总结:
1、API使用方法和安卓没有区别
2、真机速度快,输入用户名和密码时需要暂停一会
3、ISO和安卓区别在于环境搭建

其他参考博文

1、Airtest接口功能介绍和示例总结
 
 
2、Airtest提高截图脚本兼容性的经验总结
 
 
 
 

posted @ 2021-10-26 17:36  淘气的包子  阅读(1515)  评论(0编辑  收藏  举报