MonkeyRunner 執行的所有操作在 Logcat 中均有對應日誌輸出,包括但不限於:
ActivityTaskManager: START u0 {cmp=...}InputDispatcher: Focus entered...、View: onTouchEventAndroidRuntime: FATAL EXCEPTION: main、完整堆疊ActivityManager: ANR in com.package
# 終端實時過濾目標包名
adb logcat | grep -E "com.your.package|AndroidRuntime|ActivityManager|InputDispatcher"
# 或保存到文件分析
adb logcat -v time > monkeyrunner_log.txt
# 測試結束後 grep 分析
grep -i "exception\|error\|anr\|crash" monkeyrunner_log.txt
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection()
package = 'com.your.package'
# 1. 判斷進程是否存活
def is_process_alive():
ps = device.shell('ps | grep ' + package)
return len(ps.strip()) > 0
# 2. 獲取當前頂層 Activity
def get_top_activity():
dumpsys = device.shell('dumpsys activity activities | grep mResumedActivity')
return dumpsys
# 3. 捕獲崩潰後自動停止
while True:
MonkeyRunner.sleep(2)
if not is_process_alive():
print("Process died!")
break
# 可選:檢查 logcat 關鍵字
log = device.shell('logcat -d -t 100 | grep -i "fatal exception"')
if log:
print("Crash detected:", log)
break
MonkeyRunner 已停止維護(Android 8.0+ 兼容性差)。現代測試推薦:
MonkeyRunner 測試反饋**完全依賴 Logcat**,無內建報告機制。實時過濾包名 + 關鍵字(Exception/ANR/Activity)可捕獲崩潰、操作軌跡。新項目請直接使用 UIAutomator2/Appium,獲得結構化測試報告、斷言、截圖、重試等企業級能力。