一篇文章带你快速上手Airtest和Poco
前言
本文档将演示使用AirtestProject
专用的编辑器AirtestIDE,编写Airtest
+Poco
自动化脚本的全流程。强烈建议新手从本文档开始阅读,并使用AirtestIDE
上手脚本编写。
简介
AirtestIDE
是一个跨平台的UI自动化测试编辑器,适用于游戏和App。
- 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程
- 支持基于图像识别的Airtest框架,适用于所有Android/iOS/Windows应用
- 支持基于UI控件搜索的Poco框架,适用于Unity3d,Cocos2d与Android/iOS App等多种平台
- 能够运行在Windows和MacOS上
访问官网通过视频查看更多特性。
通过本教程,你将学会如何上手自动化测试(或者写点脚本来自动玩游戏)。相信我,这个过程会非常愉快~
安装
目前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框架
- 基于UI控件搜索的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台手机上进行兼容性测试。
想获取更多教程文章,欢迎关注我们的官方公众号AirtestProject,查看往期精彩教程:
一篇文章带你快速上手Airtest和Poco相关推荐
- 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!
受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话:"八小时内谋生活,八小时外谋发展. ...
- 一篇文章带你快速入门JavaScript(自学者福利)
文章目录 一.开始之前 二.数据类型 1.变量 2.数字类型(number) 3.字符串类型(string) 4.布尔型.Null和Undefined 5.数据类型转换 三.运算符 四.控制语句 五. ...
- 一篇文章带你快速弄清楚什么是终端
Linux的使用者可能每天都会接触到 Bash.Shell.控制台.终端.它们之间有什么不同吗?本文为你快速解释这些概念以及它们的区别. 什么是终端 首先我们来弄清楚什么是终端(terminal).按 ...
- 两个相邻盒子的边框怎么只显示一个_一篇文章带你快速理解盒子模型「经典案例」...
今天带大家快速理解盒子模型,直接上代码: css盒子 我的css盒子测试模型 上面代码没有任何难度,只是写了一个div标签,大家已经知道,div标签是块级元素,所以会占满一行: 但是我们也注意到了图片 ...
- 【Golang】一篇文章带你快速了解Go语言为什么你要学习Go语言
目录 1. 为什么互联网世界需要Go语言 1.1 硬件限制:摩尔定律已然失效 1.2 Go语言为并发而生 1.3 Go性能强悍 1.4 Go语言简单易学 1.4.1 语法简洁 1.4.2 代码风格统一 ...
- 一篇文章带你快速理解微服务架构,由浅入深带你走进微服务架构的核心
戳蓝字"CSDN云计算"关注我们哦! 文章来自:Java和Android架构 什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应 ...
- 一篇文章带你快速了解荧光蛋白
好看的各种荧光蛋白 荧光蛋白是分子生物学研究中的重要工具,在实验室中,一个普通的本科生经过科研训练就可以表达发出漂亮荧光的蛋白.尽管科学家们一直对荧光蛋白进行改造来开发出更多的生物学工具,但仍然面临着 ...
- 六大维度层层剖析,一篇文章带你快速读懂信息无障碍
我的同事和朋友有一部分是视障人士--盲人或者低视力. 这类群体,据中国盲人协会最新统计在中国有1700多万,加上病变.意外.功能性退化,视障人群比例大约是100比1,这个比例其实很高. 我的这些朋友习 ...
- 一篇文章带你快速入门 AdminLTE
文章目录 一.相关概述 二.如何使用 三.示例 一.相关概述 AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具, 它提供了一系列响应的.可重复使用的组件, 并内置了 ...
最新文章
- Ubuntu Server 命令行下的默认语言 中文乱码
- ystep jQuery流程、步骤插件
- 电子科技大学计算机考研题,电子科技大学计算机科学与技术考研820历年真题
- python数据挖掘入门与实战代码
- apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据
- B端产品经理,应从哪些方面理解业务?
- (转)python 搭建libsvm方法。python版本和libsvm版本匹配很重要!
- 设计模式笔记十三:代理模式
- 7.4 流水线的冒险
- 使用四元数解决万向节锁(Gimbal Lock)问题
- 腾讯云开发者实验室是什么?如何学习其中的153个实验案例?
- acer台式电脑怎么重装系统_宏基台式电脑怎么重装系统
- 徐思201771010132《面向对象程序设计(Java)》第十二周学习总结
- USB CCID理解
- 知识产权代理行业公司竞争分析
- 隐私政策-第三方SDK汇总
- 关于使用datagrip连接postgresql不显示数据库问题解决
- 1758:二叉树——结点关系
- 邮储银行聘任刘建军为行长;天弘基金董事长胡晓明离任 | 高管变动2021年5月31日-6月6日...
- 数据结构(C语言第2版) 课后习题答案之第四章 串、数组和广义表