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。

Windows 环境搭建:首先,从 Python 的官方网站 www.python.org 下载最新的版本,安装好之后把你的安装目录添加至环境变量 path 中。

1.2 安装eclipse插件

查找该插件,并安装,注意安装过程中可能存在需要trust插件的情况,直接选择信任即可。

然后等待插件安装完成即可,重启eclipse,下面需要设置eclipse的pydev的插件的环境。


选择刚才python完成路径下的python.exe解释器。

最终完成之后的效果如下:


注:确认自己的jdk版本,最新的pydev需要jre7.低于这个版本请下载低版本http://sourceforge.net/projects/pydev/files/pydev/
下载2.82版本1.6可用

<2>导入monkeyrunner相关的jar

打开eclipse设置,window->preferences

新建一个lib目录,接着选择添加好的目录新添ddmlib.jar guavlib.jar monkeyrunner.jar sdklib.jar这几个jar

<3>.monkeyrunner工程

新建一个python工程。

键入工程名,点击完成,将生成一个python project

我们新建一个pythonmodule


可以开始代码编写了。

代码示例:

#导入此程序所需的monkeyrunner模块

from com.android.monkeyrunnerimport MonkeyRunnerMonkeyDevice

#连接当前设备,返回一个MonkeyDevice对象

device=MonkeyRunner.waitForConnection()

#运行测试应用

device.startActivitycomponent='com.huawei.imax.launcher'

#形成一个点击事件

device.touch200,1800,'DOWN_AND_UP'

#截取屏幕截图

result = device.takeSnapShot

#将截图保存至文件

result.writeToFile'myproject/shot1.png''png'

<4>执行脚本

通过monkeyrunner执行需要对应的环境,可以下载一个androidsdk;

打开cmd,切换至androidsdk的tools目录,执行命令

monkeyrunner 文件地址

二、异常处理

按照上述方法配置后,编写脚本可能会提示如下错误

Unresolvedimport:MonkeyDevice
Unresolvedimport:MonkeyRunner

这是因为,虽然在Preference——》java——》User Libraries中导入了ddmlib.jar guavlib.jarmonkeyrunner.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

Android自动化测试之Monkeyrunner解决ID重复问题

将核心代码

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-8from com.whoistester.android.testimport import os,sys,re,string,locale,ViewClient,wrapEasyMonkey,MonkeyDevice,MonkeyRunner,EasyMonkeyDevice,Bypackage = 'com.android.contacts'activity = '/com.android.contacts.activities.PeopleActivity'component = package + activitydeviceId='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文件中


更多相关文章

  1. 【Android(安卓)Native Code开发系列】三 Android源码的编译环境
  2. Windows下载Android全部源码
  3. Windows下Qt 5.6.3 for Android开发环境搭建
  4. Android配置
  5. iPhone app 和android app开发环境和语言的区别
  6. Connection to https://dl-ssl.google.com refused
  7. Android程序开发的环境配置
  8. Error:Could not find com.android.tools.build:gradle:2.3.3.
  9. Ubuntu 12.10 搭建 Eclipse Android(安卓)开发环境

随机推荐

  1. Emacs中的Python 2和3都是如此
  2. Python测试函数和类 笨方法学习Python
  3. python将回车作为输入内容
  4. 读取python中的unicode文件,该文件以与pyt
  5. NMF算法简介及python实现(gradient desce
  6. 凡哥带你玩转OpenCV-预备知识
  7. Impala实践之六:使用Rest Api
  8. 【python之路45】tornado的用法 (三)
  9. 建模分析之机器学习算法(附python&R代码)
  10. Python新式类和经典类的区别