Android monkey和monkeyrunner测试
monkey测试
monkey是一个可以模拟用户操作的一个命令行的工具。它将用户事件的伪随机流发送到系统中,一般用于软件的压力测试。
在Android系统中提供了monkey.py的文件,我们可以直接通过adb命令操作,执行monkey。
例如:
# 向指定的应用程序发送1000个伪随机事件,packag_name指包名,1000是1000个伪随机事件
$ adb shell monkey -p package_name -v 1000
下图是执行10个伪随机事件的截图:图中有seed值,事件的百分比,事件的百分比可以通过命令选项调整。
命令选项参考:
-s <seed>
:如果以相同的seed执行,会生成相同的事件序列。
$ adb shell monkey -p package_name -s seed_number -v 1000
--throttle <millseconds>
:在事件之间插入固定的延迟,减慢monkey的执行速度。
# 每个时间之间延迟100毫秒
$ adb shell monkey -p package_name --throttle 100 -v 1000
--pct-touch <percent>
:调整触摸事件的百分比
# 调整触摸事件为30%
$ adb shell monkey -p package_name ---pct-touch 30 -v 1000
--pct-motion <percent>
:调整运动事件的百分比
# 调整运动事件为30%
$ adb shell monkey -p package_name ---pct-motion 30 -v 1000
--pct-trackball <percent>
:调整轨迹球事件的百分比
# 调整轨迹球事件为30%
$ adb shell monkey -p package_name ---pct-trackball 30 -v 1000
--pct-nav <percent>
:调整“基本”导航事件的百分比
# 调整“基本”导航事件为30%
$ adb shell monkey -p package_name ---pct-nav 30 -v 1000
--pct-majornav <percent>
:调整“主要”导航事件的百分比
# 调整“主要”导航事件为30%
$ adb shell monkey -p package_name ---pct-majornav 30 -v 1000
--pct-syskeys <percent>
:调整“系统”关键事件的百分比
# 调整“系统”关键事件为30%
$ adb shell monkey -p package_name ---pct-syskeys 30 -v 1000
--pct-appswitch <percent>
:调整activity启动的百分比
# 调整activity启动为30%
$ adb shell monkey -p package_name ---pct-appswitch 30 -v 1000
--pct-anyevent <percent>
:调整其他类型事件的百分比。
# 调整其他类型事件为30%
$ adb shell monkey -p package_name ---pct-anyevent 30 -v 1000
monkey的命令可选项还有关于调试的,这里不做赘述,参考下面官方文档
monkeyrunner测试
monkeyrunner是一个android提供的一个工具,在sdk目录下的tools目录下的monkeyrunner.bat文件(windows版本)。
Monkeyrunner工具通过从API发送特定的命令和事件来控制来自工作站的设备和仿真器。
来看一个简单的monkeyrunner例子:
1.在Androidsdk的目录下的tools目录下创建一个test.py文件,文件内容:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
# 连接设备,获取MonKeyDevice对象
device = MonkeyRunner.waitForConnection()
# 跳转到MainActivity
device.startActivity(component = 'com.yiba.sharewe.lite.activity/.MainActivity')
# 触摸事件,参数1,2表示x,y像素值,参数3:表示触摸操作
device.touch(300,1000,'DOWN_AND_UP')
# 截图
iamge = device.takeSnapshot()
# 图片写入F盘
iamge.writeToFile('F:\image2.png','png')
# 输出log信息
log = open('F:\monkenyLog.txt', 'w')
log.write("monkeyrunner test over...\n")
log.close()
2.执行test.py文件,如果没有配置monkeyrunner的环境变量,需要到Androidsdk目录下的tools目录下执行。test.py文件也放在这个目录下。
$ monkeyrunner test.py
常用的MonkeyRunner API
- MonkeyRunner
# 获取连接设备
device = MonkeyRunner.waitForConnection()
或者
device = MonkeyRunner.waitForConnection(float timeout , string deviceid)
# 当前程序暂停多少秒
MonkeyRunner.sleep(float second)
- MonkeyDevice
# 安装应用,参数是应用所在的路径,如:F:/test.apk
device.installPackage(string path)
# 卸载应用,参数是应用包名,如:com.example.test
device.removePackage(string package)
# 启动应用
package = 'com.example.android.myapplication'
activity = 'com.example.android.myapplication.MainActivity'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)
# 触摸事件,参数1,2表示屏幕x,y的值,参数3表示触摸事件类型(DOWN,UP,DOWN_AND_UP)
device.touch(integer x,integer y,integer type)
# 按下事件,参数1表示key event事件名称,如:KEYCODE_BACK(返回键),参数2表示事件类型(DOWN,UP,DOWN_AND_UP)
device.press(string name,string type)
# 拖拽事件,参数1和2表示触摸开始和结束的位置,参数3表示拖拽的时间,参数4表示步数
device.drag(tuple start , tuple end , float druation , integer steps)
eg:
device.drag((550,500),(100,500), 0.5, 1)
# 截图,返回的对象是MonkeyImage
iamge = device.takeSnapshot()
iamge.writeToFile('F:\image.png','png')
- MonkeyImage
# 读取到文件,参数1表示存储路径,参数2表示图片格式
image.writeToFile(string path,string format)
# 比较图片百分之多少相似,返回值boolean
image.sameAs(MonkeyImage other,float percent)