Monkey測試結果解析(一)

一、爲什麼要用Monkey 測試?
簡單在說就是象猴子一樣亂點,爲了測試軟件的穩定性,健壯性。號稱最快速有效的方法。有時候運行相同系列的測試,即使是複雜的測試,但是以相同的順序和路徑,即使一遍又一遍地運行也很少機會能發現內存和資源使用的bug。而此時猴子就比人更有效了。
簡介
Monkey是一個命令行工具 ,可以運行在模擬器裏或實際設備中。它向系統發送僞隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試。Monkey包括許多選項,它們大致分爲四大類:
· 基本配置 選項,如設置嘗試的事件數量。
· 運行約束選項,如設置只對單獨的一個包進行測試。
· 事件類型和頻率。
· 調試選項。
在Monkey運行的時候,它生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理:
· 如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。
· 如果應用程序崩潰或接收到任何失控異常 ,Monkey將停止並報錯。
· 如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止並報錯。
按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。
二、怎麼用的?
首先用一個最簡單的例子分析:
//p參數: 表示指定測試的程序
//v參數: 表示查看monkey生成的一些詳細的隨機的事件名
//數字100: 表示測試事件數爲100
monkey -p com.example.android.apis  -v -v -v 100
結果如下:
:Monkey: seed=0count=100
:AllowPackage: com.example.android.apis
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
//各種事件所佔的比例。
//各數字分別表示:
[--pct-touch PERCENT]
[--pct-motion PERCENT]
[--pct-trackball PERCENT]
[--pct-syskeys PERCENT]
[--pct-nav PERCENT]
[--pct-majornav PERCENT]
[--pct-appswitch PERCENT]
[--pct-flip PERCENT]
[--pct-anyevent PERCENT]
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 15.0%
//   3: 25.0%
//   4: 15.0%
//   5: 2.0%
//   6: 2.0%
//   7: 1.0%
//   8: 15.0%
:Switch:
//表示跳轉到com.example.android.apis 裏面的ApiDemos這一個Activity裏。
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.example.android.apis/.ApiDemos;end
//允許此Intent跳轉,
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.android.apis/.ApiDemos } in package com.example.android.apis
//發送的一些動作,如點擊按下,點擊放開,移動。
:Sending Pointer ACTION_MOVE x=-4.0y=2.0
:Sending Pointer ACTION_UP x=0.0y=0.0
:Sending Pointer ACTION_DOWN x=207.0y=282.0
:Sending Pointer ACTION_UP x=189.0y=289.0
:Sending Pointer ACTION_DOWN x=95.0y=259.0
:Sending Pointer ACTION_UP x=95.0y=259.0
:Sending Pointer ACTION_DOWN x=295.0y=223.0
:Sending Pointer ACTION_UP x=290.0y=213.0
:Sending Pointer ACTION_MOVE x=-5.0y=3.0
:Sending Pointer ACTION_MOVE x=0.0y=-5.0
//拒絕此跳轉,因爲它是跳轉到非它自己的包的Activity,本測試中是指寫測試它程序所在的包,此跳轉是跳出本程序,進入到桌面。
// Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=com.android.launcher/.Launcher } in package com.android.launcher
//繼續發送動作。
:Sending Pointer ACTION_DOWN x=74.0y=201.0
:Sending Pointer ACTION_UP x=74.0y=201.0
:Sending Pointer ACTION_MOVE x=3.0y=-2.0
:Sending Pointer ACTION_UP x=0.0y=0.0
:Sending Pointer ACTION_MOVE x=-4.0y=2.0
Events injected: 100
//丟棄的,鍵=0,指針=0,軌跡球=0,翻轉=0
:Dropped: keys=0pointers=0trackballs=0flips=0
//網絡統計經過時間爲4202ms,其中4202ms是用於在手機上的,0ms用於無線網絡上,沒有連接的時間爲0ms。
## Network stats: elapsed time=4202ms (4202ms mobile, 0ms wifi, 0ms not connected)
//monkey測試完成。
// Monkey finished
從例子中可以看出,該程序在這次測試中沒有問題,若程序出現問題終端將打印出異常供程序員查找錯誤。
以下是monkey命令行的一些參數:
-p:所在測試的包,可以是一個也可以是多個 如 monkey -p com.androd.sms -p com.androd.explorer
-c:如果用此參數指定了一個或幾個類別,Monkey將只允許系統啓動被這些類別中的某個類別列出的Activity。如果不指定任何類別,Monkey將選擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c選項,每個-c選項只能用於一個類別。
-ignore-crash:當應用程序崩潰或發生任何失控異常時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
-ignore-timeouts:通常,當應用程序發生任何超時錯誤(如“Application Not Responding”對話框)時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
-ignore-security-exceptions:通常,當應用程序發生許可錯誤(如啓動一個需要某些許可的Activity)時,Monkey將停止運行。如果設置了此選項,Monkey將繼續向系統發送事件,直到計數完成。
-monitor-native-crashes:監視並報告Android系統中本地代碼的崩潰事件。如果設置了–kill-process-after-error,系統將停止運行。
-kill-process-after-error:如果程序出現錯誤,monkey將結束此程序進程。
-hprof:設置此項,將在monkey事件序列之前和之後立即生成profilling報告。這將會在data/misc中生成大文件(約5mb)所以要小心使用它。
-pct-touch:調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕的某單一位置)。
-pct-motion:動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的隨機事件和一個up事件組成)。
-pct-trackball:調整軌跡事件的百分比(軌跡事件由一個或幾個隨機移動組成,有時還伴隨着點擊)。
-pct-syskeys:調整系統按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如home,back,start call,end call及音量控制)。
-pct-nav 調整基本導航事件的百分比(導航事件來自方向輸入設備的up/down/left/right組成)。
-pct-majornav:調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)
-pct-appswitch:調整啓動Activity的百分比。在隨機間隔裏,Monkey將執行一個startActivity()調用,作爲最大程度覆蓋包中全部Activity的一種方法。
-pct-anyevent:調整啓動Activity的百分比。它包羅了所有其它的事件類型,如:按鍵,其它不常用的設備按鈕。
-pct-flip:
–wait-dbg:停止執行中的Monkey,直到有調試器和它相連接。
–dbg-no-events:設置此選項,Monkey將執行初始啓動,進入到一個測試Activity,然後不會再進一步生成事件。爲了得到最佳結果,把它與-v、一個或幾個包約束、以及一個保持Monkey運行30秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程序所調用的包之間的轉換。
-setup:
-f:
-port:爲monkey開啓專用端口。此時只monkey不會幫你亂點擊,而此時你自己就是一隻monkey了,在你亂點的時候,monkey會輸出你點擊後回饋的信息。如果你打完命令之後模擬器上沒有啓動你所要啓動的包,你需要自己啓動,但是你只能啓動你-p中指定的那幾個包。ctrl+c中斷。
--throttle :當事件起效時等待的毫秒數。
-s:隨機數生成器的seed值。如果用相同的seed值再次運行monkey,它將生成相同的事件序列。
COUNT:要發送的事件數。
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions] [--monitor-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...] [--throttle MILLISEC]
COUNT
Monkey測試結果 :
# monkey -p wfh.LessonTable -v -v -v 200
:Monkey: seed=0count=200
:AllowPackage: wfh.LessonTable
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   - NOT USING main activity com.android.browser.BrowserActivity (from package com.android.browser)
//   - NOT USING main activity com.android.music.MusicBrowserActivity (from package com.android.music)
//   - NOT USING main activity com.android.contacts.DialtactsActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.contacts.DialtactsContactsEntryActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.mms.ui.ConversationList (from package com.android.mms)
//   - NOT USING main activity com.android.spare_parts.SpareParts (from package com.android.spare_parts)
//   - NOT USING main activity com.android.camera.Camera (from package com.android.camera)
//   - NOT USING main activity com.android.alarmclock.AlarmClock (from package com.android.alarmclock)
//   - NOT USING main activity com.android.settings.Settings (from package com.android.settings)
//   - NOT USING main activity com.android.camera.GalleryPicker (from package com.android.gallery)
//   - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
//   - NOT USING main activity com.example.android.apis.ApiDemos (from package com.example.android.apis)
//   - NOT USING main activity com.android.calculator2.Calculator (from package com.android.calculator2)
//   - NOT USING main activity com.android.customlocale.CustomLocaleActivity (from package com.android.customlocale)
//   - NOT USING main activity com.android.development.Development (from package com.android.development)
//   - NOT USING main activity com.myactivity.MyActivity (from package com.myactivity)
//   + Using main activity wfh.LessonTable.MainTable (from package wfh.LessonTable)
//   - NOT USING main activity wfh.rss.MainRSS (from package wfh.rss)
// Selecting main activities from category android.intent.category.MONKEY
//   - NOT USING main activity com.android.launcher.Launcher (from package com.android.launcher)
//   - NOT USING main activity com.android.settings.ManageApplications (from package com.android.settings)
//   - NOT USING main activity com.android.settings.RunningServices (from package com.android.settings)
// Seeded: 0
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 15.0%
//   3: 25.0%
//   4: 15.0%
//   5: 2.0%
//   6: 2.0%
//   7: 1.0%
//   8: 15.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=wfh.LessonTable/.MainTable;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=wfh.LessonTable/.MainTable } in package wfh.LessonTable
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 21// KEYCODE_DPAD_LEFT
:SendKey (ACTION_UP): 21// KEYCODE_DPAD_LEFT
Sleeping for0milliseconds  //------------------------------------用--throttle來設置一個起效的事件發生後時延時。
:Sending Pointer ACTION_MOVE x=-4.0y=2.0
:Sending Pointer ACTION_MOVE x=-5.0y=-4.0
:Sending Pointer ACTION_MOVE x=0.0y=-1.0
:Sending Pointer ACTION_MOVE x=-3.0y=2.0
:Sending Pointer ACTION_MOVE x=-4.0y=2.0//-------------移動事件!!!
:Sending Pointer ACTION_MOVE x=-2.0y=4.0
:Sending Pointer ACTION_MOVE x=4.0y=1.0
:Sending Pointer ACTION_MOVE x=-5.0y=4.0
:Sending Pointer ACTION_MOVE x=-5.0y=1.0
:Sending Pointer ACTION_MOVE x=0.0y=-2.0
:Sending Pointer ACTION_DOWN x=0.0y=0.0
:Sending Pointer ACTION_UP x=0.0y=0.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 82// KEYCODE_MENU
:SendKey (ACTION_UP): 82// KEYCODE_MENU
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 64// KEYCODE_EXPLORER
:SendKey (ACTION_UP): 64// KEYCODE_EXPLORER
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 23// KEYCODE_DPAD_CENTER
:SendKey (ACTION_UP): 23// KEYCODE_DPAD_CENTER
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 91// KEYCODE_MUTE
// Allowing start of Intent { cmp=wfh.LessonTable/.EditLesson } in package wfh.LessonTable
:SendKey (ACTION_UP): 91// KEYCODE_MUTE
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=207.0y=282.0
:Sending Pointer ACTION_MOVE x=210.0y=277.0
:Sending Pointer ACTION_MOVE x=204.0y=283.0
:Sending Pointer ACTION_MOVE x=205.0y=278.0
:Sending Pointer ACTION_MOVE x=199.0y=278.0
:Sending Pointer ACTION_MOVE x=199.0y=287.0
:Sending Pointer ACTION_MOVE x=194.0y=295.0
:Sending Pointer ACTION_MOVE x=198.0y=290.0
:Sending Pointer ACTION_MOVE x=197.0y=286.0
:Sending Pointer ACTION_MOVE x=189.0y=289.0
:Sending Pointer ACTION_UP x=189.0y=289.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 56// KEYCODE_PERIOD
:SendKey (ACTION_UP): 56// KEYCODE_PERIOD
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=95.0y=259.0
:Sending Pointer ACTION_UP x=95.0y=259.0
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=295.0y=223.0
:Sending Pointer ACTION_MOVE x=291.0y=223.0
:Sending Pointer ACTION_MOVE x=291.0y=218.0
:Sending Pointer ACTION_MOVE x=284.0y=215.0
:Sending Pointer ACTION_MOVE x=284.0y=206.0
:Sending Pointer ACTION_MOVE x=285.0y=205.0
:Sending Pointer ACTION_MOVE x=290.0y=213.0
:Sending Pointer ACTION_UP x=290.0y=213.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 82// KEYCODE_MENU
:SendKey (ACTION_UP): 82// KEYCODE_MENU
Sleeping for0milliseconds
:Sending Pointer ACTION_MOVE x=-5.0y=3.0
:Sending Pointer ACTION_MOVE x=3.0y=2.0
:Sending Pointer ACTION_MOVE x=-1.0y=2.0
:Sending Pointer ACTION_MOVE x=-4.0y=4.0
:Sending Pointer ACTION_MOVE x=-4.0y=0.0
:Sending Pointer ACTION_MOVE x=-2.0y=2.0
:Sending Pointer ACTION_MOVE x=3.0y=2.0
:Sending Pointer ACTION_MOVE x=-2.0y=-5.0
:Sending Pointer ACTION_MOVE x=1.0y=4.0
:Sending Pointer ACTION_MOVE x=-4.0y=-5.0
:SendKey (ACTION_DOWN): 21// KEYCODE_DPAD_LEFT
:SendKey (ACTION_UP): 21// KEYCODE_DPAD_LEFT
Sleeping for0milliseconds
:Sending Pointer ACTION_MOVE x=0.0y=-5.0
:Sending Pointer ACTION_MOVE x=3.0y=-5.0
:Sending Pointer ACTION_MOVE x=4.0y=0.0
:Sending Pointer ACTION_MOVE x=-4.0y=3.0
:Sending Pointer ACTION_MOVE x=4.0y=1.0
:Sending Pointer ACTION_MOVE x=-4.0y=3.0
:Sending Pointer ACTION_MOVE x=-1.0y=-4.0
:Sending Pointer ACTION_MOVE x=-2.0y=-2.0
:Sending Pointer ACTION_MOVE x=-4.0y=-3.0
:Sending Pointer ACTION_MOVE x=-5.0y=-1.0
:SendKey (ACTION_DOWN): 3// KEYCODE_HOME
:SendKey (ACTION_UP): 3// KEYCODE_HOME
// Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=com.android.launcher/.Launcher } in package com.android.launcher
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=74.0y=201.0
:Sending Pointer ACTION_UP x=74.0y=201.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 23// KEYCODE_DPAD_CENTER
:SendKey (ACTION_UP): 23// KEYCODE_DPAD_CENTER
Sleeping for0milliseconds
:Sending Pointer ACTION_MOVE x=3.0y=-2.0
:Sending Pointer ACTION_MOVE x=-2.0y=-1.0
:Sending Pointer ACTION_MOVE x=-5.0y=4.0
:Sending Pointer ACTION_MOVE x=-2.0y=0.0
:Sending Pointer ACTION_MOVE x=3.0y=2.0
:Sending Pointer ACTION_MOVE x=0.0y=0.0
:Sending Pointer ACTION_MOVE x=4.0y=3.0
:Sending Pointer ACTION_MOVE x=-3.0y=-1.0
:Sending Pointer ACTION_MOVE x=-4.0y=1.0
:Sending Pointer ACTION_MOVE x=-5.0y=1.0
:Sending Pointer ACTION_DOWN x=0.0y=0.0
:Sending Pointer ACTION_UP x=0.0y=0.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 21// KEYCODE_DPAD_LEFT
:SendKey (ACTION_UP): 21// KEYCODE_DPAD_LEFT
// activityResuming(wfh.LessonTable)
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 82// KEYCODE_MENU
:SendKey (ACTION_UP): 82// KEYCODE_MENU
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 20// KEYCODE_DPAD_DOWN
:SendKey (ACTION_UP): 20// KEYCODE_DPAD_DOWN
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 20// KEYCODE_DPAD_DOWN
:SendKey (ACTION_UP): 20// KEYCODE_DPAD_DOWN
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 21// KEYCODE_DPAD_LEFT
:SendKey (ACTION_UP): 21// KEYCODE_DPAD_LEFT
Sleeping for0milliseconds ??????
:Sending Pointer ACTION_MOVE x=-4.0y=2.0
:Sending Pointer ACTION_MOVE x=4.0y=0.0
// Sending event #100
:Sending Pointer ACTION_MOVE x=3.0y=0.0
:Sending Pointer ACTION_MOVE x=3.0y=1.0
:Sending Pointer ACTION_MOVE x=3.0y=-5.0
:Sending Pointer ACTION_MOVE x=-4.0y=3.0
:Sending Pointer ACTION_MOVE x=1.0y=-2.0
:Sending Pointer ACTION_MOVE x=0.0y=2.0
:Sending Pointer ACTION_MOVE x=-2.0y=1.0
:Sending Pointer ACTION_MOVE x=2.0y=-1.0
:Sending Pointer ACTION_MOVE x=4.0y=2.0
:Sending Pointer ACTION_MOVE x=-1.0y=2.0
:Sending Pointer ACTION_MOVE x=3.0y=-3.0
:Sending Pointer ACTION_MOVE x=4.0y=0.0
:Sending Pointer ACTION_MOVE x=0.0y=-1.0
:Sending Pointer ACTION_MOVE x=4.0y=-1.0
:Sending Pointer ACTION_MOVE x=-4.0y=4.0
:Sending Pointer ACTION_MOVE x=4.0y=4.0
:Sending Pointer ACTION_MOVE x=-4.0y=2.0
:Sending Pointer ACTION_MOVE x=2.0y=-2.0
:SendKey (ACTION_DOWN): 22// KEYCODE_DPAD_RIGHT
:SendKey (ACTION_UP): 22// KEYCODE_DPAD_RIGHT
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 53// KEYCODE_Y
:SendKey (ACTION_UP): 53// KEYCODE_Y
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 24// KEYCODE_VOLUME_UP
:SendKey (ACTION_UP): 24// KEYCODE_VOLUME_UP
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 82// KEYCODE_MENU
:SendKey (ACTION_UP): 82// KEYCODE_MENU
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=149.0y=150.0
:Sending Pointer ACTION_MOVE x=149.0y=151.0
:Sending Pointer ACTION_MOVE x=152.0y=158.0
:Sending Pointer ACTION_MOVE x=148.0y=162.0
:Sending Pointer ACTION_MOVE x=148.0y=156.0
:Sending Pointer ACTION_MOVE x=152.0y=149.0
:Sending Pointer ACTION_MOVE x=155.0y=146.0
:Sending Pointer ACTION_MOVE x=150.0y=138.0
:Sending Pointer ACTION_MOVE x=155.0y=142.0
:Sending Pointer ACTION_MOVE x=162.0y=150.0
:Sending Pointer ACTION_UP x=162.0y=150.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 82// KEYCODE_MENU
:SendKey (ACTION_UP): 82// KEYCODE_MENU
// Allowing start of Intent { cmp=wfh.LessonTable/.AWeekLesson } in package wfh.LessonTable
Sleeping for0milliseconds
:Sending Pointer ACTION_MOVE x=0.0y=-1.0
:Sending Pointer ACTION_MOVE x=-2.0y=0.0
:Sending Pointer ACTION_MOVE x=2.0y=2.0
:Sending Pointer ACTION_MOVE x=-5.0y=-1.0
:Sending Pointer ACTION_MOVE x=-1.0y=0.0
:Sending Pointer ACTION_MOVE x=-4.0y=4.0
:Sending Pointer ACTION_MOVE x=4.0y=4.0
:Sending Pointer ACTION_MOVE x=3.0y=-2.0
:Sending Pointer ACTION_MOVE x=2.0y=2.0
:Sending Pointer ACTION_MOVE x=-1.0y=-1.0
:SendKey (ACTION_DOWN): 19// KEYCODE_DPAD_UP
:SendKey (ACTION_UP): 19// KEYCODE_DPAD_UP
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=134.0y=239.0
:Sending Pointer ACTION_UP x=134.0y=239.0
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 4// KEYCODE_BACK
:SendKey (ACTION_UP): 4// KEYCODE_BACK
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 23// KEYCODE_DPAD_CENTER
// activityResuming(wfh.LessonTable)
:SendKey (ACTION_UP): 23// KEYCODE_DPAD_CENTER
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 22// KEYCODE_DPAD_RIGHT
:SendKey (ACTION_UP): 22// KEYCODE_DPAD_RIGHT
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 19// KEYCODE_DPAD_UP
:SendKey (ACTION_UP): 19// KEYCODE_DPAD_UP
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 21// KEYCODE_DPAD_LEFT
:SendKey (ACTION_UP): 21// KEYCODE_DPAD_LEFT
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 19// KEYCODE_DPAD_UP
:SendKey (ACTION_UP): 19// KEYCODE_DPAD_UP
Sleeping for0milliseconds
:SendKey (ACTION_DOWN): 23// KEYCODE_DPAD_CENTER
:SendKey (ACTION_UP): 23// KEYCODE_DPAD_CENTER
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=118.0y=37.0
:Sending Pointer ACTION_MOVE x=119.0y=33.0
:Sending Pointer ACTION_UP x=119.0y=33.0
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=297.0y=358.0
:Sending Pointer ACTION_MOVE x=289.0y=363.0
:Sending Pointer ACTION_MOVE x=284.0y=369.0
:Sending Pointer ACTION_UP x=284.0y=369.0
Sleeping for0milliseconds
:Sending Pointer ACTION_DOWN x=258.0y=403.0
:Sending Pointer ACTION_MOVE x=249.0y=398.0
:Sending Pointer ACTION_MOVE x=258.0y=393.0
:Sending Pointer ACTION_MOVE x=258.0y=402.0
:Sending Pointer ACTION_MOVE x=263.0y=395.0
:Sending Pointer ACTION_MOVE x=266.0y=399.0
:Sending Pointer ACTION_MOVE x=273.0y=403.0
:Sending Pointer ACTION_UP x=273.0y=403.0
Sleeping for0milliseconds
:Sending Pointer ACTION_MOVE x=-5.0y=-5.0
:Sending Pointer ACTION_MOVE x=1.0y=-2.0
:Sending Pointer ACTION_MOVE x=1.0y=-4.0
:Sending Pointer ACTION_MOVE x=-2.0y=2.0
:Sending Pointer ACTION_MOVE x=3.0y=-3.0
:Sending Pointer ACTION_MOVE x=2.0y=-4.0
:Sending Pointer ACTION_MOVE x=-5.0y=2.0
:Sending Pointer ACTION_MOVE x=0.0y=0.0
當測試到ACTION_MOVE x=0.0y=0.0這個動作時,發生了FC(Force Close)錯誤,以下爲輸出錯誤信息。同時在LogCat裏面也有錯誤輸出,而且LogCat裏面的錯誤信息更爲詳細,在實際的測試中應該結合兩者輸出的信息進行調試程序。


未完待續!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章