您的位置:首页 > 移动开发 > Android开发

Android自动化测试之MonkeyRunner录制和回放脚本(十一)

2015-06-08 13:05 323 查看

对于MonkeyRunner,有些人可能会想,既然是Android自动化测试,离不开测试脚本,那么,我们可不可以录制测试脚本呢,答案是可以的。

我们先看看以下monkeyrecoder.py脚本:

[html] view plaincopyprint?
  1. #Usage: monkeyrunner recorder.py 
  2. #recorder.py  http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_recorder.py 
  3. com.android.monkeyrunner import MonkeyRunner as mr 
  4. com.android.monkeyrunner.recorder import MonkeyRecorder as recorder 
  5.  
  6. device = mr.waitForConnection() 
  7. recorder.start(device) 
  8. #END recorder.py 
#Usage: monkeyrunner recorder.py
#recorder.py  http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_recorder.py
com.android.monkeyrunner import MonkeyRunner as mr
com.android.monkeyrunner.recorder import MonkeyRecorder as recorder

device = mr.waitForConnection()
recorder.start(device)
#END recorder.py

首先,连接你已经打开调试模式的ANDROID设备或模拟器,然后运行上面的脚本,例如在cmd窗口中执行命令: monkeyrunner monkeyrecoder.py

执行下面的代码后,将运行录制脚本的程序:

#Press ExportAction to save recorded scrip to a file


#Example of result:
#PRESS|{""name"":""MENU"",""type"":""downAndUp"",}
#TOUCH|{""x"":180,""y"":175,""type"":""downAndUp"",}
#TYPE|{""message"":"""",}

=================================================

这种脚本需要另外一个monkeyrunner的脚本来解释执行。monkeyplayback.py

[html] view plaincopyprint?
  1. #Usage: monkeyrunner playback.py "myscript" 
  2.  
  3. #playback.py   http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_playback.py 
  4.  
  5. import sys 
  6. com.android.monkeyrunner import MonkeyRunner 
  7.  
  8. # The format of the file we are parsing is very carfeully constructed. 
  9. # Each line corresponds to a single command.  The line is split into 2 
  10. # parts with a | character.  Text to the left of the pipe denotes 
  11. # which command to run.  The text to the right of the pipe is a python 
  12. # dictionary (it can be evaled into existence) that specifies the 
  13. # arguments for the command.  In most cases, this directly maps to the 
  14. # keyword argument dictionary that could be passed to the underlying 
  15. # command.  
  16.  
  17. # Lookup table to map command strings to functions that implement that 
  18. # command. 
  19. CMD_MAP = { 
  20.     ""TOUCH"": lambda dev, arg: dev.touch(**arg), 
  21.     ""DRAG"": lambda dev, arg: dev.drag(**arg), 
  22.     ""PRESS"": lambda dev, arg: dev.press(**arg), 
  23.     ""TYPE"": lambda dev, arg: dev.type(**arg), 
  24.     ""WAIT"": lambda dev, arg: MonkeyRunner.sleep(**arg) 
  25.     } 
  26.  
  27. # Process a single file for the specified device. 
  28. def process_file(fp, device): 
  29.     for line in fp: 
  30.         (cmd, rest) = line.split(""|"") 
  31.         try: 
  32.             # Parse the pydict 
  33.             rest = eval(rest) 
  34.         except: 
  35.             print ""unable to parse options"" 
  36.             continue 
  37.  
  38.         if cmd not in CMD_MAP: 
  39.             print ""unknown command: "" + cmd 
  40.             continue 
  41.  
  42.         CMD_MAP[cmd](device, rest) 
  43.  
  44.  
  45. def main(): 
  46.     file = sys.argv[1] 
  47.     fp = open(file, ""r"") 
  48.  
  49.     device = MonkeyRunner.waitForConnection() 
  50.      
  51.     process_file(fp, device) 
  52.     fp.close(); 
  53.      
  54.  
  55. if __name__ == ""__main__"": 
  56.     main() 
#Usage: monkeyrunner playback.py "myscript"

#playback.py   http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_playback.py

import sys
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()

=================================================

Usage:monkeyrunner playback.py "myscript"

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: