5分钟上手自动化测试——Airtest+Poco快速上手
版权声明:该文章为AirtestProject原创文章;允许转载,但转载必须注明“转载”并保留原链接
前言
本文档将演示使用`AirtestProject`专用的编辑器AirtestIDE,编写`Airtest`+`Poco`自动化脚本的全流程。强烈建议新手从本文档开始阅读,并使用`AirtestIDE`上手脚本编写。
简介
`AirtestIDE` 是一个跨平台的UI自动化测试编辑器,适用于游戏和App。
- 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程
- 支持基于图像识别的Airtest框架,适用于所有Android/iOS/Windows应用
- 支持基于UI控件搜索的Poco框架,适用于Unity3d,Cocos2d与Android/iOS App等多种平台
- 能够运行在Windows和MacOS上
访问官网通过视频查看更多特性。
![Image of IDE Overview](http://airtest.netease.com/tutorial/Overview.png)
通过本教程,你将学会如何上手自动化测试(或者写点脚本来自动玩游戏)。相信我,这个过程会非常愉快~
安装
目前AirtestIDE提供了Windows和Mac两个版本的客户端,请从官网下载,解压即用。
连接设备
AirtestIDE目前支持测试`Android`/`Windows`/`iOS`上的应用,其他更多平台的支持正在开发中。
无论是`Android`/`iOS`手机,还是`Windows`窗口,在`Airtest`中都将它视为一个设备,接下来我们将演示如何连接一个设备。
连接Android手机
通过ADB连接你的电脑和Android手机,即可开始调试Android应用。ADB是Google官方提供的Android调试工具。AirtestIDE依赖ADB与安卓设备进行通信。
打开AirtestIDE,按照以下步骤进行连接:
- 打开手机`设置-开发者选项-USB调试`开关,参考安卓官方文档
- 在AirtestIDE设备面板中点击`refresh ADB`按钮,查看连接上的设备
- 如果没有显示出设备,试试`restart ADB`,如果还不行,参考FAQ文档进行问题排查
- 能够成功看到设备后,点击对应设备的`Connect`按钮,进行初始化
手机连接成功后,即可在AirtestIDE中看到手机屏幕的镜像显示,并进行实时操作。
如果手机连接失败,请先参考FAQ文档进行问题排查。若依然不成功,请将手机型号和AirtestIDE后台报错提交到Github Issue,开发人员会尽快修复。由于Android手机的碎片化问题严重,我们非常感谢您的反馈可以帮助这个项目做的更好。
连接Windows窗口
对于Windows桌面程序的测试,AirtestIDE可以将被测窗口嵌入,方便脚本录制和调试。
- 在AirtestIDE设备面板中点击`Windows-框选游戏窗口`按钮
- 将鼠标移动到被测程序的窗口上,会显示绿色边框,将对应的窗口框出
- 点击左键即可将对应的窗口嵌入到AirtestIDE中
如果上述方法不能正确找到被测程序的窗口,你还可以使用备用嵌入方法。
连接iOS手机
要连接一台iOS手机,你需要先准备好一台安装了Xcode的Mac电脑,连接方法参考文档。
录制自动化脚本
在连上设备后,我们可以开始录制自动化测试脚本了,在接下来的内容中,我们将会使用一台Android设备上的一款Unity游戏应用,给大家演示如何录制脚本。
模拟输入
让我们先从最常用的模拟点击开始吧,模拟点击的意思就是,模仿你的操作去点击设备上的某个指定位置。
基于图像识别
目前我们支持通过图像识别的方式,找到你想要点击的位置并进行操作,这是基于Airtest这个框架实现的。
我们可以先看看如何自动录制脚本:点击AirtestIDE左侧的Airtest辅助窗上的`录制`按钮,然后随着你在设备窗口上操作手机,代码会自动生成在代码窗口中。
马上来验证一下,点击`运行`按钮运行你的第一个自动化脚本吧!
如果你觉得自动录制生成的图标不够精确,还可以点击Airtest辅助窗上的`touch`按钮,然后在设备窗口上框选精确的图标,也可以自动生成一条`touch`语句。
类似的模拟输入操作还有滑动:点击`swipe`按钮,在设备窗口上框选精确的图标作为滑动起点,然后点击滑动终点位置,即会自动生成一个`swipe`语句。
其他模拟输入的API包括:
- text: 文字输入
- keyevent: 按键输入,包括(HOME/BACK/MENU等)
- sleep: 等待
- snapshot: 截屏
基于UI控件
如果你发现图像识别不够精确,还可以使用基于UI控件搜索的方式进行自动化测试,与刚才的`Airtest`不同,这是Poco这个框架实现的功能。
目前`Poco`直接支持Unity3d、Cocos2d、白鹭引擎等多种游戏引擎,以及Android/iOS原生App。
如果是Android/iOS原生应用,是即插即用的,无需接入SDK。但由于游戏引擎使用OpenGL等图形接口直接渲染,而没有使用Android原生的UI系统,我们需要与游戏的Runtime进行通信获取整个UI结构。
我们提供了非常方便的SDK接入方法,点这里查阅目前支持的平台列表,以及如何为你的项目接入Poco。
如果你的项目使用的引擎或平台不在文档中,我们同样支持自行扩展SDK。
> 实际上在网易游戏内部,我们就是用这种方式支持了Messiah/NeoX/梦幻等多个自研引擎。
接入完成后我们即可开始。手机启动游戏,在AirtestIDE中的Poco辅助窗切换模式至对应引擎类型,即可看到整个UI结构。
点击录制按钮,然后随着你的鼠标操作,会自动生成Poco语句到脚本编辑框中。
同样,你也可以通过UI树形结构更精确的检视UI控件,双击节点自动生成Poco语句,或者自行选择更好的写法。
自动录制出的语句不一定能够适应所有场景,采用更合理的选择器编写代码,通常会增强整个自动化脚本的健壮性和可读性,这是门学问。
录制完脚本后记得运行试试效果。
对于Android/iOS的原生应用来说,不需要接入SDK即可使用,例如在连上Android手机后,将Poco辅助窗的模式切换至`Android`,能可以看到整个UI树形结构。
框架信息
上述两种UI识别方式,分别是基于两个框架:
- 基于图像识别的[Airtest](https://github.com/AirtestProject/Airtest)框架
- 基于UI控件搜索的[Poco](https://github.com/AirtestProject/Poco)框架
这两个框架都是由我们团队开发的Python第三方库,在实际项目使用经验中,我们发现两者互相配合会得到最好的效果。在脚本编写的过程中,我们往往也需要查阅它们的项目API文档。
使用Python语法
整个AirtestIDE中录制和运行的代码都是基于`Python`语言。Python语法简洁而强大,第三库和工具也非常多。
对于新手,Python上手非常容易,学会基本语法即可写出自动化脚本中所需的逻辑语句。
touch("开卡包.png")
if exists("奖励面板.png"):
for i in range(5):
Poco("奖励-%s" % i).click()
对于老手,你可以在AirtestIDE中使用各种第三方库来使你的自动化脚本更加强大,通过添加PYTHONPATH设置,可以使用本地的`python.exe`来运行你的脚本。
除了辅助窗口里面提供的语句,更多的API文档,可以查看Airtest和Poco的仓库。
断言
到这里,我们已经有各种模拟输入方法,配合逻辑控制语句让手机动起来。自动化测试中还有很重要的一个步骤:结果验证,那么我们来看看怎样声明断言。
验证UI界面
录制方法与模拟输入类似
- `assert_exists`:断言图片存在
- `assert_not_exists`:断言图片不存在
验证数值
通过Poco获取属性值,手写代码进行断言
- `assert_equal`:断言相等
- `assert_not_equal`:断言不等
例如
# ... 模拟输入并获得20分之后 value = Poco("分数按钮").attr("num")
assert_equal(value, 20, "获到20分")
查看测试报告
脚本运行完毕后,点击`查看报告`按钮(快捷键Ctrl+L),会使用默认浏览器打开结果报告页面。报告中将展示出每一个步骤的内容和实际执行过程的截图、运行结果,方便查看步骤是否执行成功。
命令行接口
现在,你已经学会自动化测试了。接下来呢,你可以使用命令行接口将自动化测试与持续集成结合起来。持续集成是什么?
在AirtestIDE运行脚本时,LOG窗口中会打印运行命令。
你可以在不开启IDE的情况下,在命令行中使用那条命令来启动测试脚本,例如:
"D:\迅雷下载\AirtestIDE\AirtestIDE" runner "D:\AirtestIDE_2018-01-24_83\untitled.air" --device Android://127.0.0.1:5037/F8UDU16409004135 --log "C:\Users\gzliuxin\AppData\Local\Temp\AirtestIDE\scripts\cdfc40e8c297b6ad88e09de64d8bafa3"
使用AirtestIDE你可以轻松的录制出测试脚本,保存为`.air`脚本。请注意一个`.air`脚本中不要包含太多内容,用良好的脚本命名和目录结构来组织你的脚本,覆盖所有测试点。
你还可以在不同电脑上针对不同设备运行测试, 这时候你就需要用命令行运行 .air 脚本 。 对于多平台发布的产品,灵活使用跨平台API和命令行,还可以让同一套测试脚本运行在Android和Windows上进行测试。
在网易游戏内部,我们的大型游戏通常会有数百个测试脚本,覆盖常用的玩法测试。每周,这数百个脚本会分别运行在200台手机上进行兼容性测试。
5分钟上手自动化测试——Airtest+Poco快速上手的更多相关文章
- Airtest 快速上手教程
一.Airtest 简介: AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App. 自动化脚本录制.一键回放.报告查看,轻而易举实现自动化测试流程 支持基于图像识别的 Airt ...
- 学习Git---20分钟git快速上手
学习Git-----20分钟git快速上手 在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是 ...
- 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速
前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...
- 三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署
本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 前文:三分钟快速上手TensorFlow 2.0 (上)——前置基础.模型建立与可视化 tf.train. ...
- 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化
本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...
- 十分钟快速上手NutUI
本文将会从 NutUI 初学者的使用入手,对 NutUI 做了一个快速的概述,希望能帮助新人在项目中快速上手. 文章包括以下主要内容 安装引入 NutUI NutUI 组件的使用 NutUI 主题和样 ...
- 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板
简介 宝塔Linux面板是提升运维效率的服务器管理软件,其支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能.今天带大家一起学习的内容为一分钟快速上手搭建 ...
- 快速上手seajs——简单易用Seajs
快速上手seajs——简单易用Seajs 原文 http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...
- 【图文详解】scrapy安装与真的快速上手——爬取豆瓣9分榜单
写在开头 现在scrapy的安装教程都明显过时了,随便一搜都是要你安装一大堆的依赖,什么装python(如果别人连python都没装,为什么要学scrapy….)wisted, zope interf ...
随机推荐
- Oracle大规模数据快速导出文本文件
哈喽,前几久,和大家分享过如何把文本数据快速导入数据库(点击即可打开),今天再和大家分享一个小技能,将Oracle数据库中的数据按照指定分割符.指定字段导出至文本文件.首先来张图,看看导出的数据是什么 ...
- 就因为加了Lombok的@Accessors(chain = true),bean拷贝工具类不干活了
前言 这次新建了一个工程,因为 Lombok 用得很习惯,但以前的话,一般只用了@Data,@AllArgsConstructor,@EqualsAndHashCode等常规注解:那这个Accesso ...
- Codeforces 游记
早就对这个比赛平台有所耳闻(事实上,之前打过一场div2惨的一批……)今天去打了一场div3. 首先还是吐槽一下这个毛子时区的比赛时间,从十点三十五到零点三十五……这种时间要不是在家根本没法打嘛…… ...
- mysql 5.6.44 zip 安装教程(基于windows )
首先我们从官网下载最新版本的mysql 5.6.44版本,网页地址: ,我的电脑是64位的版本,所以我选择的是64位版本,如果是32位,根据实际情况下载所需要的安装包.
- 【暂时停更】Gungame更新下载平台
v1.0: 这是本游戏的第一个版本, 制作于2019.4.12. 控制 : Player1: wsad为移动, r键开炮(有朝向限制) Player2: ikjl为移动, p键开炮(有朝向限制) 下载 ...
- nginx篇最初级用法之lnmp环境搭建
这里m使用mariadb 需要下列软件列表: nginx mariadb 数据库客户端软件 mariadb-server 数据库服务器软件 mariadb-devel 其他客户端软件的依 ...
- Helm 3 发布 | 云原生生态周报 Vol. 27
作者 | 墨封.元毅.冬岛.敖小剑.衷源 业界要闻 1.Helm 3 发布 美国时间 11 月 13 日,Helm 团队发布 Helm 3 第一个稳定版本.Helm 3 以 Helm 2 的核心特性为 ...
- IPv6笔记-地址结构与分类
1.地址基础 IPv6地址由被划分为8个16位块的128位组成. 然后将每个块转换为由冒号符号分隔的4位十六进制数字. 2001::3238:00E1:0063:0000:0000:FEFB 每一块多 ...
- oracle直接调用web services
oracle调用C#开发web services 1, 去oracle官网上下载dbws-callout-utility-10131.zip 地址:https://oracle-base.com/a ...
- 平滑启动shell脚本
# 平滑关闭和启动 Spring Boot 程序#设置端口SERVER_PORT="8090"#当前时间time=`date +%Y-%m-%d`#设置应用名称JAR_NAME=& ...