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

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

前言

本文档将演示使用AirtestProject专用的编辑器AirtestIDE,编写Airtest+Poco自动化脚本的全流程。强烈建议新手从本文档开始阅读,并使用AirtestIDE上手脚本编写。

简介

AirtestIDE 是一个跨平台的 UI 自动化测试编辑器,适用于游戏和 App。

访问官网通过视频查看更多特性。

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 可以将被测窗口嵌入,方便脚本录制和调试。

连接Windows窗口

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

连接 iOS 手机

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

录制自动化脚本

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

模拟输入

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

基于图像识别

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

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

录制GIF

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

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

框选录制GIF

类似的模拟输入操作还有滑动:点击swipe按钮,在设备窗口上框选精确的图标作为滑动起点,然后点击滑动终点位置,即会自动生成一个swipe语句。

其他模拟输入的 API 包括:

基于 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 识别方式,分别是基于两个框架:

这两个框架都是由我们团队开发的 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.GIF

验证数值

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

例如

# ... 模拟输入并获得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 群:


↙↙↙阅读原文可查看相关链接,并与作者交流