入门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端敲

  具体观察自己手机是不是在自动跑操作了

posted @ 2014-12-07 13:19  Mr.Dantes  阅读(2737)  评论(0编辑  收藏  举报