使用Adt自带的工具进行Android自动化测试(二)
2015-06-03 10:09
387 查看
在这个系列的上一篇文章中,我们介绍了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的自动化脚本。
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的自动化脚本。
相关文章推荐
- android图片缓存策略
- Android设计模式(二)--策略模式
- Android应用程序资源的查找过程分析
- Android个人笔记 - Google Android揭秘_第二章
- 脚本ANT自动打包Android应用(方便多渠道发布)
- Android4.0 开放Root权限
- 关于android旋转屏幕时activity重建和android 转屏 onConfigurationChanged 不会执行的问题
- 开放Android root权限
- android常用的命令
- Android NFC基础开发教程
- android studio加载动态库
- Android listview addHeaderView和addFooterView详解
- Android圆角边框
- android studio导入外部项目或类库的方法
- "Selenium for Android"的Robotium 一 概述
- 【转载】Android中attr自定义标签详解
- Android学习 - ant批量打包
- android开发用户和密码登陆
- Android px、dp和sp单位区别
- Android 向ListView里动态添加内容