前面的內(nèi)容請參見Android應(yīng)用自動化測試-提綱火鼻。
前篇介紹了Monkey的進階用法,Monkey的腳本功能。這篇繼續(xù)介紹另一個在官方介紹文檔中沒有說明的功能民晒,Monkey的Server功能芙贫。Monkey的Server功能提供了遠程訪問設(shè)備并控制設(shè)備執(zhí)行的能力搂鲫。在monkey的參數(shù)中,我們可以看到有一個--port的參數(shù)磺平,它提供的就是Monkey連接server魂仍,并控制設(shè)備執(zhí)行的功能。
還是來到Monkey的源碼拣挪,在Monkey的源碼目錄下有一個Readme.network.txt的說明文檔擦酌,就是說明這個server功能的使用的。
SIMPLE PROTOCOL FOR AUTOMATED NETWORK CONTROL
The Simple Protocol for Automated Network Control was designed to be a
low-level way to programmability inject KeyEvents and MotionEvents
into the input system. The idea is that a process will run on a host
computer that will support higher-level operations (like conditionals,
etc.) and will talk (via TCP over ADB) to the device in Simple
Protocol for Automated Network Control. For security reasons, the
Monkey only binds to localhost, so you will need to use adb to setup
port forwarding to actually talk to the device.
INITIAL SETUP
Setup port forwarding from a local port on your machine to a port on
the device:
$ adb forward tcp:1080 tcp:1080
Start the monkey server
$ adb shell monkey --port 1080
Now you're ready to run commands
COMMAND LIST
Individual commands are separated by newlines. The Monkey will
respond to every command with a line starting with OK for commands
that executed without a problem, or a line starting with ERROR for
commands that had problems being run. For commands that return a
value, that value is returned on the same line as the OK or ERROR
response. The value is everything after (but not include) the colon
on that line. For ERROR values, this could be a message indicating
what happened. A possible example:
key down menu
OK
touch monkey
ERROR: monkey not a number
getvar sdk
OK: donut
getvar foo
ERROR: no such var
The complete list of commands follows:
key [down|up] keycode
This command injects KeyEvent's into the input system. The keycode
parameter refers to the KEYCODE list in the KeyEvent class
(http://developer.android.com/reference/android/view/KeyEvent.html).
The format of that parameter is quite flexible. Using the menu key as
an example, it can be 82 (the integer value of the keycode),
KEYCODE_MENU (the name of the keycode), or just menu (and the Monkey
will add the KEYCODE part). Do note that this last part doesn't work
for things like KEYCODE_1 for obvious reasons.
Note that sending a full button press requires sending both the down
and the up event for that key
touch [down|up|move] x y
This command injects a MotionEvent into the input system that
simulates a user touching the touchscreen (or a pointer event). x and
y specify coordinates on the display (0 0 being the upper left) for
the touch event to happen. Just like key events, touch events at a
single location require both a down and an up. To simulate dragging,
send a "touch down", then a series of "touch move" events (to simulate
the drag), followed by a "touch up" at the final location.
trackball dx dy
This command injects a MotionEvent into the input system that
simulates a user using the trackball. dx and dy indicates the amount
of change in the trackball location (as opposed to exact coordinates
that the touch events use)
flip [open|close]
This simulates the opening or closing the keyboard (like on dream).
wake
This command will wake the device up from sleep and allow user input.
tap x y
The tap command is a shortcut for the touch command. It will
automatically send both the up and the down event.
press keycode
The press command is a shortcut for the key command. The keycode
paramter works just like the key command and will automatically send
both the up and the down event.
type string
This command will simulate a user typing the given string on the
keyboard by generating the proper KeyEvents.
listvar
This command lists all the vars that the monkey knows about. They are
returned as a whitespace separated list.
getvar varname
This command returns the value of the given var. listvar can be used
to find out what vars are supported.
quit
Fully quit the monkey and accept no new sessions.
done
Close the current session and allow a new session to connect
OTHER NOTES
There are some convenience features added to allow running without
needing a host process.
Lines starting with a # character are considered comments. The Monkey
eats them and returns no indication that it did anything (no ERROR and
no OK).
You can put the Monkey to sleep by using the "sleep" command with a
single argument, how many ms to sleep.
我們提取其中主要的用法:
首先需要利用adb的forward命令菠劝,被本地端口和設(shè)備端口進行映射
adb forward tcp:1080 tcp:1080
然后利用Monkey的--port將Monkey Server開放在1080端口上
adb shell monkey --port 1080
這時我們通過telnet連接本機的1080端口赊舶,即可訪問到設(shè)備上的Monkey server,并且執(zhí)行Server中的相關(guān)指令赶诊。
telnet 127.0.0.1 1080
- key [down|up] keycode -- 指定Keycode的按鍵事件(分按下笼平、彈起)
- touch [down|up|move] x y -- 指定坐標(biāo)的觸屏操作(分按下、彈起甫何、移動)
- trackball dx dy -- 軌跡球操作
- tap x y -- 指定坐標(biāo)的觸屏操作
- flip [open|close] -- 調(diào)用軟鍵盤
- wake -- 喚醒設(shè)備
- press keycode -- 指定Keycode的按鍵事件
- listvar -- 列出所有的系統(tǒng)變量
- getvar varname -- 獲取給定系統(tǒng)變量值
- quit -- 退出當(dāng)前連接出吹,且不接受新的連接
- done -- 退出當(dāng)前連接,但可以接受新的連接
命令執(zhí)行成功辙喂,會返回OK的響應(yīng)捶牢。如果執(zhí)行錯誤則返回error command.
注意操作退出telnet前,需要執(zhí)行done指令巍耗,否則再次連接秋麸,會報端口已占用的錯誤。只能重啟設(shè)備以釋放端口炬太。
操作示例: