一款免费的自动化测试工具:AirtestProject
Airtest Project:一款免费的自动化测试工具
Airtest Project简介
Airtest Project是网易出品的一款自动化解决方案,它适用于任意游戏引擎和应用的自动化测试。
Airtest Project支持Android、IOS和Windows平台。
Airtest 是一个自动化测试框架提供了利用图像识别技术,Airtest Project不需要依赖被测对象的源码。
Airtest Project是跨平台的API,它基本和所有Android移动应用程序和Windows游戏兼容。
在2018年3月26号的Google开发者日上,Google也宣布了这款由网易开发的项目,因此很值得一试。
Airtest Project提供了一个自动化测试编辑器Airtest IDE,Airtest IDE使用了基于图像识别的UI自动化测试框架—Airtest来进行控件定位;它同时集成了POCO框架。
POCO框架是基于控件识别的UI自动化框架,支持主流游戏引擎:Cocos2d-x, Unity3d,支持Android原生应用。因此可以选择是用图像识别或者基于控件定位的方式来进行控件定位。
AirtestIDE下载及安装
AirtestIDE是一个跨平台的IDE,可在Windows(x64)和macOS上运行。
AirtestIDE是免安装版,直接去Airtest Project官网进行下载即可。
下载完成以后,双击可执行的文件AirtestIDE.exe即可使用。
Airtest Project官网:Airtest Project官网传送门
启动AirtestIDE,界面功能显示如下图所示(备注:本文演示平台为WINDOWS/Android):
我们来看看IDE窗口布局。在顶部,有一个菜单栏和快捷按钮,用于创建新项目,保存项目,运行脚本和检查报告输出。
左上方有Airtest窗口,窗口提供预封装的关键字,用于记录捕获的Airtest脚本(基于图像识别技术)。
左下角包含Poco窗口,可处理所选界面的UI元素,以及在树形结构表单中可以看到所选UI界面的位置。
中心区域包含脚本编辑部分,用于使用Airtest API在Python中开发自己的脚本。下面的日志输出部分在执行脚本时显示相应的日志内容。
在右侧,有一个实时的手机屏幕,支持使用鼠标事件来远程控制设备。
连接移动设备之前需要做什么?
为了能够使用移动设备测试和调试移动应用和游戏,该设备需要处于开发人员模式并且 USB调试设置已打开。如果使用的操作系统是Windows操作系统,则可能还需要在系统上安装相应的设备驱动程序。
AirtestIDE连接移动设备
连接Android手机
今天主要介绍下Android平台的操作
通过USB数据线将Android手机连接到PC上,单击refresh ADB按钮显示在设备列表中已连接的手机。
如果状态为“未授权”,请仔细检查是否已启用USB调试,并允许计算机在设备上执行USB调试。
点击connect就可以连接到设备并将设备投影到IDE里,如下所示:
如果设备已锁定,可以使用设备按钮直接解锁,也可以使用IDE开始操作设备。
- 例如,单击屏幕下方的电源按钮以唤醒设备并使用鼠标解锁设备。
AirtestIDE的使用
成功连接手机后就可以使用AirtestIDE来进行脚本录制与回放功能。
录制方式分两种,一种基于图像识别的,另外一种基于控件定位的。
本文基于凸显识别的录制方式介绍两种:
一种是手动操作app,AirtestIDE自动化录制脚本回放;
一种是自己手动通过添加关键字进行图像识别的方式,一步步记录APP操作脚本录制回放;
测试app我就直接测试微信,进入我们的testclass微信公众号,点击文章,浏览文章为例,详细操作步骤如下所示:
1.点击微信,进入微信APP;
2.通过搜索菜单栏搜索testclass,进入我们的公众号;
3.点击公众号菜单,进入文章列表;
4.选择文章进入详情;
5.点击“阅读原文”,进入www.testclass.cn官网;
6.进入【关于作者】菜单;
自动录制脚本
按照上面介绍的步骤连接上手机后,点击IDE里的File->New,命名文件testclass.air(默认生成.air的文件),创建一个脚本如下所示:
接着点击Airtest Assiant下的摄像机图像录制按钮(或者按快捷键F6)即可开始录制,如下所示:
点击右侧的设备屏幕区域,完成上面描述的1~6步骤,操作完再次点击录制按钮即可停止录制,录制完会自动生成脚本如下:
注意:脚本录制完成后,需要手动回退微信APP界面到主页然后回退到手机屏幕主页,或者点击右边屏幕的Home键,回到手机屏幕主页。
接下来就是回放脚本,点击菜单栏的Run Script(快捷键F5):
上面都是操作性的步骤,如何增加断言呢。如下所示:
再次手动回退微信APP界面到主页然后回退到手机屏幕主页,F5快捷键,回放录制的脚本;
执行完成后,点击工具栏按钮,查看执行报告:
如果测试报告不能正常显示截图,请复制URL在其他浏览器打开(谷歌、火狐);测试报告效果如下图所示(部分截图):
手动录制脚本
手动录制脚本的方式,其实和自动录制脚本的实现原来一样。
只是将操作步骤一步一步的分解操作,需要自己手动输入或者选择关键字实现操作方法。
同时需要通过自己手动截取定位识别的图片。
这种脚本录入方式可以增加准确度,同时可以减少自动录入的误操作的步骤,可以直接在想要加入断言的地方加入断言。
但是这种方法需要你会使用基本的关键字,例如以下几个关键字的解释:
touch()#点击元素,参数:元素图片;
wait()#等待时间,参数:时间; swipe()#滑动屏幕,参数1:元素坐标值;参数2:需要定位的元素图片; exists()#判断图片是否存在,存在则定位元素焦点;不存在返回False; text()#输入文本,参数:字符串; sleep()#等待时间,睡眠时间,参数:时间;
录入脚本的方式,和手动加入断言的方式相同,需要一个操作录入一个关键字,然后在右边屏幕区域截取参数截图,见下图:
控件定位方式
上面介绍了根据图像识别技术定位的方式,接着来介绍下按元素控件来定位的方式。
图像的话可用于不能用控件定位时的一种补充,基于控件体系的定位方式会比较精准。
稳定性相对来说也会好一点,两种定位方式结合起来几乎可以无所不能了。那通过AirtestIDE如何使用基于控件的定位方式呢?
点击Script Editor下的添加按钮,再创建一个脚本文件。
在Poco Assistant下方选择Android,接着只要点击IDE窗口左侧的Poco Assistant下方最右侧的录制按钮即可。详细操作步骤如下所示:
出现以下提示,按照上图点击YES就行啦!别问我什么意思,我也不知道!哈哈!
Poco mode has changed. Do you want to insert poco init code at the current cursor position? Yes No
点击Yes以后脚本区域会自动导入Poco需要的包:
from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
在安装插件Yosemite和PocoService出现以下提示,直接忽略风险即可。
没多大的风险,顶多盗取你几个亿,哈哈,因为不装这个服务用不了!你用不了!
脚本录入步骤基本上一样,点击IDE窗口左侧的Poco Assistant下方最右侧的录制按钮,然后手动操作步骤,IDE会自动记录识别的脚本;
脚本录入完成,详细代码如下所示:
# -*- encoding=utf8 -*- # www.testclass.cn # Altumn __author__ = "Altumn" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) poco(text="微信").click() poco("搜索").click() poco("com.tencent.mm:id/h1").click() text("testclass") poco(boundsInParent="[0.34814814814814815, 0.033854166666666664]").click() poco(text="一个").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").swipe([-0.0734, -0.4783]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0056, -0.6197]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0904, -0.8056]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0254, -0.7722]) poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").swipe([0.1215, -0.7452]) poco("com.tencent.tbs.core.webkit.WebView").click()
脚本回放方式和前面几种方式一样,按快捷键F5执行脚本回放,在此不再详述。回放成功后会生成测试报告,测试报告查看的方式也相同。
以上文章讲解了基于图像和基于控件脚本录制方式,如果你能够结合两种方法使用,基于控件定位搞不定的就把基于图像的方法加入,这样可以增加元素识别准确性。
本工具适用于没有太多编码技巧或者讨厌编码的人,同时也适用于敲代码敲到想呕吐的童鞋。当然在日常的工作中也可以使用基于图像识别的定位方式去录制一些脚本解决实际工作中的一些重复的体力活。