Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

时间:2023-12-31 08:28:08

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

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

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

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