Monkey的使用及日志解讀

一县好、Monkey是什么

Monkey是Android中的一個命令行工具收擦,它其實就是SDK中附帶的一個工具,可以運行在模擬器里或?qū)嶋H設備中鳍置。

二、Monkey測試的目的

Monkey測試是Android平臺自動化測試的一種手段邻奠,通過Monkey程序模擬用戶的按鍵輸入,觸摸屏輸入扬舒,手勢輸入等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發(fā)生異常凫佛。該工具主要用于進行壓力測試讲坎,開發(fā)人員結合monkey打印的日志解決測試中出現(xiàn)的問題。

三愧薛、Monkey測試的特點

1晨炕、測試的對象僅為應用程序包,有一定的局限性毫炉。

2瓮栗、Monkey測試,所有的事件都是隨機產(chǎn)生的,不帶任何人的主觀性瞄勾。

3费奸、可對MonkeyTest的對象,事件數(shù)量进陡,類型愿阐,頻率等進行設置。

四趾疚、Monkey的使用場景

APP開發(fā)過程中的各個階段:提測缨历、集成以蕴、et等。

五辛孵、Monkey的使用及命令詳解

1舒裤、每個命令的詳細解釋

--help 列出簡單的用法。

-v?

命令行的每一個-v將增加反饋信息的級別觉吭。Level 0(缺省值)除啟動提示腾供、測試完成和最終結果之外,提供較少信息鲜滩。Level 1 提供較為詳細的測試信息伴鳖,如逐個發(fā)送到Activity的事件。Level 2 提供更加詳細的設置信息徙硅,如測試中被選中的或未被選中的Activity事件

-s?

偽隨機數(shù)生成器的seed值榜聂。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列嗓蘑。

--throttle?

在事件之間插入固定延遲须肆。通過這個選項可以減緩Monkey的執(zhí)行速度。如果不指定該選項桩皿,Monkey將不會被延遲豌汇,事件將盡可能快地被產(chǎn)成。

--pct-touch?

調(diào)整觸摸事件的百分比(觸摸事件是一個down-up事件泄隔,它發(fā)生在屏幕上的某單一位置)拒贱。

--pct-motion?

調(diào)整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨機事件和一個up事件組成)佛嬉。

--pct-trackball?

調(diào)整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成逻澳,有時還伴隨有點擊)。

--pct-nav?

調(diào)整“基本”導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成)暖呕。

--pct-majornav?

調(diào)整“主要”導航事件的百分比(這些導航事件通常引發(fā)圖形界面中的動作斜做,如:5-way鍵盤的中間按鍵、回退按鍵湾揽、菜單按鍵)?

--pct-syskeys?

調(diào)整“系統(tǒng)”按鍵事件的百分比(這些按鍵通常被保留瓤逼,由系統(tǒng)使用,如Home钝腺、Back抛姑、Start Call、End Call及音量控制鍵)艳狐。

--pct-appswitch?

調(diào)整啟動Activity的百分比定硝。在隨機間隔里,Monkey將執(zhí)行一個startActivity()調(diào)用毫目,作為最大程度覆蓋包中全部Activity的一種方法蔬啡。

--pct-anyevent?

調(diào)整其它類型事件的百分比诲侮。它包羅了所有其它類型的事件,如:按鍵箱蟆、其它不常用的設備按鈕沟绪、等等。約束限制

-p

如果用此參數(shù)指定了一個或幾個包空猜,Monkey將只允許系統(tǒng)啟動這些包里的Activity绽慈。如果你的應用程序還需要訪問其它包里的Activity(如選 擇取一個聯(lián)系人),那些包也需要在此同時指定辈毯。如果不指定任何包坝疼,Monkey將允許系統(tǒng)啟動全部包里的Activity。要指定多個包谆沃,需要使用多個

-p

選項钝凶,每個-p選項只能用于一個包。

-c?

如 果用此參數(shù)指定了一個或幾個類別唁影,Monkey將只允許系統(tǒng)啟動被這些類別中的某個類別列出的Activity耕陷。如果不指定任何類別,Monkey將選擇 下列類別中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY据沈。要指定多個類 別哟沫,需要使用多個-c選項,每個-c選項只能用于一個類別調(diào)試

