一、背景
因为很多公司都采纳麻利开发的模式,测试也要跟着进行麻利测试。而每个迭代的周期十分短,常常要对原有性能进行回归测试,这样就减少了大量反复人力老本。引入UI自动化测试能够用来疾速回归测试app原有性能,测试人员只须要关注新性能的测试。其次,挪动端App的测试用例大部分是性能验证相干的用例,通过UI操作即可验证,这就为UI自动化提供了便当条件。因而,能够将测试反复度高,执行效率低的用例,通过UI自动化疾速反复执行,达到进步测试效率的目标。
二、Airtest简介
目前支流的UI主动话测试工具次要有:Selenium, Appium和Airtest。其中Selenium是一款开源的Web利用自动化测试工具,它能够间接运行在多种浏览器平台,其反对的浏览器简直涵盖了所有支流的浏览器,然而因为得物是APP,不须要web端的测试,故这个工具被仁慈舍弃。而Appium和AirTest都是针对APP的自动化测试工具,都能够进行主动话测试脚本的录制和回放。然而之所以抉择了AirTest最次要的起因是他很容易生成测试脚本,即便测试人员不会编程,不懂脚本,也能够通过失常用户的点击拖拽等操作,主动实现脚本的录制,从而大幅度降低自动化保护老本。自己通过亲自实际,从UI自动化小白到第一个自动化测试脚本胜利运行,用了半天工夫,感兴趣的同学能够尝试一下。
AirtestIDE 是一个跨平台的UI自动化测试编辑器,实用于游戏和App。它的特点如下:
- 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程反对。
- 基于图像识别的 Airtest 框架,实用于所有Android和Windows游戏反对。
- 基于UI控件搜寻的 Poco 框架,实用于Unity3d,Cocos2d与Android App。
- 可能运行在Windows和MacOS上。
架构图
能够看到,底层的次要测试框架是AirTest和Poco,二者区别在于:
- AirTest:基于Python的、跨平台的UI自动化测试框架,基于图像识别原理,实用于游戏和APP。
- Poco:基于UI控件搜寻的自动化测试框架,其外围劣势是除了对Android 和IOS之外,对游戏也是反对的,同时也反对微信小程序、微信小游戏和H5利用。
三、Airtset装置和连贯设施
目前AirTestIDE 提供了Windows和Mac两个版本的客户端,请从官网下载,解压即用。
无论是Android/IOS手机,还是Windows窗口,在AirTest中都将它视为一个设施。下边重点介绍一下Android设施的连贯。
连贯Android手机
通过ADB连贯电脑和Android手机,ADB是Google官网提供的Android调试工具,AirTestIDE依赖ADB与安卓设施进行通信。
关上AirTestIDE,依照以下步骤进行连贯:
1.关上手机设置-开发者选项-USB调试开关,参考安卓官网文档;
2.在AirTestIDE设施面板中点击 refresh ADB 按钮,查看连贯上的设施;
3.如果没有显示出设施,试试restart ADB,如果还不行,参考FAQ文档进行问题排查。
4.可能胜利看到设施后,点击对应设施的connect 按钮,进行初始化。
连贯胜利后,即可在AirTestIDE中看到手机屏幕的镜像显示,并进行实时操作,如下图所示:
连贯IOS手机
要连贯一台IOS手机,你须要筹备好一台装置了Xcode的MAC电脑,连贯形式参考文档。
四、录制自动化脚本
在连贯上设施当前,就能够开始录制自动化测试脚本了,在接下来的内容中,我将会在一台Android手机上,给大家演示如何录制脚本。
模仿输出
AirTest反对通过图像识别的形式,找到你想要的地位并进行操作,这是基于AirTest框架实现的。
咱们能够先看看如何主动录制脚本:点击AirTestIDE左侧的AirTest辅助窗上的“录制”按钮,而后随着你在设施窗口上操作手机,代码会主动生成在代码窗口中。
录制实现后,点击“运行”,就能够运行你的第一个自动化脚本了。
如果你感觉主动录制生成的图标不够精确,还能够点击AirTest辅助窗上的 touch 按钮,而后再设施窗口上框选准确的图标,也能够制动生成一条touch语句。如下:
https://www.qq.com/video/e325...
相似的模仿输出操作还有滑动:点击swipe按钮,在设施窗口上框选准确的图标最为滑动终点,而后点击滑动起点地位,即会主动生成一个swipe语句。
其余的模仿输出的API包含:
- Text:文字输出
- KeyEvent:按键输出,包含(HOME/BACK/MENU等)
- Sleep:期待
- Snapshot:截屏
断言
到这里,咱们曾经有各种模仿输出办法,配合逻辑管制语句让手机动起来。自动化测试中还有很重要的一个步骤:后果验证。咱们就能够来看看怎么申明断言。
(1)验证UI界面
录制办法与模仿输出相似。
- assert_exists:断言图片存在
- assert_not_exists:断言图片不存在
(2)验证数值
通过Poco获取属性值,手写代码进行断言。
- assert_equal:断言箱单
- assert_not_equal:断言不等
例如
查看测试报告
脚本运行结束后,点击“查看报告”那妞,会应用默认浏览器关上后果报告页面,报告中将展现每一个步骤的内容和理论执行过程的截图、运行后果,不便查看步骤是否执行胜利。
五、AirTest脚本介绍
AirTest是一款基于Python的,跨平台的UI自动化测试框架,基于图像识别原理,实用于游戏和APP。尽管能够借助IDE提供的录制性能疾速的生成脚本,然而通常来说,熟练掌握Python语法可能帮忙咱们写出利用更宽泛、更不容易出错的脚本。
一个简略的.air脚本解析
在下载解压Airtest脚本的专属IDE——AirtestIDE后,点击“新建脚本”按钮,默认即可创立一个后缀名为.air的脚本文件,.air这是Airtest脚本的专属后缀。
让咱们关上方才新建脚本的文件夹,能够看到实际上.air脚本文件是一个一般的文件夹,外面附带了一个同名的.py文件,AirtestIDE在执行脚本时,实际上执行的是外面的.py文件。也就是说,Airtest脚本实质上仍是Python脚本,遵循的是Python语法,咱们能够依据理论须要自在地import其它Python第三方库。
值得注意的是,.air文件夹中必须要有同名的.py文件,否则在命令行执行airtest run test.air这样的运行指令时会导致失败。
AirTest脚本示例
初始化环境
首先,就像一个一般的Python脚本一样,咱们须要在代码文件的最结尾局部,写上from airtest.core.api import *,将AirTest 的次要API都import进来,以便在后续脚本中应用这些API。
auto_setup是一用来初始化环境的接口,接口文档在这里,它承受4个参数,咱们能够设置以后脚本所在的门路、指定运行脚本的设施、设置默认的log门路和设置脚本父门路。
- 如果auto_setup不传入任何参数,AirTest将会读取运行时命令行中传入的各项参数,来对环境进行初始化。
- 在AirTestIDE创立脚本时,默认生成的代码里是最简略的初始化代码auto_setup(__file__),意思是将脚本文件作为脚本门路传入,其余参数内容将默认读取运行命令行传入的参数。
脚本运行命令行有两种模式,命令行中的参数蕴含device,log等:
- 命令行运行AirTest脚本的示例:>airtest run untitled.air --device Android:///手机设施号 --log log。
- 在应用AirTestIDE运行脚本时,会在"Log 查看窗"中主动生成一个可用的命令行,能够供大家作为参考。
模仿点击
Airtest作为自动化测试框架,模仿的是人的操作,常见的接口次要有:
- Touch点击某个地位,能够设定被点击的地位、次数、按住时长参数
- Swipe从一个地位华东到另一个地位
- Text调用输入法输出指定内容
- KeyEvent输出某个按键响应,礼盒回车键、删除键
- Wait期待某个指定的图片元素呈现
- Snapshot对以后画面截一张图
- 其余
外围API请参见文档,在这个文档页里呈现的API都是跨平台API,因为咱们在代码的第一行里将airtest.core.api里的接口全副import进来了,因而这些API能够在代码里间接进行调用,像这样:
在很多接口中,反对传入Template图片对象作为参数,在运行时将会去点击图片在画面中的所在位置,相似这样:
其中,Template对象是一个图片类,AirTest会先尝试在以后画面中找到匹配这张图片的地位,如果找到了,将对这个坐标进行点击操作,如果找不到,就抛出辨认异样。
断言语句
断言在单元测试代码中十分重要,因而倡议在咱们的脚本里应用断言语句来断定被测利用以后的涨停是否是咱们预期中的状态。Airtest提供了assert_exists和assert_not_exists两个接口,来断言一张图片存在或者不存在于以后画面中。同时,还提供了assert_equal和assert_not_equal两个语句,来断言传入的两个值相等或者不相等。
如何在Python脚本中应用AirTest
AirTestIDE在创立新脚本时,也可能间接创立一个.py脚本文件,然而在创立之前会弹出一个设置窗口,要求填写一些指定的参数。
在咱们理解过auto_setup接口后就会晓得,这些参数就是为了传给它,而后初始化AirTest运行环境应用的。因而,一个纯.py脚本的初始化代码能够是这样的:
上边这段代码的意思是说,当应用python xxx.py来运行本文件,且不带任何命令行参数是,则主动应用auto_setup这个接口来对AirTest相干的参数进行初始化。这样只须要在写py脚本时,填好指定的参数就能间接用python xxx.py指令来运行脚本。
同时,原先传统的airtest run xxx.air --devices Android: /// 命令行形式也不受影响,只有脚本检测到传入了命令行参数(即代码中的 if not cli_setup()判断),就仍然优先应用命令行参数来初始化AirTest环境。
当然,熟练掌握API的各位,也能够依据理论需要在本人的Python脚本中调用AirTest API,与应用失常的pyhton第三方库办法雷同。
六、总结
本文只是简略解说了如何应用AirTest进行UI自动化脚本的录制和回放,以及对自动化脚本进行了介绍。如果要进行UI自动化的继续集成,还须要进一步的理解和学习。
心愿有工夫的同学能够进行一些实际,理解一下UI主动话相干的常识。在当前的工作中,咱们就能够将测试反复度高,执行效率低的用例,通过UI自动化疾速反复执行,以达到进步测试效率的目标。
此外,本文只是介绍了通过AirTest的框架进行图像识别,编写测试脚本,然而在某些非凡状况下,例如对于游戏或者APP里的动静元素,通过图像识别比拟艰难。AirTest还提供了另外一种基于UI控件搜寻的自动化框架Poco,同学们能够在下边的文章中,进行学习和实际。详情请查看:https://edu.uwa4d.com/lesson-...
文|Lynne
关注得物技术,携手走向技术的云端