UI自动化测试之Airtest让你的测试工作如虎添翼!

news2024/11/18 1:44:16

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

(1)认识Airtest

(2)了解Airtest能做什么

(3)Airtest安装及环境搭建

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

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

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

目录

Airtest简介及环境搭建

Airtest与安卓模拟器进行连接

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

Airtest图像API-wait

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

Airtest图像API-断言方法

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

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

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

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

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

(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元素。

下载: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到手机

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和安卓区别在于环境搭建

 


最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】记录的基本操作

文章目录 插入数据为表中所有字段插入数据为表中指定字段插入数据同时插入多条数据 更新数据删除数据TRUNCATE和DETELE的区别 查询数据 插入数据 为表中所有字段插入数据 基本语法 INSERT INTO 表名(字段名1,字段名2,…) VALUES (值 1,值 2,…); 示例 # 准备一张表…

算法模板(4):动态规划(4) 做题积累(2)

动态规划 9. 单调队列优化DP 1. 1088. 旅行问题 John 打算驾驶一辆汽车周游一个环形公路。 公路上总共有 n 个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。 John 必须从某个车站出发&#xff…

接口自动化-让你了解数据库相关知识

目录 python接口自动化实战 数据库 写一个对数据库操作的类 python接口自动化实战 目标 学习数据库相关,用例增加对数据库校验 利用数据库完成对数据查询 如何校验数据库数据,怎样添加校验让程序自己校验(充值、提现、投资接口对金额的…

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs)

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs) ESXi 7.0 U3m Standard (标准版) ESXi 7.0 U3m Dell (戴尔) 定制版 OEM Custom Installer CD ESXi 7.0 U3m HPE (慧与) 定制版 OEM Custom Installer CD ESXi 7.0 U3m Lenovo (联想) 定…

分布式项目17 订单order,用dubbo来实现

说明:只要当一个订单生成时,处理订单的信息之外,还有订单中包含的订单商品数据以及订单物流信息,而订单的信息封装在“tb_order”表中,关于tb_order表结构如下图所示: 订单商品数据封装在“tb_order_item”…

STM32使用PWM实现led亮度变化

原理及代码讲解 1.序言2.频率3.占空比4.控制led亮度变化原理5.代码实例5.1 初始化引脚5.2 配置定时器15.3配置输出PWM 6.结语 1.序言 这里我以stm32F103c8te为例,讲解一下pwm如何输出, pwm又是如何控制led灯的亮度变化,以及具体代码又是 如何…

53、基于51单片机蓄电池充电器过充过放保护LCD液晶屏显示系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&…

STL之Stack与queue的模拟实现与duque的底层结构(3千字长文详解)

STL之Stack与queue的模拟实现与duque的底层结构 文章目录 STL之Stack与queue的模拟实现与duque的底层结构设计模式的概念适配器模式 stack的实现queue的实现双端队列——dequedeque的底层结构 设计模式的概念 设计模式像是古代的兵法,是以前的人总结出来的一些在特定…

TClientDataSet 模拟 EXCEL表

日常处理数据时,经常需要,从EXCEL表格中,批量导入数据,通过 XLSReadWriteII编程,会很快导入。 但是,客户提供的EXCEL表的字段,数据格式,字段的排序,有很大的区别。因此&a…

PostmanScript脚本功能使用详解!

目录 前言: 一、Pre-requestScript 二、TestScript 三、随机参数: 前言: Postman 是一个强大的 API 工具,可以用于构建、测试和文档化 Web API。Postman 还提供了一个名为 PostmanScript 的功能,它可以用于自动化…

【5】Midjourney Prompt

Prompt 是Midjourney Bot解释以生成图像的简短文本短语。 Midjourney Bot将Prompt 中的单词和短语分解成为Token的较小部分,可以将其与训练数据进行比较,然后用于生成图像。 精心制作的 Prompt可以帮助生成独特且令人兴奋的图像。 Structure 结构 基本…

Spring Boot + Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二

接着上一次Spring Boot Vue3 前后端分离 实战 wiki 知识库系统<七>--分类管理功能开发的分类功能继续完善。 分类编辑功能优化: 概述: 现在分类编辑时的界面长这样: 很明显目前的父分类的展现形式不太人性&#xf…

【JVM】JVM常用指令

文章目录 1、jps2、jinfo3、jstat4、jstack5、jmap6、jhat 1、jps jps(java process status tool), 用于查看java进程及相关信息,如果你想找到一个java进程的pid,可以使用jps命令代替linux的ps命令。 命令格式&#…

ansible常见模块应用简介

目录 command, shell, raw模块file 模块copy 模块fetch 模块lineinfile模块unarchive解包解压缩 模块user 模块yum_repository 仓库管理yum/dnf模块Service/systemd模块firewalld 模块nmcli 模块get_url 模块mount模块 注意:该文档需要有 Linux 基础的看 command, s…

【架构基础】高内聚低耦合

软件设计目标:实现需求、易于重用、易于理解、没有冗余。 Dont reinvent the wheel, just realign it. --Anthony J D’ Angelo 高内聚低耦合,是软件工程中判断软件设计好坏的标准。主要评判模块或类的内聚性是否高,耦合度是否低。目的是使…

【图像处理】基于双目视觉的物体体积测量算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

TCP的安全和效率机制

目录 0.TCP协议格式 ​编辑 一.确认应答(安全机制) 二.超时重传(安全机制) 1.SYN丢包 2.ACK丢包 三.连接管理(安全机制) 1.三次握手建立连接 ​编辑 2.四次挥手断开连接 3.建立和断开连接 四.滑动窗口(效率机制) 五.流量控制(效率机制) 六.拥塞控制(安全机制) 七…

算法扩展第一次:收集雪花 【hash表,双指针,stl中的map】

算法详解 这道题需要新学的知识一个是双指针,一个是c库中的unordered_map容器 双指针 双指针原先我写过很多这方面的题,但是这道题我一开始是低估了它的难度,而且压根没有想到要用双指针,属于是长见识了,这道题的双…

Virtual box安装Ubuntu1804乱码

Virtual box安装Ubuntu1804乱码 1. 首先检查编码格式 运行以下命令打开locale配置文件: sudo nano /etc/default/locale2. 可能缺少字体,打开终端,先执行更新 sudo apt-get update 接着进入设置,搜索language,进入…

机器学习-搭建轻量级GPT2训练对话

在自己的机器上部署一个GPT简直太酷啦,因为模型数据缘故,所以这个机器人有时候傻傻的。。。 需要安装环境:python3.7 、Transformers4.2.0、pytorch1.7.0、nginx(映射网页文件) 我的系统:MAC m2 Mac默认是…