今天,我想向您介绍一个称为Airtest的相当新的用于自动化测试的开源工具。 将来,我将再写几篇文章,详细介绍此工具包的各个元素以及如何使用它们,现在我的目标是向您介绍该工具包并给出一个大致的概念。
这是三篇文章的第一篇。 第二部分描述了图像识别框架(Image Recognition) -AirTest ,第三部分也是最后一部分通过编写代码致力于Poco - UI自动化框架 。
AirTest IDE由网易开发,旨在用于“难以自动化”的应用程序,例如游戏。 实际上,它们是开发人员的主要重点,尽管这不会停止将AirTest用于其他任何应用程序。
AirTest IDE在Windows,MacOS X和Linux上运行,并包含2个框架:AirTest和Poco。 刘鑫在2018年Android游戏开发者峰会上提出了这个发展。 Python 2.7和Python 3.3+用于编写测试。 支持在大量设备上立即运行测试,开源代码和免费应用程序以及易于编写的测试等重要的事情-这些是开发人员所强调的优势。 该应用程序可在Windows和MacOS上使用,并允许您从以下操作系统自动执行应用程序:Windows,iOS,Android。
GitHub上的AirTest项目包含4个项目: Airtest , Poco , iOS-Tangent , multi-device-runner 。
还值得一提的是,网易为其自动测试提供了自己的物理设备场,称为AirLab 。

简要介绍框架。
Airtest是基于图像阈值的用于手机游戏和应用程序的图像识别跨平台框架。 AirTest IDE允许您使用以下命令与应用程序进行交互:
触摸,等待,滑动,存在,文本,按键事件,快照,睡眠,assert_exists,assert_not_exists,assert_equal,assert_not_equal。 我将在另一篇文章中讨论命令的功能和参数,该文章专门研究AirTest和Poco框架。 现在值得一提的是,keyevent命令负责“按下设备的物理按钮”,例如Home,Power,Menu,Back。 使用大多数命令时,系统会提示用户突出显示工作设备屏幕的一部分,该屏幕快照将用于相应的命令(触摸,滑动,确定等)。

下班后,我可以强调一下Airtest的优势:
- 快速清晰的代码编写。 实际上,一切都已完成,在自动模式下,您只需要选择必要的参数,调整时间并小心选择图像即可。
- 在活动的工作设备上,代码中使用的图片的确切定义。 另外,报告还指出了代码中使用的图像与工作设备屏幕上的图像的重合(比较)百分比。
- 谈到报告。 每次启动后,您可以使用键盘快捷键Ctrl \ Cmd + L创建报告。 方便的报告提供以下信息:声明其结果的类型,以及在单独的小节中突出显示每个测试步骤,以及有关AirTest单击的位置,期望的图片位置,匹配图片的百分比等信息。
- 编写代码后,即可在任何设备上使用它。
- 多线程:连接多个测试设备并并行运行它们。
缺点Airtest,下班后我可以重点介绍一下:
- 如果在此过程中存在视觉上看起来相同的元素,例如滑块,按钮等,则AirTest极有可能不了解您要使用哪个控件。 这将在相应的错误中指出。 但是,使用第二个框架(Poco)可以轻松省去这个负数,下面将对此进行讨论。
- 图像的比较(根据代码和屏幕上的实际图像)为黑白。 值得考虑的是您是否很重要,例如角色的视觉外观(他的颜色,不同的衣服等)。 如果字符在视觉上有所不同,但是它们以相同的方式(一个姿势等)显示在屏幕上,则检查很可能会成功。 图像识别选项带有一个“ rgb”复选标记,您可以使用它,但如果图像较小,则效果不佳。
- 使用应用程序准确拍摄所需的屏幕截图时,您无法“冻结”屏幕。 您不时需要“捕捉”所需的框架。
- 因为 公开测试版中的应用程序,则可能会遇到各种令人讨厌的错误或不准确之处,例如,无法使用Windows上的内置应用程序调整窗口大小。 现在,作者每隔几个月更新一次AirTest IDE,我希望这些疏忽将很快得到解决。
Poco是用于自动化用户界面(UI)的通用框架,它提供独立于(游戏)引擎的强大API。 这些依次在运行时检索UI元素的层次结构。 因此,只需单击几下即可使用户“到达”当前页面的整个元素层次结构,依此类推。 此外,该框架还允许您“冻结”当前屏幕以根据当前窗口元素的层次结构来编写代码。 Poco旨在帮助AirTest了解测试所讨论的UI类型,但是没有人会打扰您仅使用此框架编写所有测试。
所有测试都是用Python编写的。 可以在相应的API中找到命令实现: airtest.core.api模块 , airtest.core.android软件包 , airtest.core.ios软件包 , airtest.core.win软件包

下班后我可以强调的Poco优势:
- 它支持许多重要的游戏引擎,包括Unity3D,cocos2dx-js,cocos2dx-lua,NetEase内部引擎,以及对本机Android / iOS应用程序的支持。 如果要使用不在“受支持”的引擎列表中的引擎,则可以按照相应的说明编写自己的引擎。 在官方文档中提到了虚幻引擎,但是到目前为止,所有内容都仅限于短语“即将推出”。
- 屏幕上的UI元素的层次结构会实时返回。
- 快速启动并运行测试。
- 就像在AirTest中一样,我只编写了一次代码-随处使用。 Python 2.7和3.3+支持
- 可以将任何外部库连接到您的项目
- 从文档来看,它支持GPS,加速计和陀螺仪传感器,并支持纵向和横向显示模式。
下班后,我可以重点介绍Poco缺点:
- 在Windows 7上工作期间,我没有发现基本问题。 这可能会妨碍成熟的工作,但是目前它们是在Windows 10上使用的。主要问题是在某些情况下对象的移动不正确(滑动命令)。 例如,我指示要移动的对象以及第二个对象的坐标,这是最后一个点。 在这些极少数情况下,Poco会错过最终位置,但报告显示正确的位移数据(矢量),并且该步骤被认为是成功的。
- 当您选择一些具有大布局(布局)的元素时,该选择可能会与Poco Assistant窗口重叠,并且您将无法选择其他元素,直到将选择从当前元素中删除为止。 要删除选择,可以使用键盘快捷键Alt + F4
为了完善图片,值得一提的是Airtest IDE拥有自己的Selenium插件 ,您可以使用其插件自动执行Web项目,但仅使用Chrome浏览器。 目前不支持其他功能。 就我个人而言,我还没有与他合作过,所以我不能说他的工作,但是在这个简短的描述中不可能错过他。

因此,我想说AirTest IDE是一个非常有前途的开发,旨在使游戏中的UI自动化,但是目前不适合测试这样的游戏过程。 如果您有很多UI元素和/或许多设备要检查,而又不想花费很多工时,那么此IDE很可能成为您的救星。 要开始编写最简单的测试,您不需要具备自动化和编程方面的丰富知识,只需具备使用Python的基本知识即可。 当然,通过这种方式,您不会走得太远,您将不得不学习这种编程语言,但是要开始并理解该程序如何适合您,就足够了。 目前唯一令人沮丧的是各种烦人的错误,例如与嵌入工作设备(Windows应用程序)后无法调整窗口大小,与主程序界面的较大选定对象重叠等相关的错误,但这很可能尤其是考虑到应用程序处于Beta阶段这一事实。
