入门monkeyrunner1-monkeyrunner的录制以及回放
大家周末好,临近年末,大家要注意保暖哟。近期小弟在自学monkeyrunner,于是一边学习一边就想写点东西啦,或许有些人也学过并且精通这个测试工具。但是将自己的经验写出来并分享给大家才是真的好哈哈。接下来切入正题,第一讲是monkeyrunner的录制和回放。
这篇文章里,我的demo都是用自己手机来操作的,因为android原生的模拟器实在太卡了,如果朋友们想学模拟器的操作请自行百度。
1.第一步:大家玩android测试,环境sdk,ADT不用我说了吧,都去部署好,之前的博客我也有写环境变量,注意大家最好去配完整,shell端就不用自己找系统路径了,http://www.cnblogs.com/wyx123/articles/4133001.html
2.用usb连上你的手机,注意几个情况:
2.1如果手机只显示,估计是你usb没接好,再去检查检查有没有插好
2.2有时候我们会遇到port5037被占用;记住5037是adb的默认端口,这种情况是你的手机助手或者其他进程占用了它,解决这个问题两种解决方式:
2.2.1一种常见的解决方法是:找出占用5037端口的程序,然后杀掉它;
使用:netstat -aon | findstr 127.0.0.1:5037 来找到占用5037的进程ID;
使用:kill -f pid 去杀掉它们。(或者在任务管理器 -进程中,结束进程。PS:需要事先在 windows任务管理器-查看-选择列,勾选PID)
2.2.2.自己配置 adb server 端口,使用一个生僻的值。很简单,只要在系统环境变量中定义 ANDROID_ADB_SERVER_PORT 的值即可。最好选择一个5位数的端口号(10000 ~ 65535),不易重复。
win下只要在环境变量中增加一个ANDROID_ADB_SERVER_PORT ,值填你自己定义的端口。
linux下只要 export $ANDROID_ADB_SERVER_PORT = 自定义端口,即可。
这时打开一个命令行,输入adb devices,看看是不是在新的端口上启动了啊?
3.这是我的真机了,左边是名称,右边是device状态,为已连接
4.预热部分完成,正式进入monkeyrunner的录制
monkeyrunner这个monkeyrunner_recorder.py文件
请看源代码,用py写的,大家这里注意缩进,是四个空格,十分严格
from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder device = mr.waitForConnection() recorder.start(device)
大家启动好这个界面,就可以真机乱点啦哈哈,右侧的代码是你的操作步骤。自己去试试操作,这里详细说的是导出你的操作步骤:
点击Export Actions,于是会跳出啦,然后选择一个文件夹进行保存
如图:
5.回放我的操作脚本
得有monkey_playback.py这个文件,源代码如下:
import sys from com.android.monkeyrunner import MonkeyRunner # The format of the file we are parsing is very carfeully constructed. # Each line corresponds to a single command. The line is split into 2 # parts with a | character. Text to the left of the pipe denotes # which command to run. The text to the right of the pipe is a python # dictionary (it can be evaled into existence) that specifies the # arguments for the command. In most cases, this directly maps to the # keyword argument dictionary that could be passed to the underlying # command. # Lookup table to map command strings to functions that implement that # command. CMD_MAP = { 'TOUCH': lambda dev, arg: dev.touch(**arg), 'DRAG': lambda dev, arg: dev.drag(**arg), 'PRESS': lambda dev, arg: dev.press(**arg), 'TYPE': lambda dev, arg: dev.type(**arg), 'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg) } # Process a single file for the specified device. def process_file(fp, device): for line in fp: (cmd, rest) = line.split('|') try: # Parse the pydict rest = eval(rest) except: print 'unable to parse options' continue if cmd not in CMD_MAP: print 'unknown command: ' + cmd continue CMD_MAP[cmd](device, rest) def main(): file = sys.argv[1] fp = open(file, 'r') device = MonkeyRunner.waitForConnection() process_file(fp, device) fp.close(); if __name__ == '__main__': main()
最后在shell端敲
具体观察自己手机是不是在自动跑操作了