前面的內(nèi)容請參見Android應用自動化測試-提綱酒繁。
這篇起滓彰,我們來介紹Android自動化測試,首先我們要看到是一個基本工具州袒,也是在實際項目中最經(jīng)常用到的一個自動化的測試工具-Monkey揭绑。
Monkey,顧名思義郎哭,也叫猴子測試他匪。一般指無目的地隨機測試,就像一個猴子在那亂按亂點彰居。它是Android SDK中自帶的一個黑盒自動化測試工具按傅,通過隨機觸發(fā)界面事件來發(fā)現(xiàn)應用的問題丈钙,一般多用于App的穩(wěn)定性測試和異常發(fā)現(xiàn)。但Monkey工具其實觸發(fā)的是一個偽隨機的事件流禀挫,也就是這個事件流并不會完全隨機的毕籽。
它的命令格式是:
adb shell monkey [options] <event_count>
官網(wǎng)給出了Monkey測試的主要參數(shù)及其用法
還有一些其他參數(shù)如:
-f -- 指定腳本
--port -- 指定連接monkeyserver的端口
pkg-blacklist-file -- 包黑名單关筒,不觸發(fā)名單中的包
pkg-whitelist-file -- 包白名單溶握,僅觸發(fā)名單中的包
這里我們來看下常用的幾個參數(shù)含義:
-h 打印出Monkey的基本使用方法
-v 這是一個重要的參數(shù),monkey通過-v參數(shù)來確定執(zhí)行輸出日志的詳細程度蒸播,支持3級睡榆,給出-v -v -v則輸出最詳細的日志信息萍肆。
-s 前面提過,monkey工具是一個偽隨機事件流胀屿,-s參數(shù)則代表執(zhí)行的事件種子塘揣,通過這個事件種子號,我們可以生成同樣的一套事件流宿崭,在我們發(fā)現(xiàn)問題亲铡,需要復現(xiàn)時,這個參數(shù)就非常重要了葡兑。
--throttle 延時參數(shù)奖蔓,單位是毫秒,是執(zhí)行中每兩個事件之間的時間間隔讹堤,不知道則默認為0
--pct-touch 指定在當前事件流所有的事件中吆鹤,觸屏事件的占比,其他的pct事件也類似洲守,具體代表的事件可以參見前面的官方說明
-p 通過給定包名指定被測應用
-c 確定一個或多個特定的類別疑务,Monkey就只允許系統(tǒng)去訪問這些特定類別下列出的Activity了。若不指定的話岖沛,默認訪問Intent.CATEGORY_LAUNCHER 或Intent.CATEGORY_MONKEY下的Activity
主要的category:
- intent.CATEGORY.ALTERNATIVE
- intent.CATEGORY.BROWSABLE
- intent.CATEGORY.DEFAULT
- intent.CATEGORY.DEVELOPMENT_PREFERENCE
- intent.CATEGORY.EMBED
- intent.CATEGORY.HOME
- intent.CATEGORY.INFO
- intent.CATEGORY.LAUNCHER
- intent.CATEGORY.MONKEY
- intent.CATEGORY.OPENABLE
- intent.CATEGORY.PREFERENCE
- intent.CATEGORY.SELECTED_ALTERNATIVE
- intent.CATEGORY.TAB
--hprof monkey執(zhí)行過程記錄hprof文件暑始,便于使用traceview工具來進一步分析
--ignore-crashes 忽略crash,monkey在執(zhí)行中婴削,如果發(fā)生crash廊镜,默認為停止在crash事件發(fā)生的地方并退出執(zhí)行。使用這個參數(shù)可以忽略這個crash并繼續(xù)按設定執(zhí)行完所有的event唉俗。
-f 未在官方文檔上列出的參數(shù)嗤朴,但很有用。支持Monkey腳本虫溜,后面會專門用一篇說明
--port 未在官方文檔上列出雹姊,也很有用。是monkey的網(wǎng)絡功能衡楞,也就是可以使用Monkey的server功能吱雏,后面也會專門用一篇說明。
Monkey執(zhí)行日志解析
下面我們以monkey執(zhí)行計算器應用的日志說明下Monkey執(zhí)行日志的含義
adb shell monkey -p com.android.calculator2 -v -v 10
-p參數(shù)指定包名瘾境,-v -v輸出兩級日志歧杏,10表示觸發(fā)10個事件
:Monkey: seed=1486970253229 count=10
## 執(zhí)行Monkey工具,本次執(zhí)行的種子值是1486970253229迷守,對應的事件數(shù)量10次
:AllowPackage: com.android.calculator2
## 指允許包名為com.android.calculator2的應用觸發(fā)事件
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
## 包含默認支持的Category:LAUNCHER犬绒、MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
// + Using main activity com.android.calculator2.Calculator (from package com.android.calculator2)
## 使用默認的LAUCHER Activity:com.android.calculator2.Calculator
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1486970253229
## 種子值
// Event percentages:
## 不同事件占比
// 0: 15.0%
## pct-touch,觸屏點擊事件
// 1: 10.0%
## pct-motion移動事件
// 2: 2.0%
// 3: 15.0%
## pct-trackball軌跡球事件
// 4: -0.0%
## pct majornav主導航事件
// 5: -0.0%
## pct-nav導航事件
// 6: 25.0%
// 7: 15.0%
## pct-syskeys 系統(tǒng)按鍵事件
// 8: 2.0%
## pct-appswitch應用切換事件
// 9: 2.0%
// 10: 1.0%
## pct-anyevent其他事件
// 11: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.calculator2/.Calculator;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com.android.calculator2
Sleeping for 0 milliseconds
##事件間隔0毫秒
:Sending Key (ACTION_DOWN): 20 // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20 // KEYCODE_DPAD_DOWN
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:(409.0,317.0)
:Sending Touch (ACTION_UP): 0:(417.92798,318.7205)
Sleeping for 0 milliseconds
:Sending Key (ACTION_DOWN): 98 // KEYCODE_BUTTON_C
:Sending Key (ACTION_UP): 98 // KEYCODE_BUTTON_C
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,-5.0)
## 觸發(fā)事件過程....
Events injected: 10
## 觸發(fā)事件數(shù)量10
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=53ms (0ms mobile, 0ms wifi, 53ms not connected)
## 執(zhí)行時長兑凿,以及其中網(wǎng)絡(移動網(wǎng)絡凯力、wifi網(wǎng)絡茵瘾、未使用網(wǎng)絡)的耗時占比
// Monkey finished
## 完成測試