Android monkey测试

monkey并不算自动化测试,它的原理就是到处乱点,帮我们发现程序崩溃bug,并不能发现流程逻辑上面的漏洞。

使用总结:

1、使用小米手机时,总是测试失败,需要打开USB调试(安全设置),如下图:


2、最简单应用,测试指定包名的应用

E:\SVN\target\xxx>adb shell monkey -p 包名 -v 10
:Monkey: seed=1499203165061 count=10
:AllowPackage: 包名
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: -0.0%
//   6: 25.0%
//   7: 15.0%
//   8: 2.0%
//   9: 2.0%
//   10: 1.0%
//   11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=包名/.init.ActivityLoading;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=包名/.init.ActivityLoading } in package 包名
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=包名/.init.ActivityLoading } in package 包名
:Sending Touch (ACTION_DOWN): 0:(953.0,1467.0)
:Sending rotation degree=0, persist=false
可以看到信息很简单,甚至连Monkey finished都没有,使用-v -v -v可以输出详细信息。
E:\SVN\target\xxx>adb shell monkey -p 包名 -v -v -v 10
:Monkey: seed=1499202844204 count=10
:AllowPackage: 包名
: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.contacts.activities.PeopleActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.contacts.activities.TwelveKeyDialer (from package com.android.contacts)
//   - NOT USING main activity com.android.camera.Camera (from package com.android.camera)
//   - NOT USING main activity com.miui.gallery.activity.HomePageActivity (from package com.miui.gallery)
//   - NOT USING main activity com.android.mms.ui.MmsTabActivity (from package com.android.mms)
//   - NOT USING main activity com.android.settings.MainSettings (from package com.android.settings)
//   - NOT USING main activity com.android.deskclock.DeskClockTabActivity (from package com.android.deskclock)
//   - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
//   - NOT USING main activity com.miui.notes.ui.NotesListActivity (from package com.miui.notes)
//   - NOT USING main activity com.android.thememanager.ThemeResourceTabActivity (from package com.android.thememanager)
//   - NOT USING main activity com.mipay.wallet.ui.MipayEntryActivity (from package com.mipay.wallet)
//   - NOT USING main activity com.android.calendar.homepage.AllInOneActivity (from package com.android.calendar)
//   - NOT USING main activity com.miui.calculator.cal.CalculatorActivity (from package com.miui.calculator)
//   - NOT USING main activity com.miui.weather2.ActivityWeatherMain (from package com.miui.weather2)
//   - NOT USING main activity com.android.fileexplorer.FileExplorerTabActivity (from package com.android.fileexplorer)
//   - NOT USING main activity com.xiaomi.market.ui.MarketTabActivity (from package com.xiaomi.market)
//   - NOT USING main activity com.xiaomi.scanner.app.ScanActivity (from package com.xiaomi.scanner)
//   - NOT USING main activity com.android.browser.BrowserActivity (from package com.android.browser)
//   - NOT USING main activity com.xiaomi.jr.CTAActivity (from package com.xiaomi.jr)
//   - NOT USING main activity com.miui.securityscan.MainActivity (from package com.miui.securitycenter)
//   - NOT USING main activity com.android.stk.StkMain (from package com.android.stk)
//   - NOT USING main activity com.miui.virtualsim.ui.MainActivity (from package com.miui.virtualsim)
//   - NOT USING main activity com.miui.bugreport.ui.MainTabActivity (from package com.miui.bugreport)
//   - NOT USING main activity com.miui.fmradio.FmActivity (from package com.miui.fm)
//   - NOT USING main activity com.miui.compass.CompassActivity (from package com.miui.compass)
//   - NOT USING main activity com.android.soundrecorder.SoundRecorder (from package com.android.soundrecorder)
//   - NOT USING main activity com.android.updater.MainActivity (from package com.android.updater)
//   - NOT USING main activity com.xiaomi.account.ui.AccountSettingsActivity (from package com.xiaomi.account)
//   - NOT USING main activity com.miui.player.ui.MusicBrowserActivity (from package com.miui.player)
//   - NOT USING main activity com.xiaomi.gamecenter.ui.MainTabActivity (from package com.xiaomi.gamecenter)
//   - NOT USING main activity com.miui.voiceassist.CTAAlertActivity (from package com.miui.voiceassist)
//   - NOT USING main activity com.android.providers.downloads.ui.DownloadList (from package com.android.providers.downloads.ui)
//   - NOT USING main activity com.miui.video.HomeActivity (from package com.miui.video)
//   - NOT USING main activity com.ht.xinge.MainActivity (from package com.ht.xinge)
//   - NOT USING main activity com.ht.test.MainActivity (from package com.ht.test)
//   - NOT USING main activity com.keniu.security.main.MainActivity (from package com.cleanmaster.mguard_cn)
//   - NOT USING main activity com.hiten.hec.initAct (from package com.hiten.epc)
//   - NOT USING main activity com.duokan.reader.DkReaderActivity (from package com.duokan.reader)
//   - NOT USING main activity com.mi.vtalk.business.MiVTalkMainActivity (from package com.mi.vtalk)
//   - NOT USING main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqq)
//   - NOT USING main activity com.ht.testtouch.MainActivity (from package com.ht.testtouch)
//   - NOT USING main activity com.hiten.ble.LoginAct (from package com.hiten.ble)
//   - NOT USING main activity com.getui.demo.GetuiSdkDemoActivity (from package com.getui.demo)
//   - NOT USING main activity com.ht.websocket.MainActivity (from package com.ht.websocket)
//   - NOT USING main activity com.qiyi.video.WelcomeActivity (from package com.qiyi.video)
//   - NOT USING main activity com.ht.amap.MainActivity (from package com.ht.amap)
//   - NOT USING main activity com.sina.weibo.SplashActivity (from package com.sina.weibo)
//   - NOT USING main activity com.yidian.xiaomi.ui.guide.UserGuideActivity (from package com.yidian.xiaomi)
//   - NOT USING main activity com.ximalaya.ting.android.activity.account.WelComeActivity (from package com.ximalaya.ting.android)
//   - NOT USING main activity com.github.florent37.beautifulparallax.sample.MainActivity (from package com.github.florent37.beautifulparallax.sample)
//   - NOT USING main activity com.xiaomi.mitv.phone.remotecontroller.HoriWidgetMainActivityV2 (from package com.duokan.phone.remotecontroller)
//   - NOT USING main activity com.xiaomi.shop.activity.MainTabActivity (from package com.xiaomi.shop)
//   - NOT USING main activity com.xiaomi.smarthome.SmartHomeMainActivity (from package com.xiaomi.smarthome)
//   - NOT USING main activity com.xiaomi.o2o.activity.O2OTabActivity (from package com.xiaomi.o2o)
//   - NOT USING main activity com.xiaomi.channel.ui.ChannelLauncherActivity (from package com.xiaomi.channel)
//   - NOT USING main activity com.wali.live.main.LiveMainActivity (from package com.wali.live)
//   - NOT USING main activity com.autonavi.map.activity.SplashActivity (from package com.autonavi.minimap)
//   - NOT USING main activity cn.wps.moffice.documentmanager.PreStartActivity (from package cn.wps.moffice_eng)
//   - NOT USING main activity com.mqunar.splash.SplashActivity (from package com.Qunar)
//   + Using main activity xxx.init.ActivityLoading (from package xxx)
// Selecting main activities from category android.intent.category.MONKEY
//   - NOT USING main activity com.miui.mipub.ui.cvlist.ConversationListActivity (from package com.miui.mipub)
//   - NOT USING main activity com.miui.home.launcher.Launcher (from package com.miui.home)
//   - NOT USING main activity com.mipay.wallet.ui.MipayEntryActivity (from package com.mipay.wallet)
//   - NOT USING main activity com.xiaomi.payment.MiliCenterEntryActivity (from package com.xiaomi.payment)
//   - NOT USING main activity com.miui.virtualsim.monkeyentry.MonkeyActivity (from package com.miui.virtualsim)
//   - NOT USING main activity com.xiaomi.vip.ui.monkeyentry.MonkeyActivity (from package com.xiaomi.vip)
// Seeded: 1499202844204
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: -0.0%
//   6: 25.0%
//   7: 15.0%
//   8: 2.0%
//   9: 2.0%
//   10: 1.0%
//   11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=xxx/.init.ActivityLoading;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=xxx/.init.ActivityLoading } in package xxx
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=xxx/.init.ActivityLoading } in package xxx
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 11    // KEYCODE_4
:Sending Key (ACTION_UP): 11    // KEYCODE_4
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): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(863.0,1678.0)
:Sending Touch (ACTION_MOVE): 0:(864.73267,1664.1354)
:Sending Touch (ACTION_MOVE): 0:(867.6645,1649.1085)
Events injected: 10
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=58ms (0ms mobile, 0ms wifi, 58ms not connected)
// Monkey finished

3、设置每次模拟点击时间间隔

E:\SVN\target\xxx>adb shell monkey -p 包名 -v -v -v --throttle 100 1000
间隔100毫秒,执行1000次
4、如何停止monkey测试

在adb shell中执行:

ps | grep monkey  

上图中可以看到,有monkey进程在后台运行,id为15248,然后我们可以运行kill命令,来杀死该进程。执行如下命令:

kill pid(如上图中的15248)即可。

5、自动测试

我们不可能随时盯着terminal看log日志输出,我们需要系统自动帮我们完成测试,我们只需要知道测试过程中发生的异常,以后复现异常并解决它。

E:\SVN\target\xxx>adb shell monkey -p 包名 -v --ignore-crashes -s 20170704 --throttle 100 1000 >monkeytest.txt
这段代码的意思就是:

--ignore-crashes   忽略异常,就算碰到异常不会停止测试,有助于我们完整的测试;

-s 20170704  设置一个seed值,monkey测试的操作次序是伪随机生成的,所以设置相同的seed可以保证两次测试操作次序完全一致,有助于我们复现和验证bug;

>monkeytest.txt 生成一个txt文件放在项目的根目录下,所有的异常可以在这里找到。

6、日志分析
正常情况,  如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成。
Monkey 测试出现错误后,一般的分析步骤:
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”;
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug。
Monkey 执行中断, 在log最后也能看到当前执行次数。


参考:

http://www.cnblogs.com/TankXiao/p/4815134.html

http://www.jianshu.com/p/c2aca7019ddf

如何停止Monkey测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值