----------------------------------------------------------------------------------------------------------------------------

小记: 一直都是用公司自己研发的自动化工具,对市面开源的自动化工具知之甚少,所以开始自学开源的自动化工具。

初步学习中,难免会有疏漏和想不到的地方,随着不断深入的了解,可能会觉得现在的笔记很可笑,不过有新的体会,我会及时修改,不断进步。

2014-10-13:初版

2014-10-14:更新模拟器实例和常用命令

2014-10-16:更新2个真机实例

2014-10-17:添加Q&A

2014-10-23: 更新两种编写monkeyrunner脚本的第三方插件,另开一篇文章:Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

------------------------------------------------------------------------------------------------------------------------------

下面来学习一下官方文档: (简介翻译来自网络)

一、什么是monkeyrunner

monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图 片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。

二、Monkey和MonkeyRunner

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

相比较之下,MonkeyRunner工具则是在工作站上通过API定义的特定命令和事件来控制设备或模拟器

三、MonkeyRunner的特色

  1. 多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

  2. 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。

  3. 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。

  4. 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除 了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。

四、Monkeyrunner运行环境

无论怎么运行,都需要调用 SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为 Python程序,并加以运行;否则,它将提供一个交互对话环境。

monkeyrunner的命令语法为:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

五、官网实例(网上的资料都没有提及,运行脚本之前,必须先把连接到电脑上或者启动模拟器)
官网的例子,不解释。

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection() # Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('myproject/bin/MyApplication.apk') # sets a variable with the package's internal name
package = 'com.example.android.myapplication' # sets a variable with the name of an Activity in the package
activity = 'com.example.android.myapplication.MainActivity' # sets the name of the component to start
runComponent = package + '/' + activity # Runs the component
device.startActivity(component=runComponent) # Presses the Menu button
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot
result = device.takeSnapshot() # Writes the screenshot to a file
result.writeToFile('myproject/shot1.png','png')

六、实例二(模拟器4.4.2测试通过):

步骤:截屏-->滑屏-->截屏
目的:学习截屏方法的使用

'''
Created on Oct 14, 2014 @author: deldong
'''
print 'Before execution' # Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner # Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection() # Takes a screenshot
result = device.takeSnapshot() # Writes the screenshot to a file
result.writeToFile('./beforeDrag.png','png')
#多嘴一句,这里的截图,其实是存放在..sdk/tools下面,找了1天有木有······
#当然这里也可以写绝对路径,比如c:\screenshot\beforeDrag.png #Drag screen from right to left
for i in range(0,3):
device.drag((600,200),(100,200),0.1,10)
MonkeyRunner.sleep(1) #Takes a screenshot
result = device.takeSnapshot()
#Writes the screenshot to a file
result.writeToFile('./afterDrag.png','png') print 'After execution'

七、实例三(诺基亚X2手机测试通过):

步骤安装APK-->打开APK-->关闭APK-->重复打开关闭操作N次-->卸载APK
目的
写个压力测试的脚本玩玩

'''
Created on Oct 16, 2014 @author: deldong
'''
# -*- coding: UTF-8 -*-
import sys#因为系统是英文系统,打汉字的话,必须用添加# -*- coding: UTF-8 -*-
reload(sys)
sys.setdefaultencoding("utf-8") # 导入所需的方法
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice #连接我的Nokia手机
print ("Connecting device.....")
NokiaDevice = MonkeyRunner.waitForConnection()
if not NokiaDevice:
print ("Please connect a device to start!")
else:
print ("Device Connected successfully!") #安装apk
try:
NokiaDevice.installPackage('C:/apps/MyFirstApp.apk')
print ("Package installed successfully! ")
except:
print ("Package installation failed!") #设置包名
package = 'com.example.myfirstapp' #设置activity名
activity = 'com.example.myfirstapp.MainActivity' #循环执行四次
for i in range(1,5):
#打开已安装的应用
print ("Open installed package for the %d time"%i)
NokiaDevice.startActivity(component=package + '/' + activity)
#等待5秒
print ("wait 5 sec")
MonkeyRunner.sleep(5)
#关闭应用
print("Quit the application")
NokiaDevice.press("KEYCODE_BACK",NokiaDevice.DOWN_AND_UP)
print ("wait 5 sec")
MonkeyRunner.sleep(5) #卸载APK
try:
print("Uninstall package!")
NokiaDevice.removePackage("com.example.myfirstapp")
print("Uninstall package successfully")
except:
print ("Package unintall failed!")

cmd提示:

aaarticlea/png;base64,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cmpicuvr1x5MH31t7YbXDi6O2fiLo/WD0LE8st754ODLGycmp558Jxz26Gtr55K5dvYXG5wIi7c+mL724PVn3FBuO/uLDXPDpLYQajjvB09ueO3gtbO/2LD19cVtEVfq3T1/wsIUjV1q5Na89eDLG9e+fHbuv74Bwa0L35ve/VzsOfjyxolnPgjuXsIs/kfdQvMEfDD9ztbF/fEOoNFoI2zP7n7r/I0Hh8/d9rZVq9ddDVu1el3oxAs3Hjy7+63hFBduPFiolM0WnSJ04vnaFHMl+diFu0cv3D1Wa0cv3D124c7W3fvqs9SPq08+eyj8v+R6hZ472Lln7yefPVxs72yb2PDa+4s953ZsmHrqnYeffPbBU5NzBw/ff3njxOTGHcfmOucOQsfuQahzPvLal88Fww5zO/baWn/Y+Qw/Ofba2sltr4dOb6x3eNZnDz859tqOd5yRx15b+8wHixlumEvy4fsvb3zqmW1zx4qVenfPTViYorFLzdyatx57be2GbU9tWLLD4U2eWjpL9J51HjDe7V2S4bkdG6yzyI86b9rbXp//r3cAjUYbaXt291uXbj46trSSDduq1esuhq1avS504qWbj57d/daIpzh+afb4pc+PX/z840ufH784e/zi7MeXZj++NFufYtXqddte2DfsqWauP7L+xfXM9UfD9vufTq399bl6zwe//snET/86c/3RzDvb5p43r/31609N/mTHsUcz1/+6cBA6dg98nQuRJya3/X4hjYnJqYmf/nXpied2bJiamJya2LDtqQ3znbWRj2aOvb52Po4vq3e2TWx4/YPa0ubb4llT8wOaI8/tWJhu5tjrayd9x5GVenfPm3B4CmeXluTmu/X3P13YGd/pga1zt909XrgjFqPVe6YmJqeeese3e9f/+tSSAdHHT+xRtyTt13dsmH/0fvDrn8zfg811Ofc+jUbrsj2358Clm4+OXfjc27bu2Sf8v+Ste/aFTrx089Fzew6MeIoTn96rtdkTn86e+PTex5/e2/7C/mHAbS/sP1Hrqc7c+MJaks/c+IIWaf+2fe2vz/efhjG3//3Tqaf+re/0Ct89Go3WZXtuz4HLt7888en9vO3y7S+f23NgxFOcvHx/oT2oHd8/efn+qSU9D+YHXLlfnb35pfUzrs/e/JK2AtvHv1+74fd/6z0NGo02xm3LC3+8cvfr01cf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" alt="" width="624" height="380" />

八、实例四(诺基亚X2手机测试通过):

步骤重启手机-->唤醒手机-->输入密码解锁
目的
使用重启和唤醒的方法

# -*- coding: UTF-8 -*-
'''
Created on Oct 16, 2014 @author: deldong
'''
import sys
reload(sys)
sys.setdefaultencoding("utf-8") # 导入所需的方法
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice #连接我的Nokia手机
print ("Connecting device.....")
NokiaDevice = MonkeyRunner.waitForConnection()
if not NokiaDevice:
print ("Please connect a device to start!")
else:
print ("Device Connected successfully!") #重启设备
print("Reboot device!")
NokiaDevice.reboot()
MonkeyRunner.sleep(60) #唤醒设备
print("Wake device")
NokiaDevice.wake()
print("wait 2s")
MonkeyRunner.sleep(2) #解锁 输入密码
print("unlock device....")
NokiaDevice.drag((400,700),(400,300),0.1,10)
MonkeyRunner.sleep(5)
NokiaDevice.type('')
print("unlock successfully")

Q&A:

Q:在cmd中执行monkeyrunner c:\test.py脚本时报错
提示:141017 14:35:59.101:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]SyntaxError: Non-ASCII character in file 'C:\calculator.py', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
解决办法:在脚本的第一行添加中文的注释语句代码:# -*- coding: UTF-8 -*-
如果还不行的话,多添加下面三行代码即可。

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

九、常用命令:

1.安装Android包,此方法返回的返回值为boolean,由此可以判断安装过程是否正常
device.installPackage('文件名')
#参数是相对或绝对APK路径
路径级别用“/”,不能用“\”,比如d:\www\a.apk,而应该写成d:/www/a.apk
安装成功返回true,此时查看模拟器我们可以看到安装的APK的图标了。

2.从设备中删除指定的软件包,此方法返回的返回值为boolean,删除其相关的数据和调整缓存
device.removePackage ('包名')

3.启动一个Activity,两种方式
device.startActivity (component='包名/包名.Activity名')
device.startActivity (component='包名/.Activity名')

