Android自動化測試之MonkeyRunner錄制和回放腳本

對於MonkeyRunner,有些人可能會想,既然是Android自動化測試,離不開測試腳本,那麼,我們可不可以錄制測試腳本呢,答案是可以的。

我們先看看以下monkeyrecoder.py腳本:

[html]  

#Usage: monkeyrunner recorder.py  

#recorder.py  https://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]  

#Usage: monkeyrunner playback.py "myscript"  

  

#playback.py   https://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():   www.aiwalls.com

    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"

You May Also Like