Android测试-Monkey Test
APP開發過程中,開人員往往自己做一些功能測試和穩定性測試,使用MonkeyTest做壓力測試是常用方法,及時修復ANR、CRASH提高項目組整體的開發效率。
一、Monkey簡介
Monkey是一種命令行工具,這個工具存在于Android系統/system/framework/monkey.jar,Android設備/模擬器連接到PC后通過adb shell使用此工具,monkey測試流程如下。
因此兩種方式使用monkey,第一種在PC端直接運行命令行:
adb shell monkey --[params]第二種進入shell中使用:
adb shell> shell@android: monkey --[params]二、基本使用
使用如下命令進行monkey測試:
adb shell monkey -p org.blackist.modulize --throttle 100 -v -v 100 > test.log- -p org.blackist.modulize:測試包名為org.blackist.modulize
- –throttle 100:每100ms發送一次事件
- -v -v:指定日志級別
- > test.log:輸出日志到文件
如下是monkey日志中測試到的ANR和CRASH:
Sleeping for 100 milliseconds :Sending Key (ACTION_DOWN): 23 // KEYCODE_DPAD_CENTER // CRASH: cn.edu.zstu.sdmp (pid 17698) // Short Msg: java.lang.NullPointerException // Long Msg: java.lang.NullPointerException: Attempt to invoke virtual method 'com.wuhenzhizao.titlebar.widget.CommonTitleBar cn.edu.zstu.sdmp.manage.view.ManageActivity.getCommonTitle()' on a null object reference // Build Label: vivo/PD1603/PD1603:5.1.1/LMY47V/compiler07131528:user/release-keys // Build Changelist: eng.compiler.20180713.152451 // Build Time: 1531466945000 // java.lang.NullPointerException: Attempt to invoke virtual method 'com.wuhenzhizao.titlebar.widget.CommonTitleBar cn.edu.zstu.sdmp.manage.view.ManageActivity.getCommonTitle()' on a null object reference // at cn.edu.zstu.sdmp.manage.view.repair.RepairDetailFragment.initView(RepairDetailFragment.java:153) // at cn.edu.zstu.sdmp.manage.view.repair.RepairDetailFragment.initViewAndData(RepairDetailFragment.java:113) // at cn.edu.zstu.sdmp.common.base.BaseFragment.onCreateView(BaseFragment.java:135) // at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354) // at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419) // at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740) // at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809) // at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799) // at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580) // at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367) // at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322) // at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229) // at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700) // at android.os.Handler.handleCallback(Handler.java:739) // at android.os.Handler.dispatchMessage(Handler.java:95) // at android.os.Looper.loop(Looper.java:135) // at android.app.ActivityThread.main(ActivityThread.java:5418) // at java.lang.reflect.Method.invoke(Native Method) // at java.lang.reflect.Method.invoke(Method.java:372) // at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037) // at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) // // NOT RESPONDING: cn.edu.zstu.sdmp (pid 17698) ANR in cn.edu.zstu.sdmp (cn.edu.zstu.sdmp/.manage.view.ManageActivity) PID: 17698 Reason: Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it. Outbound queue length: 0. Wait queue length: 1.)可以清楚分析出錯誤所在的地方,所以monkey是個物美價廉的測試工具啊~
三、參數說明
monkey工具參數如下(圖片來源):
3.1 基礎參數
-p <允許的包名列表>
用此參數指定一個或多個包。指定包之后,monkey將只允許系統啟動指定的app。如果不指定包, monkey將允許系統啟動設備中的所有app。
指定一個包:adb shell monkey -p org.blackist.modulize 100
指定多個包:adb shell monkey -p org.blackist.modulize –p org.blackist.brouter 100
-v
用亍指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應的參數如下:
Level 0 : adb shell monkey -p org.blackist.modulize -v 100 // 缺省值,僅提供啟動提示、測試完成和最終結果等少量信息
Level 1 : adb shell monkey -p org.blackist.modulize -v -v 100 // 提供較為詳細的日志,包括每個發送到Activity的事件信息
Level 2 : adb shell monkey -p org.blackist.modulize -v -v -v 100 // 最詳細的日志,包括了測試中選中/未選中的Activity信息
一般來說,使用Level0即可。
-s (隨機數種子)
用亍指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。 示例:
monkey測試1:adb shell monkey -p org.blackist.modulize –s 101 100
monkey測試2:adb shell monkey -p org.blackist.modulize –s 101 100
這個參數其實比較重要,比如我們只看日志不容易確定錯誤位置,需要結合monkey的UI測試過程,這時需要執行相同的隨機序列復現步驟。
–throttle (延時ms)
用亍指定用戶操作(即事件)間的時延,單位是毫秒;如果不指定這個參數,monkey會盡可能快地生成和發送消息。 示例:
adb shell monkey -p org.blackist.modulize --throttle 3000 100
3.2 發送的事件類型
–pct-touch (點擊事件)
參數percent為此事件的百分比,比如要求monkey完成10次點擊事件:
adb shell monkey -p org.blackist.modulize -v --pct-touch 100 10可以看到如下日志,Event percentages是事件百分比,點擊事件100%,其余都是0:
:Monkey: seed=1552849997195 count=10 :AllowPackage: cn.edu.zstu.sdmp :IncludeCategory: android.intent.category.LAUNCHER :IncludeCategory: android.intent.category.MONKEY // Event percentages: // 0: 100.0% // 1: 0.0% // 2: 0.0% // 3: 0.0% // 4: -0.0% // 5: 0.0% // 6: 0.0% // 7: 0.0% // 8: 0.0% // 9: 0.0% // 10: 0.0% :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=cn.edu.zstu.sdmp/.main.view.SplashActivity;end// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cn.edu.zstu.sdmp/.main.view.SplashActivity } in package cn.edu.zstu.sdmp–pct-motion (動作事件)
–pct-trackball (軌跡球事件)
–pct-nav (基本導航事件,輸入設備的上、下、左、右)
–pct-majornav (主要導航事件,兼容中間鍵,返回鍵,菜單按鍵)
–pct-syskeys (系統導航事件,HOME、BACK及撥號音量鍵)
–pct-appswitch (啟動App事件)
–pct-anyevent (不常用事件)
–ignore-crashes (忽略崩潰事件 CRASH)
–ignore-timeouts (忽略超時事件 ANR)
日志分析
monkey test 執行后分析保存的日志,可以搜索CRASH、ANR、Exception等關鍵字查看錯誤信息,詳細的日志分析參考http://www.cnblogs.com/wfh1988/archive/2010/11/16/1878224.html
參考
https://yuti.site/2019/03/02/MonkeyTesting/?tdsourcetag=s_pctim_aiomsg
https://www.cnblogs.com/TankXiao/p/4815134.html
https://blog.csdn.net/gzh0222/article/details/6631988
https://blog.csdn.net/viewsky11/article/details/53889143
https://www.cnblogs.com/TankXiao/p/4815134.html
https://blog.csdn.net/MTbaby/article/details/78792215
(完)
總結
以上是生活随笔為你收集整理的Android测试-Monkey Test的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程NEW状态和RUNNABLE状态
- 下一篇: Python3爬虫(十一) 爬虫与反爬虫