- MonKey:
- Monkey是Android平台自动化测试的一种手段,通过 Monkey程序模式用户触摸屏幕、滑动、按键等操作对设备上的程序进行压力测试,检测程序多久的时间会发生异常
- Monkey测试是一种测试Android软件稳定性、健壮性的快速而有效的方法
- Monkey程序为Android系统自带,用Java语言实现。在Android文件系统中的存放路径是:system/framework/monkey.jar
在cmd中输入
adb shell
cd system/bin
ls 可以看到monkey
cat monkey
结果:
shell@klte:/system/bin $ cat monkey
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
exec app_process $base/bin com.android.commands.monkey.Monkey $*
- Monkey.jar由Monkey命令来启动执行:
在命令窗口执行:
adb shell monkey -help
可以查看命令参数
- 尝试使用命令:
adb shell monkey -p com.android.calculator2 -v 100 向指定的包发送100个伪随机事件
-
MonkeyRunner:
- MonkeyRunner工具提供了一个API,使用此API写的程序可以在Android系统之外控制Android设备或者模拟器
- 通过MonkeyRunner可以使用Python程序去安装一个Android程序或者应用包、
- 具体位置在sdk文件下的tools子目录下
-
特性:
- 多设备控制
- 功能测试
- 回归测试
- 可扩展:利用python扩展
-
Monkey和MonkeyRunner两者区别:
Monkey:运行于设备或者模拟器之上,生成各种操作的伪随机事件流
MonkeyRunner: 运行于 PC端,通过python可以扩展
- MonkeyRunner使用:
-
如果没有配置环境变量,就在cmd中直接到sdk\tools\bin文件下执行monkeyrunner命令,结果如下图:
-
可能遇到问题:
- SWT folder ‘…\framework\x86_64’ does not exist. Please set ANDROID_SWT to point to the folder conta
- 意思是:SWT文件夹“…\framework\x86_”不存在。请将android_swt设置为指向包含swt.jar的平台文件夹。
- 解决方案:
- 将MonkeyRunner文件使用记事本打开,修改下面部分:
-
请将android_swt设置为指向包含swt.jar的平台文件夹。
if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=lib
以及最后一行:
call "%java_exe%" -Xmx512m "-Djava.ext.dirs=%frameworkdir%;%swt_path%" -
Dcom.android.monkeyrunner.bindir=..\framework -jar %jarpath% %*
分别改为:
if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=..\lib
和:
call "%java_exe%" -Xmx512m "-Djava.ext.dirs=%frameworkdir%;%swt_path%" -Dcom.android.monkeyrunner.bindir=..\..\platform-tools -jar %jarpath% %*
- 通过 aapt获取包名:
- 在\sdk\build-tools\x.x.x下执行:
aapt dump badging path\name.apk > path/log.txt
* 在log.txt文件中查看即可
- 上面的操作完成之后,再次输入MonkeyRunner,示例代码:
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
device = MonkeyRunner.waitForConnection()
device.reboot("None")
Android设备或者虚拟机重启
- 示例(来自官方):
# 导入此程序使用的MonkeyRunner模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection()
# 安装Android软件包。请注意,此方法返回一个布尔值,因此可以测试以查看安装是否有效。
device.installPackage('myproject/bin/MyApplication.apk')
# 使用包的内部名称设置变量
package = 'com.example.android.myapplication'
# 使用包中活动的名称设置变量
activity = 'com.example.android.myapplication.MainActivity'
# 设置要启动的组件的名称
runComponent = package + '/' + activity
# 运行组件
device.startActivity(component=runComponent)
# 按下菜单按钮
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
# 截图
result = device.takeSnapshot()
# 将截图写入文件
result.writeToFile('myproject/shot1.png','png')