使用Adt自带的工具进行Android自动化测试(二)

2015-06-04   出处: 搜狗测试  作/译者:ev

在这个系列的上一篇文章中,我们介绍了Monkey的用法,这篇文章将继续介绍Adt自带的另外一个自动化工具MonkeyRunner


MonkeyRunner和Monkey的关系

在这个系列的上一篇文章中,我们介绍了Monkey最常规的一种用法,即进行完全随机的测试(点击文末“阅读原文”可以打开这篇文章查看)。在这种情况下,Monkey会自己产生一些随机的操作指令给自己执行。但是如果想要按照一个特定的指令序列执行,就要借助MonkeyRunner。

MonkeyRunner是一个运行于PC端的程序,它可以把预先定义好的操作指令一条一条发送给Monkey,从而控制Monkey进行更加精确的自动化操作。
其实MonkeyRunner和Monkey的这种关系从名字就能看出来一些端倪。

MonkeyRunner的使用方法
MonkeyRunner发送给Monkey的操作指令是按照特定的协议编写的,这里我们不需要关心协议的具体内容,只需要使用Python编写自动化脚本,调用MonkeyRunner预先定义好的函数。需要说明的是,MonkeyRunner虽然使用到Python,但实际上并不需要安装Python的运行环境,就像前面提到的,使用这个系列介绍的工具进行Android自动化测试都不需要安装其它额外的工具。

在使用MonkeyRunner时,首先需要开启模拟器,或者通过USB连接真实的Android设备。
MonkeyRunner的可执行文件放在sdk的tools目录下,是一个命令行的工具。
你可以在任意位置用Python编写好脚本,再用MonkeyRunner来执行。而且这些脚本只能通过MonkeyRunner执行,不能像其它py文件一样直接通过Python执行。

比如在命令行输入:
D:\Adt\sdk\tools\monkeyrunner D:\sogouqa.py

下面这个脚本调起搜狗手机浏览器,打开菜单并截图,这个脚本示例可以用来检查搜狗手机浏览器的菜单是不是显示正常。



MonkeyRunner支持的功能总结

  • 物理按键操作

  • 屏幕操作(比如点击、长按、拖动)

  • 安装/卸载应用

  • 支持多设备/模拟器

  • 通过控件进行操作

  • 执行shell命令(比如可以直接删除文件)

  • 发送boardcast

  • 录制与回放功能


这里简单介绍一下录制与回放的功能,这个功能并没有一个单独的程序入口,我们同样需要在MonkeyRunner中运行一段脚本:

脚本执行完后就会出现录制与回放的界面:

就是这样一个简单的界面,点击左边的截图会记录一条点击动作,上面的那一排按钮可以增加一些其它的动作,比如延时或者键盘动作。
Export Actions可以保存录制的内容,但保存的并不是Python脚本文件,你同样需要编写另外一段脚本来回放这段录制,除此之外你也可以选择利用刚才录制时的坐标自己编写点击的操作。


使用坐标编写脚本的局限性

MonkeyRunner默认的屏幕操作都是根据绝对坐标,比如需要在刚才的脚本基础上进一步点击菜单上的设置功能,通过截图或者脚本录制工具,你已经知道了设置菜单项的坐标是(72, 684),这样就可以使用MonkeyDevice的touch方法来点击设置按钮:

device.touch(72, 684, "DOWN_AND_UP")

但是很不幸的,我们是用小米1编写的测试脚本,小米1S的分辨率是480×854,如果换成别的设备,分辨率可能会发生改变,设置按钮的位置就不再是(72, 684)。
好在很多情况下控件的位置和大小是按照屏幕的百分比计算的,比如说不管分辨率是多少,搜狗浏览器的设置都会出现在屏幕15%宽、80%高的地方。这样我们就可以根据相对坐标来编写自动化脚本:



还有的情况下,控件的位置和大小并不满足这个规律,比如搜狗浏览器的设置页面,在小米1和小米4两台不同的设备上,一屏能够显示的内容都不一样多,可以看出其中每个项目的相对坐标在这两台设备间很难统一。

最后,如果被测程序改版,对控件重新排序或布局,旧的自动化脚本也可能会失效。
为了解决这个问题,最好按照坐标以外的方式编写自动化脚本。本系列的第三篇文章将会介绍如何利用控件的id编写MonkeyRunner的自动化脚本。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
392° /3927 人阅读/0 条评论 发表评论

登录 后发表评论