Android应用自动化测试——理论、工具和实践(上)

发表于:2012-8-30 11:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:anthony.wang    来源:51Testing软件测试博客

  设备是否需要Root

  如果只是为了识别图像或浅层对象,如文本或坐标,测试工具不需要Root权限就可以办到。但是对于一些深层次的对象属性,如可见性、宽度、滚动属性等,恐怕就要获得系统Root权限才能截获。然而,是否有办法可以绕过系统Root权限就能捕捉深层对象属性呢?毕竟,出于各种原因的考虑,Root机的动作不是所有测试人员都愿意做的。安卓系统的设计中规定,两个应用之间是互相独立的,双方各不干涉。不过,如果双方都具备相同的签名,则可互相通信。如此看来,签名就像一把钥匙,打开之后,测试工具就可以与被测应用通信了。

  被测apk的签名与扰码

  如果用签名的办法来获取对象,就有可能会引入另一个问题:对被测应用的反编译。毕竟,不是所有测试人员都能很容易的拿到代码编译一个测试版本。很多时候,是开发团队打包一个apk交予测试人员进行测试的。所以,要是测试工具与被测应用获得相同的签名,必须先经过反编译之后,设置相同的一个临时签名,再重新进行编译和打包。这样又会引入另一个问题:如果最初的apk加入了扰码,导致无法正确反编译怎么办?就像签名一样,扰码也是一种保护Android APK的手段之一。遇到这种情况,似乎只能联系开发团队去掉扰码了。

  上述两点是因为要抓取被测应用对象而引入的问题。当然,对于界面对象属性要求不高的话,也可以直接截取屏幕图片作为对象,这是这样做,就只能通过图像对比的方式来识别对象了。接下来,我们来看看市面上一些现有工具的做法。

  工具

  目前市面上的安卓测试工具主要分为三种类型:

  ● 通过界面图像的对比识别对象–这类工具的代表是以色列的PerfectoMobile.com。这是一款纯Web操作方式的工具,可以支持测试脚本跨平台执行;

  ● 通过在源码级识别对象–这类工具的代表是芬兰的TestDroid.com。它是以Eclipse Plug-in的方式工作,可以将录制的操作步骤生成Robotium或MonkeyRunner脚本;

  ● 通过数字签名识别对象–这类工具的代表是DroidPilot.com。它可以说是高度模仿HP QTP的操作方式,对于自动化测试工程师来说,也许会有似曾相识的感觉;

  接下来,我们准备从以下几个方面剖析这三类工具对于关键字驱动自动化测试的支持:

  1)与被测apk的通信–捕获对象、控制行为

  2)脚本编辑器–构建测试脚本、解析测试脚本

  3)并发控制多台设备–脚本一次编译,可跨设备执行

  4)与其它测试工具的整合–测试用例管理、缺陷跟踪

  1、与被测apk的通信–捕获对象、控制行为

  首先来看PerfectoMobile。这款工具是纯Web操作方式。它对应用程序界面对象的识别是通过图像对比来判断,所以严格来讲,这并不能称之为“对象”。但不得不承认,这种做法使得跨平台(iOS, Android, Blackberry…)的对象识别成为可能。同样道理,即是从图像来识别对象,也是通过图像来操作对象。当对象库中的该图像在当前屏幕的对比匹配率达到一定程度,即可认为找到了该对象,从而也就可以对相应区域进行点击、滑动等操作了。

  另一种是TestDroid的做法,直接从代码级截获对象。在Eclipse开发工具装上TestDroid插件,直接点击录制按钮,即可启动被测应用。所录的操作步骤,可以生成Robotium或MonkeyRunner脚本(注:Robotium和MonkeyRunner是Android平台最流行的两款开源测试工具)。这种直接在代码级操作的做法,尽管能毫无阻拦的拿到任何想要的对象信息,但是也有几点待商榷之处:

  1)对于测试工程师直接来到代码级进行操作,从代码安全性考虑,这并不是对于所有企业都可行;

  2)这种做法仅限于Android应用,不能做到像图片识别那样跨平台。当然,对于iOS引用来说,是否需要花力气去做自动化测试,还是可以商议的,毕竟它的设备种类不太多,省去了许多兼容性测试的成本。

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • 夏末初秋
    2012-12-31 15:27:44

    签名相同的apk可以互相通信?可以详细点吗

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号