Monkey简介
什么是monkey
Monkey是发送伪随机用户事件的工具流(如按键输入、触摸屏输入、手势输入等),通过它来实现对正在开发的应用程序进行压力测试
Monkey在哪里
每一台android手机里面都有Monkey工具,但是我们是看不到的,因为它不是一个可视化的工具。它不像wechat是可视化的,能打开,能执行用户操作,有图形界面,Monkey没有。
如何与monkey进行通信
借助ADB(Android Debug Bridge),安卓调试桥
环境搭建
安装jdk并配置环境变量
官网下载jdk,配置环境变量,参考:https://www.cnblogs.com/peng-zhang/p/9927389.html
安装Android SDK
1、 浏览器打开地址: http://tools.android-studio.org/index.php/sdk ,点击下载,选择windows版本sdk。如果下载不了,可以链接这个地址:https://pan.baidu.com/s/1kUJeUEF#list/path=%2F
2、 下载后点击.exe直接安装。安装后选择SDK Manager.exe,全选安装。
3、 安装后好,配置环境变量,在系统设置高级设置中,增加ANDROID_HOME,并添加Android-sdk目录下的tools和platform_tools。ANDROID_HOME为Android-sdk路径。
4、 测试adb是否安装成功
手机开启开发者模式,打开允许调试开关,用usb连接电脑。电脑打开cmd命令窗口,输入adb devices。如图所示表示adb安装成功,且设备处于可调试状态。
monkey命令详解
准备工作
1、 找出待测应用的包名,通过adb shell pm list packages命令查看待测应用包名
2、 测试monkey执行,输入adb shell monkey –p com.iflyrec.tjapp –v –v –v 10 ,对应用进行10次无规律点击
截图可见,monkey正常运行,接下来就是要通过monkey命令实现更为具体的操作。
Monkey命令详解
adb shell monkey -p com.iflyrec.tjapp -s 23 --throttle 200 --ignore-crashes --ignore-timeouts -v -v -v 10000 > E:\work\log\monkey0710.txt 2>&1 &
1、-p后面接着的对应的包名,如果是整机测试,就不需要 –p package_name
2、当测试人员发现了问题,怎么进行复现。monkey所谓的随机操作,是基于seed产生的。每一个seed值都会产生唯一的一个操作序列。只要两次操作的seed值是一样的,那么这两次的操作序列也是一样的,这样我们就能用monkey来复现随机发生的bug了。
3、--ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到crash或者timeout的情况时忽略掉,一般不设置时,出现crash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。
4、10000 这里是指点击的次数
5、E:\work\log\monkey0710.txt指输出日志到对应文件
6、2>&1 固定的写法,代表的意思是中间忽略的东东的日志一并输入到指定的文件中。
7、最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。
8、--throttle <毫秒>
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
9、-v 日志详细程度
Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。
Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 提供了较为详细的测试信息,如逐个发送到Activity的事件信息
Level 2 : adb shell monkey -p fishjoy.control.menu -v -v -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息
比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用。
杀monkey进程
1、 通过CTRL+C停止电脑上正在运行的monkey命令,但手机上依然会继续运行
2、 通过命令
adb shell "ps | grep monkey"查看monkey进程,返回的第一个数字为进程号
3、 通过命令adb shell kill 进程号
4、 再次查看monkey进程发现没有进程,手机上monkey停止运行。
编写monkey脚本
1、 常用方法
(1)启动应用Activity
LaunchActivity(pkg_name, cl_name): 启动应用的Activity。参数:包名和启动的Activity。
(2)点击操作
Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。
DispatchPress(keyCode): 按键。注:keyCode值可以百度android keycode列表获取
LongPress(): 长按2秒。
PressAndHold(x, y, pressDuration): 模拟长按事件。
DispatchPointer(downTime,eventTime,action,x,y,pressure,size,metaState,xPrecision,yPrecision,device,edgeFlags):DispatchPointer命令用于向一个指定的坐标位置,发送点击操作。
主要关注action、x、y三个参数。action:事件是按下还是抬起,0表示按下,1表示抬起。x、y:表示当前事件触发的X轴和Y轴的坐标。两个DispatchPointer命令加在一块,一个按下一个抬起,表示一次点击操作,其余参数默认设置为0即可。downTime,eventTime表示持续时间,用毫秒表示。
(3)拖拽操作
Drag(xStart, yStart, xEnd, yEnd, stepCount): 用于模拟一个拖拽操作。
PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放手势。
(4)等待操作
UserWait(sleepTime): 等待一段时间,sleepTime表示的等待时间,单位为毫秒。
DeviceWakeUp(): 唤醒屏幕。
ProfileWait: 等待5秒。
(5)其他操作
DispatchString(input): 输入字符串。
RotateScreen(rotationDegree, persist): 旋转屏幕。 参数:rotationDegree为旋转角度, e.g. 1代表90度;persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变。
DispatchFlip(true/false): 打开或者关闭软键盘。
2、 脚本实例
#头文件、控制monkey发送消息的参数
type=raw events
count=10
speed=1.0
#以下为monkey命令
start data >>
LaunchActivity(pkg_name,activity)
Tap(x,y,durtion)
前三行是脚本头,count为脚本中包含的指令数目,speed为执行速度。start data >>后面是执行的命令。
执行后,monkey可以在指定模块中运行。