Airtest [持续更新] Airtest 官方教程--5 分钟上手自动化测试 (Airtest+Poco 快速上手)

fishfish-yu · 2019年09月27日 · 最后由 fishfish-yu 回复于 2019年09月30日 · 8277 次阅读

注:我们的 Airtest 官方公众号(AirtestProject)已经持续更新了大部分的课程内容,欢迎有需要的同学关注并查看我们更多的课程内容。

原文地址:https://airtest.doc.io.netease.com/tutorial/1_5Airtest+Poco 快速上手/分钟上手自动化测试——

前言

本文档将演示使用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

通过本教程,你将学会如何上手自动化测试(或者写点脚本来自动玩游戏)。相信我,这个过程会非常愉快~

安装

目前 AirtestIDE 提供了 Windows 和 Mac 两个版本的客户端,请从官网下载,解压即用。

连接设备

AirtestIDE 目前支持测试Android/Windows/iOS上的应用,其他更多平台的支持正在开发中。

无论是Android/iOS手机,还是Windows窗口,在Airtest中都将它视为一个设备,接下来我们将演示如何连接一个设备

连接 Android 手机

通过 ADB 连接你的电脑和 Android 手机,即可开始调试 Android 应用。ADB是 Google 官方提供的 Android 调试工具。AirtestIDE 依赖 ADB 与安卓设备进行通信。

打开 AirtestIDE,按照以下步骤进行连接:

  1. 打开手机设置-开发者选项-USB调试开关,参考安卓官方文档
  2. 在 AirtestIDE 设备面板中点击refresh ADB按钮,查看连接上的设备
  3. 如果没有显示出设备,试试restart ADB,如果还不行,参考FAQ文档进行问题排查
  4. 能够成功看到设备后,点击对应设备的Connect按钮,进行初始化

连接安卓手机

手机连接成功后,即可在 AirtestIDE 中看到手机屏幕的镜像显示,并进行实时操作。

如果手机连接失败,请先参考FAQ文档进行问题排查。若依然不成功,请将手机型号和 AirtestIDE 后台报错提交到Github Issue,开发人员会尽快修复。由于 Android 手机的碎片化问题严重,我们非常感谢您的反馈可以帮助这个项目做的更好。

连接 Windows 窗口

对于 Windows 桌面程序的测试,AirtestIDE 可以将被测窗口嵌入,方便脚本录制和调试。

  • 在 AirtestIDE 设备面板中点击Windows-框选游戏窗口按钮
  • 将鼠标移动到被测程序的窗口上,会显示绿色边框,将对应的窗口框出
  • 点击左键即可将对应的窗口嵌入到 AirtestIDE 中

连接Windows窗口

如果上述方法不能正确找到被测程序的窗口,你还可以使用备用嵌入方法

连接 iOS 手机

要连接一台 iOS 手机,你需要先准备好一台安装了 Xcode 的 Mac 电脑,连接方法参考文档

录制自动化脚本

在连上设备后,我们可以开始录制自动化测试脚本了,在接下来的内容中,我们将会使用一台 Android 设备上的一款 Unity 游戏应用,给大家演示如何录制脚本。

模拟输入

让我们先从最常用的模拟点击开始吧,模拟点击的意思就是,模仿你的操作去点击设备上的某个指定位置。

基于图像识别

目前我们支持通过图像识别的方式,找到你想要点击的位置并进行操作,这是基于Airtest这个框架实现的。

我们可以先看看如何自动录制脚本:点击 AirtestIDE 左侧的 Airtest 辅助窗上的录制按钮,然后随着你在设备窗口上操作手机,代码会自动生成在代码窗口中。

录制GIF

马上来验证一下,点击运行按钮运行你的第一个自动化脚本吧!

如果你觉得自动录制生成的图标不够精确,还可以点击 Airtest 辅助窗上的touch按钮,然后在设备窗口上框选精确的图标,也可以自动生成一条touch语句。

框选录制GIF

类似的模拟输入操作还有滑动:点击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模式.GIF

点击录制按钮,然后随着你的鼠标操作,会自动生成 Poco 语句到脚本编辑框中。

POCO自动录制.GIF

同样,你也可以通过 UI 树形结构更精确的检视 UI 控件,双击节点自动生成 Poco 语句,或者自行选择更好的写法。

自动录制出的语句不一定能够适应所有场景,采用更合理的选择器编写代码,通常会增强整个自动化脚本的健壮性和可读性,这是门学问

POCO自行选择.GIF

录制完脚本后记得运行试试效果。

对于 Android/iOS 的原生应用来说,不需要接入 SDK 即可使用,例如在连上 Android 手机后,将 Poco 辅助窗的模式切换至Android,能可以看到整个 UI 树形结构。

Android Poco.GIF

框架信息

上述两种 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 文档,可以查看AirtestPoco的仓库。

断言

到这里,我们已经有各种模拟输入方法,配合逻辑控制语句让手机动起来。自动化测试中还有很重要的一个步骤:结果验证,那么我们来看看怎样声明断言。

验证 UI 界面

录制方法与模拟输入类似

  • assert_exists:断言图片存在
  • assert_not_exists:断言图片不存在

assert.GIF

验证数值

通过 Poco 获取属性值,手写代码进行断言

  • assert_equal:断言相等
  • assert_not_equal:断言不等

例如

# ... 模拟输入并获得20分之后

value = Poco("分数按钮").attr("num")
assert_equal(value, 20, "获到20分")

查看测试报告

脚本运行完毕后,点击查看报告按钮(快捷键 Ctrl+L),会使用默认浏览器打开结果报告页面。报告中将展示出每一个步骤的内容和实际执行过程的截图、运行结果,方便查看步骤是否执行成功。

查看报告.GIF

命令行接口

现在,你已经学会自动化测试了。接下来呢,你可以使用命令行接口将自动化测试与持续集成结合起来。持续集成是什么?

在 AirtestIDE 运行脚本时,LOG 窗口中会打印运行命令。

RunCMD.png

你可以在不开启 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 台手机上进行兼容性测试。

最后,如果大家对 Airtest 有疑问、BUG、建议,请到https://github.com/AirtestProject/AirtestIDE/issues 发布 issue,我们会有专人解答。同时,我们还提供了官方 QQ 群给大家沟通交流,目前 1 群已满,欢迎大家加入 2 群:

共收到 2 条回复 时间 点赞

我也一直在用 airtest,有一点不太明白~poco 适用的场景具体是怎么样的?因为一般的安卓程序基本用 airtest 的图像识别都能跑流程了~按照我的理解能图像识别的我更愿意图像识别来做,要不然靠定位来获取元素的维护成本还是太高了

zlp 回复

通过图像识别,已经可以编写大部分的测试脚本。但是在某些特殊情况下,例如对于游戏或 App 里的动态元素,通过图像识别定位较为困难。所以,我们也提供了另外一种基于 UI 控件搜索的自动化框架 Poco

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册