Monkey 命令收集相關 --追加Monkey自動化測試開源工具


 

.1、環境配置

 

MONKEY測試使用的是ADB命令,因此只需要配置ADB環境即可。

 

2、測試准備與執行

 

在Monkey測試前,必須進行以下准備

 

Ø  手機屏幕超時設置為30分鍾或者永不超時,防止手機進入鎖屏狀態。

 

Ø  插入SIM卡和存儲卡后將手機開機,開啟開發者模式,開啟ADB模式,連接到PC(存儲卡剩余空間盡量留大,建議1G以上)

 

Ø  在PC上執行 運行—>CMD,在彈出的命令窗口中,輸入adb devices,檢查設備是否連接

  這一步很多人會遇到連接不上設備,解決方法如下:

    一、檢查開發者選項USB調試是否開啟

    二、重新插拔USB看是否有授權提示

    三、重啟adb

    1.   adb kill-server
    2.     adb start-server


    四、添加設備ID至電腦文件中adb_usb.ini

    1. adb_usb.ini文件位置:Win(C:\Users\Administrator\.android\)、Mac(/Users/user/.android/)、linux(/root/.android/)
    2. Win獲取(USB連接設備以后查看控制面板->系統->設備管理器->Android Phone->設備名稱->詳細信息->硬件ID->VID)

 

Ø  在彈出的命令窗口中,輸入adb shell,進入Linux Shell

 

Ø  輸入常用的 Monkey命令。如下:

    問題: 如何獲取APP的package?

      1.CMD命令模式下,切到目錄(build-tools下),

       以本人的為例    D:\AndroidTest\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\28.0.0  

      2.執行: aapt dump badging E:\apk\app-release.apk

      3.從獲取的信息中copy  (一個是啟動的activity,安卓編程初始化用到,一個是packageName ,monkey用到):

        launchable-activity: name='com.XXXXX.hamapp.MainActivity'
        package: name='com.XXXXXX.hamapp.test' versionCode='100' versionName='1.0.0' platformBuildVersionName='8.1.0'

 

monkey -p com.XXXXXX.hamapp.test --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 20 -s 1 -v -v --throttle 200 100000 2>/sdcard/error.txt 1>/sdcard/info.txt

參數

描述

-p com.lenovo.ideafriend

只僅針對特定包名進行測試

--ignore-crashes

忽略應用程序崩潰(Force & Close錯誤),繼續發送執行事件,直到事件數執行完成

--ignore-timeouts

忽略應用程序發生ANR(Application No Responding)錯誤時,直到事件數執行完成

--ignore-native-crashes

忽略本地應用程序發生奔潰,直到事件數執行完成

--pct-touch 20

調整觸摸事件為30%。即整個事件過程中觸摸事件占20%

-s 1

偽隨機數生成器seed值。Seed值為1。相同的seed值再次執行monkey,將產生相同的事件序列。

-v -v

日志級別為Leve1 1。將提供較為詳細的日志,包括每個發送到Activity的事件信息

--throttle 200

事件之間延時200毫秒。可以控制monkey的執行速度,如果不指定該選項,monkey事件間將不會延時。

10000

執行事件數為1萬次

2>/sdcard/error.txt

Leve1 2日志保存到sdcard上的error.txt中

1>/sdcard/info.txt

Leve1 1日志保存到sdcard上的info.txt中

 

3、結果檢查與分析

 

測試結束后,需要將手機連接PC,拷貝以下文件:

 

Ø  info.txt:此文件在手機上的SDCARD中,主要記錄了MONKEY測試時發送的各種事件,如觸摸事件的位置等等。

 

Ø  error.txt:此文件在手機上的SDCARD中,主要記錄了MONKEY測試時產生的一些ANR、強制關閉等異常。

 

Ø  LOG文件:此文件在手機上的LOG文件夾中中,主要主要記錄程序對MONKEY測試時的響應情況。

 

Ø  將手機里面的monkey log文件拉取到電腦

adb pull /sdcard/error.txt E:\monkeyLog\error1.txt
adb pull /sdcard/info.txt E:\monkeyLog\info1.txt

 

我們需要對這2個文件進行分析整理,以便提交開發人員處理。

 

如何分析?

1. 在error.txt 文件里面搜索關鍵字----ANR, crash, Exception 然后將相關的上下文內容copy到BUG描述,如下:

// CRASH: com.luojilab.player (pid 13876)
// Short Msg: java.lang.IllegalStateException
// Long Msg: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// Build Label: HUAWEI/FLA-AL10/HWFLA-H:8.0.0/HUAWEIFLA-AL10/131(C00):user/release-keys
// Build Changelist: 131(C00)
// Build Time: 1522683921000
// java.lang.RuntimeException: Unable to create application com.luojilab.base.application.LuojiLabApplication: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6532)
// at android.app.ActivityThread.-wrap2(Unknown Source:0)
// at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1963)
// at android.os.Handler.dispatchMessage(Handler.java:108)
// at android.os.Looper.loop(Looper.java:166)
// at android.app.ActivityThread.main(ActivityThread.java:7425)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
// Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
// at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1701)
// at android.app.ContextImpl.startService(ContextImpl.java:1657)
// at android.content.ContextWrapper.startService(ContextWrapper.java:644)
// at com.luojilab.base.application.LauncherService.start(SourceFile:48)
// at com.luojilab.business.welcome.a.a(SourceFile:129)
// at com.luojilab.base.application.LuojiLabApplication.onCreate(SourceFile:112)
// at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1122)
// at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6517)
// ... 8 more

 2. 在info.text 里面搜exception ,然后搜索上下文的switch(兩個switch之間是一個操作組,如果出現了exception證明出現了崩潰),如下:

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.XXXXXe.hamapp.test/com.evergrande.hamapp.MainActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.evergrande.hamapp.test/com.evergrande.hamapp.MainActivity } in package com.XXXXX.hamapp.test
:Sending Flip keyboardOpen=false
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
Sleeping for 200 milliseconds

 

4、殺monkey進程與其他

如果想中斷運行中的monkey   CTRL+C

adb shell ps | grep monkey  返回進程號

adb shell kill [剛才查到的進程號]

 

app包名查看:

a.手機安裝包名查看器'

b.aapt命令  aapt dump badging *.apk

c、源碼下的AndroidManifest.xml文件查看

d.adb logcat抓取當前Android機運行的app的包名(  I/ActivityManager(數字): Displayed 包名/類
名: +ms )

  命令行輸入 adb logcat >e:\bag.txt

  手機操控app,ctrl+c停止

  去e:\bag.txt這個文件下搜索關鍵字如Displayed ,一般都能找到

 

參考資料:

【1】Monkey官網

http://developer.android.com/tools/help/monkey.html

 

【2】百度文庫 Monkey測試介紹

http://wenku.baidu.com/view/476c79b8fd0a79563c1e72b6.html

【3】 monkey 自動化開源工具:

    1. swiftmonkey
      https://github.com/zalando/SwiftMonkey
      因其直接使用了 蘋果的私有api 如XCEventGenerator.tapAtTouchLocations 故執行速度極快。同時也用類似android monkey的事件生成機制,自身源源不斷的產生如 tap,swipe,pinchIn等事件使其對被測app產生了極大的壓力
      缺點:需要插樁

    2. XCTestWD 
      https://github.com/macacajs/XCTestWD
      類似facebook wda的方式,在xcode中執行xcuitest時啟動一個監聽server,可通過外部發送命令來創建待測app對應session並啟動app,同時也實現了dump tree 和依據xpath,id等來定位某個控件並操作這些控件

    3. Fastmonkey
      Xcode9.0(https://github.com/zhangzhao4444/Fastmonkey
      Xcode8.3(https://github.com/zhangzhao4444/Fastmonkey/tree/xcode8.3
      結合兩者優點並改造兩者,在XCTestWD基礎上實現一個server路由,外部命令時可引導啟動app 並執行monkey

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM