monkey&monkeyrunner学习笔记

一、monkey简介

monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),
实现对应用程序进行压力测试。

  1. monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar

  2. monkey.jar程序是由一个名为“monkey”的shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

  3. monkey命令启动方式:
    可以通过PC机CMD窗口中执行: adb shell monkey +monkey命令行选项

  4. monkey命令行选项
    -v
    用于指定反馈信息级别,总共分3个级别:
    level 0:adb shell monkey -p com.tencent.android.qqdownloader -v 100
    level 1:adb shell monkey -p com.tencent.android.qqdownloader -v -v 100
    level 2:adb shell monkey -p com.tencent.android.qqdownloader -v -v -v 100
    -s(随机种子数)
    用于指定伪随机数生成器的seed值,如果seed相同,则两次monkey测试所产生的事件序列也相同
    adb shell monkey -p com.tencent.android.qqdownloader -s 10 100
    –throttle(毫秒)
    用于指定用户操作间的延时,如果不指定这个参数,monkey会尽可能快地生成和发送消息
    adb shell monkey -p com.tencent.android.qqdownloader –throttle 3000 100
    -p(允许的包名列表)
    用于指定一个或多个包。如果不指定包,monkey将允许系统启动设备中的所有app
    指定一个包 adb shell monkey -p com.tencent.android.qqdownloader 100
    指定多个包 adb shell monkey -p com.tencent.mtt -p com.tencent.android.qqdownloader 100

二、monkeyrunner简介

monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,也可以编写一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截图等。

  1. monkeyrunner API
    MonkeyRunner:此类提供了用于连接monkeyrunner和设备或模拟器的方法,还提供了为monkeyrunner脚本创建UI界面的一些函数
    MonkeyDevice:代表一个设备或模拟器。此类为安装和卸载、开启activity、发送按键和触摸事件、运行测试包等提供了方法
    MonkeyImage:此类提供了捕捉屏幕的方法,还提供了为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件

  2. monkeyrunner测试脚本格式

加载monkeyrunner 基础模块
from com.android.monkeyrunner import MonkeyRunner as mr(重命名)
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi

等待连接设备,与模拟器连接,返回monkeydevice对象,代表连接的设备
参数一:超时时间,单位秒,浮点数。默认是无限地等待
参数二:设备名称。默认为当前设备

device=mr.waitForConnection()
device=mr.waitForConnection(2.0,’J7AIFAQW5LYPMFQ4’)

参数是apk的相对路径或绝对路径,路径级别用/

device.installPackage()

参数包名

device.removePackage()

设置要启动的活动类名,有包名和活劢类型组成,启动activity

device.startActivity(component=”“)

执行adb shell命令
模拟返回键

device.shell(“input keyevent 4”)

截图,返回一个MonkeyImage对象

result=device.takeSnapshot()

保存在SDK的tools目录下

result.writeToFile(‘./shot1.png’,’png’)

字符串发送到键盘

device.type(“字符串”)

唤醒设备

device.wake()

重启设备

device.reboot()

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

device.touch(x,y,触摸事件类型)

发送到指定键的一个关键事件

device.press(键码,触摸事件类型)

键名
KEYCODE_CALL 拨号键5
KEYCODE_ENDCALL 挂机键6
KEYCODE_HOME 按键Home3
KEYCODE_MENU 菜单键82
KEYCODE_BACK 返回键4
KEYCODE_SEARCH 搜索键84
KEYCODE_CAMERA 拍照键27
KEYCODE_FOCUS 拍照对焦键80
KEYCODE_POWER 电源键26
KEYCODE_NOTIFICATION 通知键83
KEYCODE_MUTE 话筒静音键91
KEYCODE_VOLUME_MUTE 扬声器静音键164
KEYCODE_VOLUME_UP 音量增加键24
KEYCODE_VOLUME_DOWN 音量减小键25
KEYCODE_ENTER 回车键66

触摸事件类型
DOWN 发送一个DOWN事件
UP 发送一个UP事件
DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件

实例

import sys  
import os  
from com.android.monkeyrunner import MonkeyRunner as mr  
from com.android.monkeyrunner import MonkeyDevice as md  
from com.android.monkeyrunner import MonkeyImage as mi  

device = mr.waitForConnection()  
if not device:  
print >sys.stderr,"fail"  
sys.exit(1)  

device.installPackage("E:/com.tencent.android.qqdownloader.apk")  
mr.sleep(10)   

componentName="com.tencent.android.qqdownloader/com.tencent.assistant.activity.MainActivity"  
device.startActivity(component=componentName)  
mr.sleep(5)  

device.touch(360,1260,device.DOWN_AND_UP)  
mr.sleep(3)  

result0 = device.takeSnapshot()  
result0.writeToFile(r'E:\2029620.png','png')  
mr.sleep(3)  

device.shell("input keyevent 4")  
mr.sleep(1)  

device.press("KEYCODE_BACK",device.DOWN_AND_UP)  
mr.sleep(5)  

device.removePackage('com.tencent.android.qqdownloader')  
mr.sleep(5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值