--dbg-no-events?

設置此選項卓舵,Monkey將執(zhí)行初始啟動南用,進入到一個測試Activity,然后不會再進一步生成事件掏湾。為了得到最佳結果,把它與-v肿嘲、一個或幾個包約束融击、以及一個保持Monkey運行30秒或更長時間的非零值聯(lián)合起來,從而提供一個環(huán)境雳窟,可以監(jiān)視應用程序所調(diào)用的包之間的轉(zhuǎn)換尊浪。

--hprof

設置此選項,將在Monkey事件序列之前和之后立即生成profiling報告封救。這將會在data/misc中生成大文件(~5Mb)拇涤,所以要小心使用它。

--ignore-crashes

通常誉结,當應用程序崩潰或發(fā)生任何失控異常時鹅士,Monkey將停止運行。如果設置此選項惩坑,Monkey將繼續(xù)向系統(tǒng)發(fā)送事件掉盅,直到計數(shù)完成也拜。

--ignore-timeouts

通常,當應用程序發(fā)生任何超時錯誤(如“Application Not Responding”對話框)時趾痘,Monkey將停止運行慢哈。如果設置此選項,Monkey將繼續(xù)向系統(tǒng)發(fā)送事件永票,直到計數(shù)完成卵贱。

--ignore-security-exceptions

通常,當應用程序發(fā)生許可錯誤(如啟動一個需要某些許可的Activity) 時侣集,Monkey將停止運行键俱。如果設置了此選項,Monkey將繼續(xù)向系統(tǒng)發(fā)送事件肚吏,直到計數(shù)完成方妖。

--kill-process-after-error

通常,當Monkey由于一個錯誤而停止時罚攀,出錯的應用程序?qū)⒗^續(xù)處于運行狀態(tài)党觅。當設置了此選項時,將會通知系統(tǒng)停止發(fā)生錯誤的進程斋泄。注意杯瞻,正常的(成功的)結束,并沒有停止啟動的進程炫掐,設備只是在結束事件之后魁莉,簡單地保持在最后的狀態(tài)。

--monitor-native-crashes

監(jiān)視并報告Android系統(tǒng)中本地代碼的崩潰事件募胃。如果設置了--kill- process-after-error旗唁,系統(tǒng)將停止運行。--wait-dbg停止執(zhí)行中的Monkey痹束,直到有調(diào)試器和它相連接检疫。

2.monkey的簡單示例

adb shell monkey -p com.ganji.android.haoche_c -s 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --throttle 100 -v -v 100>e:\monkeytest1008.txt

【命令釋義monkey作用的包:com.ganji.android.haoche_c

產(chǎn)生時間序列的種子值:100,忽略程序崩潰祷嘶、忽略超時屎媳、忽略程序錯誤、監(jiān)視本地程序崩潰论巍、事件之間延遲時間設定為100ms烛谊、日志詳細信息級別為2 , 產(chǎn)生100個事件嘉汰,日志寫入e盤的monkeytest1008.txt文檔中 丹禀。】

五、Monkey日志分析

:Monkey: seed=100 count=100? /* seed:隨機種子數(shù)湃崩;count:事件總數(shù) */

:AllowPackage: com.ganji.android.haoche_c?? /* 包名? */

: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.bbkmusic.WidgetToTrackActivity (from package com.android.bbkmusic)

//?? - NOT USING main activity com.android.bbksoundrecorder.SoundRecorder (from package com.android.bbksoundrecorder)

//?? - NOT USING main activity com.android.camera.CameraActivity (from package com.android.camera)

//?? - NOT USING main activity com.android.contacts.DialtactsContactsEntryActivity (from package com.android.contacts)

//?? - NOT USING main activity com.android.dialer.TwelveKeyDialer (from package com.android.dialer)

//?? - NOT USING main activity com.android.mms.ui.ConversationList (from package com.android.mms)

//?? - NOT USING main activity com.android.settings.Settings (from package com.android.settings)

//?? - NOT USING main activity com.bbk.calendar.MainActivity (from package com.bbk.calendar)

//?? - NOT USING main activity com.bbk.theme.Theme (from package com.bbk.theme)

//?? - NOT USING main activity com.chaozh.iReader.ui.activity.WelcomeActivity (from package com.chaozh.iReader)

//?? - NOT USING main activity com.vivo.email.activity.Welcome (from package com.vivo.email)

//?? - NOT USING main activity com.android.gallery3d.vivo.GalleryTabActivity (from package com.vivo.gallery)

//?? - NOT USING main activity com.google.android.apps.chrome.Main (from package com.android.chrome)

//?? - NOT USING main activity com.cubic.autohome.LogoActivity (from package com.cubic.autohome)

//?? - NOT USING main activity org.hapjs.mockup.activity.MainActivity (from package org.hapjs.mockup)

//?? - NOT USING main activity com.android.BBKClock.Timer (from package com.android.BBKClock)

//?? - NOT USING main activity com.vivo.video.app.splash.SplashActivity (from package com.android.VideoPlayer)

//?? - NOT USING main activity com.android.bbkcalculator.Calculator (from package com.android.bbkcalculator)

//?? - NOT USING main activity com.android.filemanager.FileManagerActivity (from package com.android.filemanager)

//?? - NOT USING main activity com.android.notes.Notes (from package com.android.notes)

//?? - NOT USING main activity com.bbk.appstore.ui.AppStore (from package com.bbk.appstore)

//?? - NOT USING main activity com.bbk.cloud.activities.BBKCloudHomeScreen (from package com.bbk.cloud)

//?? - NOT USING main activity com.iqoo.secure.MainGuideActivity (from package com.iqoo.secure)

//?? - NOT USING main activity com.vivo.Tips.MainActivity (from package com.vivo.Tips)

//?? - NOT USING main activity com.vivo.browser.BrowserActivity (from package com.vivo.browser)

//?? - NOT USING main activity com.vivo.childrenmode.activity.ChildHomeActivity (from package com.vivo.childrenmode)

//?? - NOT USING main activity com.vivo.compass.CalibrationActivity (from package com.vivo.compass)

//?? - NOT USING main activity com.vivo.game.ui.LogoActivity (from package com.vivo.game)

//?? - NOT USING main activity com.vivo.space.ui.LogoActivity (from package com.vivo.space)

//?? - NOT USING main activity com.vivo.weather.WeatherMain (from package com.vivo.weather)

//?? - NOT USING main activity com.UCMobile.main.UCMobile (from package com.UCMobile)

//?? - NOT USING main activity com.android.bbk.lockscreen3.LockScreenActivity (from package com.android.bbk.lockscreen3)

//?? - NOT USING main activity com.bbk.iqoo.feedback.activities.UserFeedBackActivity (from package com.bbk.iqoo.feedback)

//?? - NOT USING main activity com.guazi.crm.modules.splash.SplashActivity (from package com.ganji.android.haoche)

//?? - NOT USING main activity com.squareup.leakcanary.internal.DisplayLeakActivity (from package com.ganji.android.haoche)

//?? - NOT USING main activity com.github.moduth.blockcanary.ui.DisplayActivity (from package com.ganji.android.haoche)

//?? + Using main activity com.ganji.android.haoche_c.ui.main.MainActivity (from package com.ganji.android.haoche_c)

//?? - NOT USING main activity com.guazi.android.expert.activity.SplashLoginActivity (from package com.guazi.android.expert)

//?? - NOT USING main activity com.guazi.newcar.modules.splash.SplashActivity (from package com.guazi.newcar)

//?? - NOT USING main activity com.squareup.leakcanary.internal.DisplayLeakActivity (from package com.guazi.newcar)

//?? - NOT USING main activity com.guazi.polaris.SplashActivity (from package com.guazi.polaris)

//?? - NOT USING main activity com.ijinshan.browser.screen.SplashActivity (from package com.ijinshan.browser_fast)

//?? - NOT USING main activity com.jingdong.app.mall.main.MainActivity (from package com.jingdong.app.mall)

//?? - NOT USING main activity com.lucky.luckyclient.splash.splash.SplashActivity (from package com.lucky.luckyclient)

//?? - NOT USING main activity com.maintain.verify.activity.SplashActivity (from package com.maintain.verify)

//?? - NOT USING main activity com.renrenche.carapp.ui.activity.SplashActivity (from package com.renrenche.carapp)

//?? - NOT USING main activity?com.meituan.android.pt.homepage.activity.Welcome (from package com.sankuai.meituan)

//?? - NOT USING main activity com.sina.weibo.SplashActivity (from package com.sina.weibo)

//?? - NOT USING main activity com.taobao.tao.welcome.Welcome (from package com.taobao.taobao)

//?? - NOT USING main activity?com.tencent.mm.ui.LauncherUI (from package?com.tencent.mm)

//?? - NOT USING main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqq)

//?? - NOT USING main activity com.tencent.mtt.SplashActivity (from package com.tencent.mtt)

//?? - NOT USING main activity com.tencent.news.activity.SplashActivity (from package com.tencent.news)

//?? - NOT USING main activity com.tencent.qqlive.ona.activity.WelcomeActivity (from package com.tencent.qqlive)

//?? - NOT USING main activity com.uxin.usedcar.ui.fragment.SplashActivity (from package com.uxin.usedcar)

//?? - NOT USING main activity com.vivo.easyshare.activity.SplashScreenActivity (from package com.vivo.easyshare)

//?? - NOT USING main activity com.pp.assistant.activity.PPMainActivity (from package com.wandoujia.phoenix2)

//?? - NOT USING main activity com.wuba.activity.launch.LaunchActivity (from package com.wuba)

//?? - NOT USING main activity com.zhihu.android.app.ui.activity.LauncherActivity (from package com.zhihu.android)

//?? - NOT USING main activity ctrip.business.splash.CtripSplashActivity (from package ctrip.android.view)

//?? - NOT USING main activity io.appium.settings.Settings (from package io.appium.settings)

//?? - NOT USING main activity io.appium.unlock.Unlock (from package io.appium.unlock)

//?? - NOT USING main activity org.hapjs.debugger.MainActivity (from package org.hapjs.debugger)

//?? - NOT USING main activity sogou.mobile.explorer.NoDisplayActivity (from package sogou.mobile.explorer)

// Selecting main activities from category android.intent.category.MONKEY

//?? - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)

//?? - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)

//?? - NOT USING main activity com.bbk.launcher2.Launcher (from package com.bbk.launcher2)

//?? - NOT USING main activity com.bbk.scene.launcher.theme.SceneLauncherThemeMainActivity (from package com.bbk.scene.launcher.theme)

//?? - NOT USING main activity com.iqoo.engineermode.EngineerMode (from package com.iqoo.engineermode)

//?? - NOT USING main activity com.vivo.childrenmode.activity.MainActivity (from package com.vivo.childrenmode)

// Seeded: 100

// Event percentages:

//?? 0: 15.0% ? /* 0:觸摸事件百分比荧降,即參數(shù)--pct-touc */?

//?? 1: 10.0%?? /* 1:滑動事件百分比,即參數(shù)--pct-motion */

//?? 2: 2.0%???? /* 2:縮放事件百分比攒读,即參數(shù)--pct-pinchzoom */

//?? 3: 15.0%?? /* 3:軌跡球事件百分比朵诫,即參數(shù)--pct-trackball */

//?? 4: -0.0%?? /* 4:屏幕旋轉(zhuǎn)事件百分比,即參數(shù)--pct-rotation */

//?? 5: -0.0%?? /* 5:基本導航事件百分比薄扁,即參數(shù)--pct-nav */

//?? 6: 25.0%? /* 6:主要導航事件百分比剪返,即參數(shù)--pct-majornav */

//?? 7: 15.0%? /* 7:系統(tǒng)事件百分比,即參數(shù)--pct-syskeys */

//?? 8: 2.0%?? /* 8:Activity啟動事件百分比邓梅,即參數(shù)--pct-appswitch */

//?? 9: 2.0%?? /* 9:鍵盤翻轉(zhuǎn)事件百分比脱盲,即參數(shù)--pct-flip */

//?? 10: 14.0% /* 10:其他事件百分比,即參數(shù)--pct-anyevent */

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.ganji.android.haoche_c/.ui.main.MainActivity;end

// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.ganji.android.haoche_c/.ui.main.MainActivity } in package com.ganji.android.haoche_c

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 82??? // KEYCODE_MENU

:Sending Key (ACTION_UP): 82??? // KEYCODE_MENU

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 23??? // KEYCODE_DPAD_CENTER

:Sending Key (ACTION_UP): 23??? // KEYCODE_DPAD_CENTER

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(236.0,1448.0)

:Sending Touch (ACTION_UP): 0:(239.6952,1450.5131)

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(817.0,672.0)

:Sending Touch (ACTION_MOVE): 0:(806.7215,674.58936)

// Rejecting start of Intent { cmp=com.vivo.upslide/.recents.RecentsActivity } in package com.vivo.upslide

:Sending Touch (ACTION_MOVE): 0:(796.983,678.33875)

:Sending Touch (ACTION_MOVE): 0:(777.5646,682.8886)

:Sending Touch (ACTION_MOVE): 0:(760.08307,683.68207)

:Sending Touch (ACTION_MOVE): 0:(753.2682,686.4697)

:Sending Touch (ACTION_MOVE): 0:(744.06885,686.58435)

:Sending Touch (ACTION_MOVE): 0:(732.9116,692.0274)

:Sending Touch (ACTION_MOVE): 0:(720.2788,693.7811)

:Sending Touch (ACTION_UP): 0:(704.8928,701.56537)

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(268.0,1826.0)

:Sending Touch (ACTION_UP): 0:(264.17523,1823.462)

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 19??? // KEYCODE_DPAD_UP

:Sending Key (ACTION_UP): 19??? // KEYCODE_DPAD_UP

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 23??? // KEYCODE_DPAD_CENTER

:Sending Key (ACTION_UP): 23??? // KEYCODE_DPAD_CENTER

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 19??? // KEYCODE_DPAD_UP

:Sending Key (ACTION_UP): 19??? // KEYCODE_DPAD_UP

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(336.0,359.0)

:Sending Touch (ACTION_MOVE): 0:(340.20886,357.3222)

:Sending Touch (ACTION_MOVE): 0:(342.71722,353.41183)

:Sending Touch (ACTION_MOVE): 0:(346.9966,350.894)

:Sending Touch (ACTION_MOVE): 0:(355.95114,348.16638)

:Sending Touch (ACTION_MOVE): 0:(358.57358,344.2732)

:Sending Touch (ACTION_UP): 0:(367.2303,344.00336)

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 242??? // KEYCODE_TV_ANTENNA_CABLE

:Sending Key (ACTION_UP): 242??? // KEYCODE_TV_ANTENNA_CABLE

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 21??? // KEYCODE_DPAD_LEFT

:Sending Key (ACTION_UP): 21??? // KEYCODE_DPAD_LEFT

Sleeping for 0 milliseconds

:Sending Trackball (ACTION_MOVE): 0:(-4.0,-1.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-3.0)

:Sending Trackball (ACTION_MOVE): 0:(-3.0,2.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,1.0)

:Sending Trackball (ACTION_MOVE): 0:(1.0,3.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)

:Sending Trackball (ACTION_MOVE): 0:(-4.0,-1.0)

:Sending Trackball (ACTION_MOVE): 0:(-3.0,-2.0)

:Sending Trackball (ACTION_MOVE): 0:(3.0,1.0)

:Sending Trackball (ACTION_MOVE): 0:(3.0,-5.0)

:Sending Key (ACTION_DOWN): 23??? // KEYCODE_DPAD_CENTER

:Sending Key (ACTION_UP): 23??? // KEYCODE_DPAD_CENTER

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(546.0,1255.0)

:Sending Touch (ACTION_UP): 0:(538.475,1257.1292)

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 23??? // KEYCODE_DPAD_CENTER

:Sending Key (ACTION_UP): 23??? // KEYCODE_DPAD_CENTER

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(788.0,1096.0)

:Sending Touch (ACTION_UP): 0:(785.90125,1099.7758)

Sleeping for 0 milliseconds

:Sending Touch (ACTION_DOWN): 0:(440.0,1768.0)

:Sending Touch (ACTION_MOVE): 0:(443.97714,1764.4805)

:Sending Touch (ACTION_MOVE): 0:(452.77997,1757.93)

:Sending Touch (ACTION_MOVE): 0:(454.22604,1757.2743)

:Sending Touch (ACTION_MOVE): 0:(463.5927,1757.0007)

:Sending Touch (ACTION_MOVE): 0:(472.0165,1752.8053)

