想起一年前,公司做自动化测试还借助老美的工具,叫做 “CountDown”,这个工具坦白说,是很强大的,之前中国移动做认证的自动化测试也用这个工具,虽然现在已被舍弃。这个工具的精髓却仍然值得深入学习,细细体味的,自觉中其"毒"颇深矣。但它也有它的不良之处,我们当时使用的是 3.5 的版本,不知其后如何。那当时是存在一个比较重大的缺陷的,因其主要原理是对比图片,导致不同屏幕大小的设备,几乎无法重用已设计好的用例。每来新案子,自是苦不堪言。因了这,公司也在想着如何提高效率,自己在网上也找新的自动化测试工具。那会儿我主要知道有 UiAutomator 和 robotium,稍作了解了以后,便选择了 UiAutomator。

作为一个安卓整机测试工程师,我不用 robotium 的理由是:

  1. 跨应用交互功能较弱,而我们有很多交互的自动化测试用例;
  2. 需要重新签名应用,我做整机测试,是几十个应用需要测试,在现在敏捷开发正流行的当下,两周左右即出一新版本,我需要对它们都重新签名,额,想想都觉着累。(那现 在想想,却也并非完全如此,我们可以通过 md5 值,来对比应用在设备前一版与后一版有无更新,只要针对有更新的应用重新签名即可,这个可以减少任务,同时亦可将测试重点放在那些有更新的应用上,可谓一举双得)。

对比之下,UiAutomator 就比较适合做整机的测试,

  1. 跨应用很容易;
  2. 不需要重新签名;
  3. 新版本出来以后,用例重用率高,同一应用,不同屏幕大小的设备亦可重用。

当我掌握了 UiAutomator 的时候,听说 Appium,既可做安卓,亦可做 iOS,也想学着来。另一原因是想用它来做一些网页的自动化,因为 UiAutomator 本身对一些网页上的控件,查不到它的属性,据查 Appium 是可以的,便想学着来试试。在安卓上搞了一条用例后,便弃之不用了,不想用这个,着实不便。

  1. 需要连着 usb 线,或局域网,万一我跑到开关 WiFi 的用例,咋整?我这边执行 UiAutomator 全用 shell,跑起来以后,都是连着 AC charge(AC 就是充电头) 的,不需要开着一台电脑陪着手机一直运行着,从节能角度来说,一年下来,却也是要省不少钱哩(虽然咱大公司,不差钱);
  2. 用例中有诸多设置,限制了设备 ID,平台 ID 等等,换台手机跑?我要写了 800 条,难道一条一条更新?

接着说说,为什么是 UiAutomator 与 shell 结合?

其实,我们做自动化黑盒测试,我们最主要的目的是什么呢?

  1. 节省资源,这资源又分为:人力资源,物质资源(比如我们现在测试的智能手机,据说其运算能力,已超六,七十年代,老外将卫星送上天所用的那些个计算机了,其本身已够强大,却还要一台 pc 陪跑,我感觉就挺事儿的,虽然有时是技术要求或限制啦)
  2. 保证产品稳定性,发现问题。这个是自然的事,不消多说的。

围绕这两个主要的目的,那工具的选择上面,自然是越简单实用,效率越高越好。无论是 UiAutomator,还是 Appium 或其他什么工具,在最后的最后,都是要来那一下子,点击嘛,不操作哪里有什么测试可言?点击的啥呢?还不是坐标?而我们拿到了这个控件的坐标后,只消点击对应的坐标即可。哪个工具速度快,通用性好,才是首选。从这点来说,以上的工具各有利弊。我们使用 uiautomator dump 来获取 xml 档,从 xml 档中过滤出控件的坐标值来,使用 shell 脚本来执行,速度是非常快的。这个比 UiAutomator 本身要快的多。快多少?这点需要具体的用例来说明了,这是后话。

最后,再次申明,小可是做整机测试的,如若做单个应用,或许会选择不同的自动化测试工具。

以上全属小可的乱弹琴,感谢各位!


↙↙↙阅读原文可查看相关链接,并与作者交流