一、AirTest 简介
AirTest Project旗下有四个产品:AirTestIDE、AirTest、Poco、AirLab
AirTest
跨平台的UI自动化框架,适用于游戏和App。提供设备连接、运行Test脚本、生成测试报告等基础功能。
Poco
Poco是一个跨平台的UI测试框架。提供控件查询、遍历、触摸、拖动等强大功能。
AirTestIDE
AirTest的集成开发环境,提供便捷的AirTest开发体验,测试代码编写,调试运行都可以在AirTestIDE里完成。内置AirTest和Poco。
AirLab
基于AirTest的云测平台,这里不做展开。
其他工具
Hierarchy viewer (UI Inspector)
UI层节点树形结构查看器,可以方便的看到节点的命名、层级、以及常规属性。
一般情况下,使用AirTestIDE编写调试测试脚本,脚本基本开发完成之后,则使用airtest命令行工具做脱离IDE的自动化测试。Poco框架提供的强大灵活的UI选择接口,可以帮助我们快速获取到指定的控件,继而进行相应的操作。
二、开始使用AirTest
1、接入PocoSDK
Poco SDK 接入文档
2、编写测试代码
lua中启用PocoManager
local poco = require('poco.poco_manager')
poco:init_server(15004) -- default port number is 15004, change to another if you like
python test script
poco = StdPoco()
poco('AddStarPanel').wait_for_appearance() //等待名字为AddStarPanel的节点
poco('AddStarPanel').click() //点击AddStarPanel节点
3、其他有用的文档
我们项目使用的引擎是cocos2d-x,所以选择cocos版本的SDK。这里推荐测试环境为Android。iOS的测试环境搭建相对复杂,而且必须依赖XCode,实用性大打折扣,不推荐。
官方文档写的还算详细,但是比较分散,有用的东西散落在很多地方,这对初学者来说并不是很友好。在这里列出几个有用的文档链接。
AirTest Core文档
Poco文档
Poco-SDK github
Hierarchy viewer (UI Inspector)
三、遇到的坑
项目背景
《洪恩识字》App内包含数百个小游戏场景,每次修改公共代码之后,影响范围很大,尤其是修改基类的公共接口,需要把所有的游戏都测一遍,这工作量可想而知有多大。自动化测试可以节省大量的人力,对我们项目来说意义重大。
我们项目的测试诉求:针对每个游戏环节(玩、认、练、写、测)自动化测试,支持收集Lua崩溃日志,以每个字为单位生成测试报告。
“留一手”的开源代码
在决定使用AirTest之后,我进行了深入的调研,跑通整个测试开发流程,以及阅读部分源码。阅读源码的过程中我发现网易开源的Poco代码,并不完整。其使用的simplerpc是明显阉割过server端代码的。
并且Poco的接口是支持GM命令的,例如为了方便测试,自动进入某场景,甚至获取一些配置数据等。当然这个接口也是被阉割过的。
魔改之路
接下来方向比较明确,fork repo到我厂的gitlab,进行魔改。主要实现以下功能: - rpc server - gm command - lua crash report
替换AirTestIDE内置的poco
AirTestIDE里内置了airtest和Poco,如果我们想用自己修改的Poco,需要设置一下优先搜索路径。我的poco的git repo路径是"E:auto_testpoco";
sys.path.append("E:auto_testpoco")
从本地代码安装poco:
1)新建auto_test目录
2)在auto_test下执行
git clone https://x.x.x.x/ihuman/poco.git poco
git checkout master
3)pip install -e poco
从本地代码安装airtest与上一步类似,pip install时记得加-e参数。
基本功能完善之后,如何批量进行测试就成了问题。调研了一下poco unit,以及my-testflow,发现并不满足我们的需求。
于是我写了一个框架,组织管理批量测试任务,生成测试报告,汇总报告结果。
基本流程跑通之后,基于我的测试框架,QA同学可以轻松的新建测试脚本,在AirTestIDE里开发调试脚本,通过命令行工具进行测试任务。
四、写在最后
AirTest的工具链非常强大,可以满足基本的测试工作,如果项目有特殊需求,可以自行开发。 Poco在性能方面还有很大的提升空间,以后有时间我会继续性能方面的优化。
以上就是我使用airtest的一些经历,在此抛砖引玉。