:Sending Touch (ACTION_MOVE): 0:(475.4624,1751.4882)

:Sending Touch (ACTION_MOVE): 0:(482.6616,1745.5962)

:Sending Touch (ACTION_UP): 0:(489.12665,1742.0593)

Sleeping for 0 milliseconds

:Sending Flip keyboardOpen=false

Got IOException performing?flipjava.io.IOException: write failed: EINVAL (Invalid argument)

// Injection Failed

Sleeping for 0 milliseconds

:Sending Trackball (ACTION_MOVE): 0:(-4.0,0.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)

// Allowing start of Intent { cmp=com.ganji.android.haoche_c/.ui.html5.Html5Activity } in package com.ganji.android.haoche_c

:Sending Trackball (ACTION_MOVE): 0:(3.0,1.0)

:Sending Trackball (ACTION_MOVE): 0:(3.0,3.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(2.0,2.0)

:Sending Trackball (ACTION_MOVE): 0:(-3.0,-3.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(0.0,3.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,0.0)

:Sending Key (ACTION_DOWN): 20??? // KEYCODE_DPAD_DOWN

:Sending Key (ACTION_UP): 20??? // KEYCODE_DPAD_DOWN

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 20??? // KEYCODE_DPAD_DOWN

:Sending Key (ACTION_UP): 20??? // KEYCODE_DPAD_DOWN

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 135??? // KEYCODE_F5

:Sending Key (ACTION_UP): 135??? // KEYCODE_F5

Sleeping for 0 milliseconds

:Sending Trackball (ACTION_MOVE): 0:(-4.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(0.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(-5.0,4.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,3.0)

:Sending Trackball (ACTION_MOVE): 0:(2.0,-1.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,-3.0)

:Sending Trackball (ACTION_MOVE): 0:(1.0,3.0)

:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)

:Sending Trackball (ACTION_MOVE): 0:(-3.0,0.0)

:Sending Trackball (ACTION_MOVE): 0:(4.0,-5.0)

:Sending Key (ACTION_DOWN): 22??? // KEYCODE_DPAD_RIGHT

:Sending Key (ACTION_UP): 22??? // KEYCODE_DPAD_RIGHT

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 19??? // KEYCODE_DPAD_UP

:Sending Key (ACTION_UP): 19??? // KEYCODE_DPAD_UP

Sleeping for 0 milliseconds

:Sending Key (ACTION_DOWN): 20??? // KEYCODE_DPAD_DOWN

:Sending Key (ACTION_UP): 20??? // KEYCODE_DPAD_DOWN

Sleeping for 0 milliseconds

:Sending Trackball (ACTION_MOVE): 0:(3.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(2.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,1.0)

:Sending Trackball (ACTION_MOVE): 0:(0.0,-2.0)

Events injected: 100

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=0 trackballs=0 flips=1 rotations=0

## Network stats: elapsed time=483ms (0ms mobile, 0ms wifi, 483ms not connected)

// Monkey finished

查看Monkey日志日缨,初步分析方法:

Monkey測試出現(xiàn)錯誤后钱反,一般的差錯步驟為以下幾步:

1、 找到是monkey里面的哪個地方出錯(如(快捷鍵Ctrl+f)搜索crash匣距,查看crash位置前后是否有當前app的包名面哥,如果有,則定位到crash由app引起的)

2毅待、 查看Monkey里面出錯前的一些事件動作尚卫,并手動執(zhí)行該動作

3、 若以上步驟還不能找出尸红,可以使用之前執(zhí)行的monkey命令再執(zhí)行一遍吱涉,注意seed值要一樣

一般的測試結果分析:

1、 ANR問題(無響應問題):在日志中搜索“ANR”

2外里、 崩潰問題:在日志中搜索“Exception”

六怎爵、個人在Monkey中常遇見的問題

1、 真機用adb shell命令時出現(xiàn)以下提示:

* daemon not running. starting it now on port 5037 *

* daemon started successfully *

error: device not found

解決方案:①查看下手機設置 USB Debugging 是否開啟盅蝗?

②試試重啟adb:adb kill-server

adb start-server

adb remount

③小米手機需要在彈出的對話框點確定允許調(diào)試疙咸。

2、跑monkey的時候想抓程序log導出時风科,有時會提示:cannot create D:monkeytest.txt: read-only file system

為什么有時候可以有時候不可以?后來發(fā)現(xiàn)跟使用使用習慣不一樣有關乞旦。有時候是先進入adb shell 再用命令贼穆,有時候是直接命令進入。進入adb shell后再用命令就會失敗兰粉,進入adb shell后就相當于進入linux的root下面故痊,沒有權限在里面創(chuàng)建文件。正確方法:退出shell或者執(zhí)行命令時先不要進shell玖姑。

3愕秫、跑monkey的時候慨菱,如果出現(xiàn)特殊情況需要強行停止,如(斷網(wǎng)等干擾)

停止monkey的方式:1戴甩、adb shell(登錄設備)? 2符喝、top|grep "monkey" (實時查詢monkey的進程號) 3、kill -9 31819(-9:強制殺死進程甜孤;31819為查詢出來的進程號)

4协饲、monkey的隨機事件可以幫助我們發(fā)現(xiàn)app中的一些缺陷,但是這些“隨機”也會給我們帶來一些困擾

手機經(jīng)常會在一個頁面出不去缴川,其他業(yè)務測試不到

手機網(wǎng)絡關掉后茉稠,導致APP大部分在無網(wǎng)情況下運行,一些業(yè)務測試不到

怎樣才能知道手機跑monkey時候的運行狀態(tài)把夸,如內(nèi)存

1.手機經(jīng)常會在一個頁面出不去而线,其他業(yè)務測試不到

手機會困在一個頁面出不去。那我們需要做的就是在跑Monkey的間隔把APP從頁面推出去恋日。

一個方法是使用“back”鍵退出程序:adb shell input keyevent 4?循環(huán)幾次就可以退出去了

但是現(xiàn)實中還是有退不出的情況膀篮,怎么辦?

另一個方案就是強制退出:adb shell am force-stop yourPkgName

2.手機網(wǎng)絡關掉后谚鄙,導致APP大部分在無網(wǎng)情況下運行各拷,一些業(yè)務測試不到

目前的方案就是停止monkey,在網(wǎng)絡環(huán)境好的情況下重新跑monkey:1闷营、adb shell(登錄設備)? 2烤黍、top|grep "monkey" (實時查詢monkey的進程號) 3、kill -9 31819(-9:強制殺死進程傻盟;31819為查詢出來的進程號)

3.怎樣才能知道手機跑monkey時候的運行狀態(tài)速蕊,如內(nèi)存

adb shell cat /proc/meminfo

運行這個命令,就可以獲取相關的內(nèi)存信息了娘赴。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末规哲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诽表,更是在濱河造成了極大的恐慌唉锌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竿奏,死亡現(xiàn)場離奇詭異袄简,居然都是意外死亡,警方通過查閱死者的電腦和手機泛啸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門绿语,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事吕粹≈指蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵匹耕,是天一觀的道長聚请。 經(jīng)常有香客問我,道長泌神,這世上最難降的妖魔是什么良漱? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮欢际,結果婚禮上母市,老公的妹妹穿的比我還像新娘。我一直安慰自己损趋,他們只是感情好患久,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浑槽,像睡著了一般蒋失。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桐玻,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天篙挽,我揣著相機與錄音,去河邊找鬼镊靴。 笑死铣卡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的偏竟。 我是一名探鬼主播煮落,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踊谋!你這毒婦竟也來了蝉仇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤殖蚕,失蹤者是張志新(化名)和其女友劉穎轿衔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦疫,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡呀枢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了笼痛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缨伊,靈堂內(nèi)的尸體忽然破棺而出摘刑,到底是詐尸還是另有隱情,我是刑警寧澤刻坊,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布枷恕,位于F島的核電站,受9級特大地震影響谭胚,放射性物質(zhì)發(fā)生泄漏徐块。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一灾而、第九天 我趴在偏房一處隱蔽的房頂上張望胡控。 院中可真熱鬧,春花似錦旁趟、人聲如沸昼激。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橙困。三九已至,卻和暖如春耕餐,著一層夾襖步出監(jiān)牢的瞬間凡傅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工肠缔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夏跷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓桩砰,卻偏偏與公主長得像拓春,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亚隅,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容