一、Airtest的简介
Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。
二、关于自动化测试
概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。
三、市面上常见的UI自动化测试工具以及优缺点
以上主流工具的优点跟缺点:
相较于以上工具来说,Airtest有以下优点和缺点:
所以其实基于图像识别的Airtest更适合用于游戏测试多一点。
四、环境的搭建
1.AirtestIDE的下载
AirtestIDE已经帮你集成了所有的环境,自带录制脚本栏,自动生成脚本,自带编辑器还自带模拟器,有了一个AirtestIDE就可以轻松简单的录制脚本了。下载地址是Airtest的官网:
http://airtest.netease.com/
AirtestIDE的使用教程跟文档也在下面的连接中:
http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html
如果你想要利用Airtest的API,自己拓展更多的高级功能的话,可以先下载airtest的python第三方依赖库:
$brew install python3.6.4
#下载python3
$pip install Airtest
#下载Airtest python第三方依赖库
$pip install poco
#下载Airtest提供的Android app ui测试库pocoui
$brew cask install android-sdk
#安装Android-sdk,详细的配置教程网上有,这里不详细说了。
然后再下载一个Python的编辑器来编辑代码,个人推荐使用的是pycharm。接下来就是使用官方提供的启动demo代码:
from airtest.core.api import *
# 通过ADB连接本地Android设备
connect_device("Android:///")
#安装待测软件apk,路径信息。
install("path/to/your/apk")
#开始运行app
start_app("com.pingan.certicationApp")
#点击某个图片,Airtest中基于图像识别语法,图片自己提供。
touch(Template("image_of_a_button.png"))
#滑动语音,开头图片跟结尾图片
swipe(Template("slide_start.png"), Template("slide_end.png"))
#添加断言的图片
assert_exists(Template("success.png"))
#点击Android上的返回键
#keyevent("BACK")
#点击Android上的Home键返回
#home()
#uninstall("package_name_of_your_apk")
以上已经添加了每一句作用的注释,小伙伴们可以动手试一下将程序跑起来,当然如果说易操作性还是AirtestIDE比较容易上手一点。
五、AirtestIDE的真实场景运用
以上介绍了那么多的就来讲一下实际操作,以平安的智能双录app为例子,首先我们先来看一下用例步骤:
- 1、点击双录列表待上传页面的重新录制按钮
- 2、进入录制后点击开始录制按钮
- 3、点击录制完成
- 4、点击确认完成
-
5、在弹框中点击“确认”
首先连接设备并进行录制:
然后我们用IDE开始录制脚本,先截取每一个按钮的图片,进行touch操作,如图1,左边就会产生每张被截取的控件的样式。
之后机器就会在整个界面中取一张截屏,然后在截屏中寻找我们截取的那个部分,然后再定位到图片的位置,对图片进行点击的操作,从而达到通过图像识别进行测试的自动化,当然基于图像识别的方式比较难进行输入值的操作,比较适合一些重复繁琐的按钮点击事件。意思就是说这种通过截取图像再的方式并不是很适合用来做登录类的需要用户输入数据的东西。
那么问题来了,怎么样才能够让Airtest也精准定位到输入框,从而完成自动输入信息类型的自动化测试呢?其实我们别忘了Airtest还有基于poco这个UI控件搜索框架,所以如果是Android类的app,还是比较适合用poco来定位控件的位置,从而实现自动化,下面有一个智能双录软件新建保单的测试用例:
- 1、点击新建双录按钮进入新建双录页面
- 2、随机输入000开头的14位保单号
- 3、输入投保人姓名
- 4、输入投保人证件类型
- 5、输入投保人证件号
- 6、输入保险产品
- 7、输入被保人幸免
- 8、选择销售渠道、产品类型、缴费频次
- 9、填写缴费期、每期保费、保险期间
- 10、勾选双录材料
如图2所示,只要点击AirtestIDE左上角,Android旁边的录制按钮,然后只要点击右边模拟器的响应的控件,就会帮你自动定位那个控件的位置,然后再选择动作事件,例如:点击chlick(),滑动swipe()之类的操作,如果要输入字符的话,可以通过先选中需要输入内容的输入框,然后再用test(“要输入的内容”)来自动进行输入操作,是不是很简单省事?
除了以上这些,我们还可以往脚本里面加入断言,然后利用Airtest一键生成测试报告,如图3所示,这种报告不仅可以让你快速了解到你测试的哪个步骤出错了,而且同时也便于判定UI有没有展示异常,但是Airtest有一个缺陷,就是只要某张图片识别不出来,整个脚本录制进程就会停止,后面的控件就不会再去识别,报告也只会停留在失败的那一步,生成报告可以点报告按钮或者ctrl+l,报告以网页的形式呈现,如下图:
总结
Airtest操作比较简单,基本上不涉及到代码,所以非常适合刚入门没什么测试经验的人利用这个工具做UI自动化测试,同时Airetest又提供了开源的API,让资深测试工程师可以基于Airtest的框架上再做高级的定制化扩展功能。
如果说这个软件有存在不足的地方,个人认为就是不支持断点续传,如果测试中出现了错误以后整个测试就停下来并且要手动从头开始,这里可以进行二次开发,第一种让某个错误出现的时候选择自动重新跑脚本,这种场景适用于前面的按钮跟后面的按钮不在同一个页面上,没有点击到前面的按钮,后面的按钮也不会出现,第二种将错误记录,再跑接下来的脚本,这种场景适用于两个按钮都在同一级页面,相互间影响不大可以先触发后面的按钮进行测试。