如何搭建可支撑大型Android终端实验室的自动化测试框架(python)(一)

1,176 阅读3分钟

目前业界关于android自动化测试框架层出不穷,appium、airtest、uiautomator2等都是目前比较流行的UI测试框架,那么如何利用这些基础框架来二次封装,落地一个适合自身业务场景的自动化测试框架?本文分几节来进行详细讲解,从基础框架选型到android碎片化特性适配,到底层接口的二次封装,到最后形成一个体系化,稳定的,维护性、扩展性良好的测试框架。当然可能其中还有些不足,但也算抛砖引玉和对整个过程的一个总结。

了解目的

做任何产品之前都需要先了解做这个产品的目的,这样才能从一个用户的角度去思考怎样能把这个产品做得更好。

其实做自动化测试的目的很简单,就是为了提效,通过自动化的方式提高测试的效率,尤其适用于目前android碎片化严重,适配工作量庞大的背景下,那么为了提效,框架就需要具备以下几个特点:

  • 透明 —— 自动化脚本执行过程透明,方便测试人员观察测试过程,以及方便问题定位。
  • 稳定 —— 避免非脚本因素导致的测试脚本执行失败。(但这很难做到)
  • 灵活 —— 业务测试人员可能在不断的业务需求中需要定制化一些自动化特性,这就需要框架方便测试人员去灵活扩展。
  • 预知 —— 提前预知终端设备状态,在执行出问题之前就发现问题,及时维护,提高稳定性及成功率。

技术选型

良好的底层基础决定了上层框架的稳定 目前业界比较流行的UI类android自动化测试框架我在文章开头已经提到过,appium、airtest、uiautomator2。
appium封装的太好了,也就导致过于复杂,不好灵活扩展,而且稳定性堪忧。
airtest操作简单,主打图像识别,但是问题也就出现在了图像识别上,图像识别对单台终端效果很好,但是当分辨率不同,甚至出现字体不同的机型时,准确率会下降,而且想提高成功率也很困难。
uiautomator2轻量级,可灵活扩展,虽然不同机型也会存在稳定性的问题,但是总体效果是最符合上节中提到的所需要的4个特点,所以最终选择了uiautomator2。
除此之外,还考虑过自研手机端运行的框架,脚本在手机端运行,但是考虑到存在适配工作量大,测试过程不透明,稳定性差的问题,就没有继续。

详细实现

详细介绍基于uiautomator2,如何二次封装,思路,以及过程中遇到的坑,和不断改进的点。


从整体测试过程出发分析,主要分为三大流程,而每个大流程中又有许多需要考虑到的点。

  1. apk安装
    • 手机锁屏怎么办
    • apk安装过程中系统弹窗怎么处理
    • apk安装失败怎么办
    • ......
  2. 自动化脚本执行
    • 各类基础操作如何二次封装
    • 网络延迟怎么办
    • 未知弹窗如何处理
    • 截图时机如何把握
    • 操作失败怎么办
    • ......
  3. 测试结果收集
    • apk安装时间
    • apk安装失败信息
    • app启动时间
    • apk卸载时间
    • logcat
    • 测试过程截图
    • 测试过程视频
    • 黑白屏
    • 性能数据(CPU,内存,FPS)
    • debug版本app输出的调试log
    • ......
  4. apk卸载
    • 被测apk卸载
    • 测试过程中在线下载安装的apk卸载
    • ......

未完待续...