http://www.csdn123.com/html/itweb/20130815/60106_60105_60108.htm
http://blog.csdn.net/robinzhou/article/details/6771120
http://www.dup2.org/node/1538
【说明】MonkeyRunner是Android提供的自动化测试工具,能够执行Python语言编写的脚本;Python脚本可以在文本编辑器中编辑,也可以用eclipse集成Python插件,实现在eclipse中编写Python脚本;在eclips中编写Python脚本的好处是能够使用eclipse中的函数提示功能,更方便;但是,eclipse中编写的python脚本是无法直接执行的,只能在命令行下执行,因为Android SDK并未提供windows环境下的解释器,如果在linux环境下是可以直接在eclips中运行脚本的
一、搭建步骤
<1>. 建立Python的开发环境;
这里使用的Python的开发环境是eclipse + pydev插件来配置python的开发环境,如果想要在命令行下使用python的话,需要设置计算机的环境变量。
1.1 下载Python的安装包.安装Python。
1.2 安装eclipse插件
查找该插件,并安装,注意安装过程中可能存在需要trust插件的情况,直接选择信任即可。
然后等待插件安装完成即可,重启eclipse,下面需要设置eclipse的pydev的插件的环境。
选择刚才python完成路径下的python.exe解释器。
最终完成之后的效果如下:
注:确认自己的jdk版本,最新的pydev需要jre7.低于这个版本请下载低版本http://sourceforge.net/projects/pydev/files/pydev/
下载2.82版本1.6可用
打开eclipse设置,window->preferences
新建一个lib目录,接着选择添加好的目录新添ddmlib.jar guavlib.jar monkeyrunner.jar sdklib.jar这几个jar包
新建一个python工程。
键入工程名,点击完成,将生成一个python project:
我们新建一个pythonmodule
可以开始代码编写了。
代码示例:
# 导入此程序所需的monkeyrunner模块
from com.android.monkeyrunnerimport MonkeyRunner, MonkeyDevice
# 连接当前设备,返回一个MonkeyDevice对象
device=MonkeyRunner.waitForConnection()
# 运行测试应用
device.startActivity (component='com.huawei.imax.launcher')
# 形成一个点击事件
device.touch(200,1800,'DOWN_AND_UP' )
# 截取屏幕截图
result = device.takeSnapShot
#将截图保存至文件
result.writeToFile('myproject/shot1.png' ,'png' )
通过monkeyrunner执行需要对应的环境,可以下载一个androidsdk;
打开cmd,切换至androidsdk的tools目录,执行命令
monkeyrunner 文件地址
二、异常处理
按照上述方法配置后,编写脚本可能会提示如下错误
Unresolved import: MonkeyDevice
Unresolved import: MonkeyRunner
这是因为,虽然在Preference——》java——》User Libraries中导入了ddmlib.jar guavlib.jar monkeyrunner.jar sdklib.jar这几个jar包,但是工程依然无法找到monkeyrunner.jar
解决方法,在External Libraries中继续加入上述jar包
三、脚本执行
1、windows环境下eclipse中是无法执行monkeyrunner脚本的,提示如下错误 Traceback (most recent call last):
File "D:\Mywork\HelloPython\src\test.py", line 2, in <module>
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
ImportError: No module named com.android.monkeyrunner
2、在命令行下执行monkeyrunner脚本,需要带上脚本的完整路径,即使在脚本所在目录
四、使用wrapEasyMonkey.jar
下载wrapEasyMonkey.jar,当前版本为2.0版本,直接复制到\adt-bundle-20131030\sdk\tools\lib目录下即可
在工程的-》properties-》PyDev-PYTHONPATH,选择External Libraries,导入wrapEasyMonkey.jar
五、修改warpEasyMonkey
参考:http://blog.csdn.net/testing_is_believing/article/details/16369639
def getChildView(self, parentId, *childSeq):
hierarchyViewer = self.device.getHierarchyViewer()
str_getchildview="hierarchyViewer.findViewById('" + parentId +"')"
for index in childSeq:
str_getchildview+=('.children[' + str(index) + ']')
exec 'child_view=' + str_getchildview
return child_view
拷贝到warpEasyMonkey.jar的warpEasyMonke.py文件末尾,并重新打包warpEasyMonkey.jar,替换掉\adt-bundle-20131030\sdk\tools\lib目录下的原jar包,clean工程,即可使用该函数,找到重复id
六、测试实践
#coding=utf-8 from com.whoistester.android.testimport import os,sys,re,string,locale,ViewClient,wrapEasyMonkey,MonkeyDevice,MonkeyRunner,EasyMonkeyDevice,By package = 'com.android.contacts' activity = '/com.android.contacts.activities.PeopleActivity' component = package + activity deviceId='04c***********' mydevice = wrapEasyMonkey(deviceId) mydevice.startActivity(component) MonkeyRunner.sleep(5) #清空联系人,初始状态下添加一个联系人 mydevice.touchViewById('id/create_contact_button',mydevice.DOWN_AND_UP) MonkeyRunner.sleep(2) mydevice.type("test1") mydevice.touchViewById('id/0xc', mydevice.DOWN_AND_UP) mydevice.type("company1") mydevice.touchViewById('id/add_text',mydevice.DOWN_AND_UP) MonkeyRunner.sleep(2) mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP) mydevice.touchViewById('id/0x16',mydevice.DOWN_AND_UP) mydevice.type("15311111001") mydevice.touchViewById('id/done',mydevice.DOWN_AND_UP) MonkeyRunner.sleep(2) mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP) #从联系人列表添加联系人 for i in range(2,10): name = "test"+str(i) company = "company"+str(i) num = str(15311111000+i) print "name="+name+"company="+company+"num="+num MonkeyRunner.sleep(5) mydevice.touchViewById('id/menu_add_contact', mydevice.DOWN_AND_UP) MonkeyRunner.sleep(2) mydevice.type(name) mydevice.touchViewById('id/0xc', mydevice.DOWN_AND_UP) mydevice.type(company) mydevice.touchViewById('id/add_text',mydevice.DOWN_AND_UP) MonkeyRunner.sleep(2) mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP) mydevice.touchViewById('id/0x16',mydevice.DOWN_AND_UP) mydevice.type(num) mydevice.touchViewById('id/done',mydevice.DOWN_AND_UP) MonkeyRunner.sleep(3) #添加完成后判断是否成功 if (cmp(mydevice.getTextById('id/action_bar_title'),name) == 0): print "####TestResult:save "+name+" success!!!" else: print "####TestResult:save "+name+" FAILED!!!" mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP)
结果将保存在log.txt文件中