UI自动化测试之Airtest
阅读原文时间:2021年10月27日阅读:1

官方文档:

https://airtest.doc.io.netease.com/

本文我们讲解下Airtest的使用,主要学习目标有以下几点:

(1)认识Airtest

(2)了解Airtest能做什么

(3)Airtest安装及环境搭建

(4)掌握Airtest图形化api使用

(5)Airtest实现APP电商自动化测试

(6)Airtest连接ios真机实现自动化测试

1、Airtest简介

Airtest由网易团队出品,是一个基于图像识别原理的跨平台UI自动化测试框架,适用于游戏和应用程序。

特点:

(1)跨平台:Airtest几乎可以在所有平台上执行游戏和APP自动化

(2)易操作:使用图像识别技术来定位UI元素,无需嵌入任何代码即可对游戏和应用进行自动化测试。

(3)可扩展性:通过使用Airtest提供的命令行和Python API接口,可以轻松地在大规模设备集群上运行脚本

(4)GUI工具:AirtestIDE是一个强大的GUI工具,可以帮助你录制和调试脚本。

扩展:Airtest的3种图像算法SURFMatching、TemplateMatching和BRISKMatching 深度对比。

参考博文:https://mp.weixin.qq.com/s/cGFvU9C7mBpsmnWgDLPW5A

(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

官网下载:https://airtest.netease.com/home/changelog.html

(4)解压

(5)启动

双击AirtestIDE.exe可执行程序即可。

(6)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地址和端口号如下:

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.

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轴正方向。

 

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键,返回桌面

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(搜索图标图片)的值是否相等

查看测试报告如下:

1、需求:

启动钉钉APP

实现登录、退出业务自动化,并断言是否登录成功、退出成功

2、拓展:

如何解决无法输入账号的问题:MUMU模拟器设置——>语言和输入法——>将输入法改为nemu-vinput

切换代码模式:在代码编辑区域,选中代码行,右键选择并点击“图片/代码模式切换”。

1、环境搭建需要

(1)硬件

一台苹果电脑(运行xcode)

一部iphone手机(运行APP)

(2)软件

iOS-Tagent(WebDriver服务器)

xcode(iOS集成开发工具,运行iOS-Tagent)

iproxy(代理工作,做端口映射)

AirtestIDE(图像识别自动化测试工具)

2、软件功能

(1)iOS-Tagent

作用:在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素。

下载:https://github.com/facebook/archive/WebDriverAgent

运行依赖: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到手机

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】)

案例总结:

1、API使用方法和安卓没有区别

2、真机速度快,输入用户名和密码时需要暂停一会

3、ISO和安卓区别在于环境搭建

1、Airtest接口功能介绍和示例总结

https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247485284&idx=1&sn=0d9852538ce0673127a2f1662ee58fe7&chksm=f97ce767ce0b6e715ff488d87743a45903bb080d2cebcb596ad4a1dc718b101f685d26bb2086&token=914082035&lang=zh_CN#rd

https://testerhome.com/articles/27089

2、Airtest提高截图脚本兼容性的经验总结

https://www.cnblogs.com/AirtestProject/p/13603105.html

https://testerhome.com/topics/20916

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章