团队一直想做UI自动化,app发版频次比较多,每次都需要手动点一遍,很机械,而且过程中可能漏点,脚本的好处是重复使用,替代人工。小组内做UI自动化已经有两个多月,从以下几个方面分析我们自动化历程,也有一些心得。
1.工具选型
UI自动化框架百度查询了有以下几套:appnium,阿里的macaca,还有一套是网易的airtest框架,主要是考察了这三个框架。对于阿里的macaca环境,安装太复杂了,有些库还是公司网络限制,折腾了一天,也没有个效果,放弃,转而尝试appnium框架,安装安卓的sdk,appnium,以及node.js,大约花了两天时间(技术比较菜),后面脚本调试起来了,使用的安卓机还有各种兼容性问题,什么获取权限问题,通过adb命令包也是各种提示信息,彻底崩溃。就没去尝试了,使用手机机型是oppo R15。各种适配。后面公司又拿了小米手机,又得做适配。考虑到后期自动化推广,安装环境,还有写脚本,都是问题,而且iOS的appnium目前xcode版本到12已经不支持维护了,基于以上考虑,最终选择了airtest框架。看官方一直在维护,网上问题的博客也很多,所以最终还是选择了airtest。易操作性、脚本录制简单这些都是它的优点,但是也有缺点,下面我们分析下airtest原理
2.airtest工具介绍
中文文档链接地址:https://airtest.doc.io.netease.com 文档中很多说的很清楚。这里只是简单介绍下。airtest是两个模块,一个是airtest库,一个是pocoui库。airtest库中有很多核心方法,相对路径地址:airtestIDE/airtest/core,分别有iOS,android可以使用的方法,可以看截图,一个是poco库支持的方法,一个是airtest库支持的方法
poco是基于UI树,根据元素位置去,或者属性值,比如id,class类名去查找元素,并进行相关的操作,类似appnium的xpath路径定位
这里说下airtest的图像识别。
airtest图像识别是基于python的openCV识别库,和百度的OCR识别还是有一定差距。图片识别对于分辨率不高,或者底色不太好认的,识别率没那么高,有时候,界面上明明有,但是就是识别不了。所以,对于底色比较浅的图片,识别率有时候会出错。这个是缺点之一,在写用例时,尽量避免这点,airtest有一篇文章如何写出更稳定的脚本,可以看看https://airtest.doc.io.netease.com/tutorial/9_Improved_compatibility/ ,识别率问题可以看下这个文章https://toutiao.io/posts/r7hdp1/preview
airtest还有一个问题是用例管理,后面我们来大概分析下用例管理如何做的
3.用例管理
airtest工具只能跑单个用例无法对全部用例进行运行,这个的确是一个坑,但是airtest提供了类似unittest方法,可以结合本地python,安装airtest与poco库,直接在pycharm上直接运行,我们对自动化目录进行了分层,一个文件下放置公共变量,一个文件下放置UI用例,一个文件下放置log日志,写了一个runner.py文件,直接运行这个py文件,即可运行所有用例,也可将用例放置在列表中,运行配置的用例。后期团队有精力,会开发一个UI界面,用户勾选就好。目前实在没有精力,用例的管理一直在自动化规划中。
4.airtest使用场景
airtest用例稳定性可以之后,目前我们是使用在上线前,测试环境后台配置至生产后台,生产后台数据变化量小,即做上线前最后一次回归。有时版本出错,可能要发好几个版本,这个时候,脚本的重要性就体现了。我们安卓一套脚本下来30分钟,iOS时间长点,40分钟,主要是脚本中sleep时间,等待页面全部加载好。还是可以满足UI的回归。另外测试环境团队也做了一套,有成效,但是维护成本比较大。
airtest使用一些感想,以及为什么使用airtest,大家可以作为参考