4.暂停(秒);
MonkeyRunner.sleep(5)

5.截图
result=device.takeSnapshot()
#此方法返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到文件
#result.writeToFile('takeSnapshot\\result1.png','png')
#MonkeyImage.writeToFile(参数1:输出文件名,也可以包括路径,参数2:目标格式)
#写成功返回true,否则返回false。
6.触击屏幕

在指定位置发送触摸事件(x,y的单位为像素)

device.touch(x,y,TouchPressType-触摸事件类型)
device.touch(100,100,"DOWN_AND_UP")

发送到指定键的一个关键事件
device.press(参数1:键码,参数2:触摸事件类型)
参数1:见android.view.KeyEvent URL:http://developer.android.com/reference/android/view/KeyEvent.html
参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。
a、DOWN 发送一个DOWN事件。指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。
b、UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。
c、DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件。对应于输入键或点击屏幕。

7.发送按键指令
按下HOME键 device.press('KEYCODE_HOME','DOWN_AND_UP')
按下BACK键 device.press('KEYCODE_BACK','DOWN_AND_UP')
按下下导航键 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
按下上导航键 device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')
按下OK键 device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')

相应的按键对应的名称如下:

home键:KEYCODE_HOME
back键:KEYCODE_BACK
send键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
menu键:KEYCODE_MENU

八、参考资料:

Google官方文档:
http://developer.android.com/tools/help/monkeyrunner_concepts.html

网络资料:
http://www.cnblogs.com/yyangblog/archive/2011/03/10/1980086.html
http://blog.csdn.net/shy871265996/article/details/9716723

Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例的更多相关文章

  1. Android自动化学习笔记之MonkeyRunner:MonkeyRunner的录制和回放

    ---------------------------------------------------------------------------------------------------- ...

  2. Android自动化学习笔记之MonkeyRunner:MonkeyRunner环境搭建

    ---------------------------------------------------------------------------------------------------- ...

  3. Android自动化学习笔记之MonkeyRunner:用Eclipse执行MonkeyRunner脚本

    Info: 初步学习,难免会有疏漏,以后我会不断修改补全,直到完美.转载请注明出处,谢谢. 2014-10-11: 初版 2014-10-16: 完善 ------------------------ ...

  4. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  5. Android自动化学习笔记之Robotium:学习官网实例

    ---------------------------------------------------------------------------------------------------- ...

  6. Android自动化学习笔记:获取APK包名的几种方法

    ---------------------------------------------------------------------------------------------------- ...

  7. android菜鸟学习笔记13----Android控件(二) 自定义控件简单示例

    有时候,可能觉得系统提供的控件太丑,就会需要自定义控件来实现自己想要的效果. 以下主要参考<第一行代码> 1.自定义一个标题栏: 系统自带的标题栏很丑,且没什么大的作用,所以我们之前会在o ...

  8. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  9. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

随机推荐

  1. 【转载】App.config/Web.config 中特殊字符的处理

    写一个网站,遇到一个问题,发布以后,提示错误,但是即使打开错误提示(在web.config中打开),还是只提示错误,没提示什么地方错误,这让我知道了:是webconfig本身的错误,经过排除,是链接字 ...

  2. mysql 与 mycat集成读写分离

    1,先说下同步数据库原理,其实很简单.就是在主库做数据库操作的时候,会生成一个本地日志,日志会在my.ini当中配置看图一,读库会实时去扫描日志,如果有更新就直接在读库执行. 这个是主库my.ini配 ...

  3. 自执行函数与setTimeout结合计算

    var v1=0,v2=0,v3=0;        for(var i=1;i<=3;i++){            var i2=i;            (function(){   ...

  4. 关于js代码中与或运算符||&&的妙用

    看bootstrap时看到如下一行JavaScript代码产生了疑惑. return window.pageYOffset || e.scrollTop ||在这里的作用是什么呢? 首先明确概念,在j ...

  5. 链表c++实现一

    #include <iostream>using namespace std; typedef char nodeEntry; struct Node{ //数据成员 nodeEntry ...

  6. uva 12169

    /* 巨大的斐波那契数列_________________________________________________________________________________ #inclu ...

  7. Ecstore会员密码加密方式破解

    <?php //以下是加密方式,亲测有效 $string_md5 = md5(md5("密码")."用户名"."注册时间");//三个 ...

  8. (转) The major advancements in Deep Learning in 2016

    The major advancements in Deep Learning in 2016 Pablo Tue, Dec 6, 2016 in MACHINE LEARNING DEEP LEAR ...

  9. 山东省滕州市木石镇化石沟村QQ群116528924

    山东省滕州市木石镇化石沟村QQ群116528924

  10. BackgroundWorker学习

    后台代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...