首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android MonkeyRunner 測試獲取反饋信息:Logcat 可捕獲崩潰、Activity 啟動、控件操作日誌

     編輯:程式設計綜合問答

核心結論

MonkeyRunner 執行的所有操作在 Logcat 中均有對應日誌輸出,包括但不限於:

  • Activity 啟動/切換:ActivityTaskManager: START u0 {cmp=...}
  • 控件點擊/輸入:InputDispatcher: Focus entered...、View: onTouchEvent
  • 應用崩潰:AndroidRuntime: FATAL EXCEPTION: main、完整堆疊
  • ANR: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

MonkeyRunner 腳本中主動獲取狀態


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

進階:UIAutomator2 / Appium 替代 MonkeyRunner

MonkeyRunner 已停止維護(Android 8.0+ 兼容性差)。現代測試推薦:

  • UIAutomator2:Google 官方,支援 Python 腳本、XPath 定位、截圖對比、Assert 斷言。
  • Appium:跨平台(iOS/Android)、WebDriver 協議、多語言綁定、生態豐富。
  • Espresso:白盒測試、同步機制強、適合 CI/CD 集成。

總結

MonkeyRunner 測試反饋**完全依賴 Logcat**,無內建報告機制。實時過濾包名 + 關鍵字(Exception/ANR/Activity)可捕獲崩潰、操作軌跡。新項目請直接使用 UIAutomator2/Appium,獲得結構化測試報告、斷言、截圖、重試等企業級能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved