天天看點

手機自動化測試:Monkey測試(待補充)5、Monkey基本用法6、發生事件類型7、調試選項(可以一次指定多個)10.monkey腳本

參考文章https://blog.csdn.net/just__like/article/details/83757492

https://www.jianshu.com/p/97268b83dc1d

1、什麼是monkey

Monkey是Android中的一個指令行工具,可以運作在模拟器裡或實際裝置中。它向系統發送僞随機的使用者事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實作對正在開發的應用程式進行壓力測試。Monkey測試是一種為了測試軟體的穩定性、健壯性的快速有效的方法。(其實可以想象成一隻猴子啥都不知道,瘋狂亂敲…)

2、monkey的特點

1、Monkey 程式是由 Android 系統自帶,使用 Java 語言寫成。在Android檔案系統中的存放路徑是:

/system/framework/monkey.jar;
           

2、Monkey.jar程式是由一個名為“monkey”的Shell腳本來啟動執行,shell腳本在Android檔案系統中 的存放路徑是:

/system/bin/monkey
           

3、monkey的優點

1、如果限制了Monkey在運作于特定的包,當檢測試圖轉移到其他包進行操作,将對其進行組織

這樣可以限定在執行app進行測試

2、如果程式發生崩潰或者接收到任何失控異常資訊,Monkey會記錄對應

錯誤日志

,并根據指令參數判斷是否繼續測試

3、如果應用程式發生程式無響應的錯誤,Monkey會記錄對應

錯誤日志

,并根據指令參數判斷是否繼續測試

4、按照標明的不同級别的回報資訊,Monkey還可以看到其執行過程包報告和生成事件

5、Monkey的建構

手機自動化測試:Monkey測試(待補充)5、Monkey基本用法6、發生事件類型7、調試選項(可以一次指定多個)10.monkey腳本

3、運作Monkey

1、首先你要先搭建環境

先下載下傳jdk 具體安裝流程請參考:https://blog.csdn.net/write6/article/details/79136388

再下載下傳sdk 具體安裝流程請參考:https://blog.csdn.net/u011541946/article/details/77142045

2、啟動手機

3、用PC機adb指令與手機聯通

4、進入手機的shell指令(adb -s 等等 shell)

5、編寫Monkey指令

4、Monkey介入測試時間

等産品基本穩定,沒有特别多的bug,一般用Monkey去測試應用的

穩定性和健壯性

(是否閃退,崩潰)整機測試

5、Monkey基本用法

1、基本文法

1、-p

表示指定測試的程式(空格後面跟安裝包名字,拿剛才的第三方安裝包一個個試)一個或這多個

包名獲得方法

1、百度 aapt dump badging ****.apk

2、找開發要

3、aapt dump badging ***apk(apk位置) >> ***txt

然後找到launchable-activity:name = (包名)

4、aapt dump badging ***apk(apk位置)| find ‘launchable-activity’

2、-v 記錄日志級别

指令行不同個數的-v會有不同的效果

-v:Level 0(預設值)除 啟動提示、測試完成和最終結果之外,提供較少資訊。

-v -v :Level 1提供較為詳細的測試資訊,如逐個發送到Activity的 事件。

-v -v -v :Level 2提供更加詳細的設定資訊,如測試中被選中的或未被選中的Activity。

例題

/數字100:表示測試事件數為100

指定一個包 adb shell monkey -p com.tencent.news -v -v -v 100 (此時指定軟體會被打開并開始亂點亂按)

指定多個包 adb shell monkey -p com.tencent.news -p com.pdfreader -p com.widgets -v 1000

不指定包 adb shell monkey -v 1000

3、-s 僞随機數生成器的seed值(像旗幟)

1、用于産生seed值,有助于重制bug

2、seed值,相當于一個flag(旗幟),如果seed值相同,随機事件的事件流會一樣

3、seed值不指定 系統會自動生成

4、例子

adb shell monkey -p com.test -v-v -s 10 1000

如果這次出了bug,看日志也不是很好找到,可以adb shell monkey -p com.test -v-v -s 10 1000 把指令再次輸入,這樣這次和上次 運作過程一樣友善找到bug

4、–throttle : 事件之間加入延時操作

在某些不需要頻率過快,或需要定頻率進行互動時,可以采用–throttle來做事件之間的延時操作。(機關值毫秒)

6、發生事件類型

1、盡管monkey産生是僞随機事件流,但是我們希望我們的操作有一定的規律性,即按鍵、觸屏等各類事件操作有所偏重

比如

(1).對文本框操作,需要更多的按鍵操作。

(2).玩遊戲,需要更多的點選和滑動操作。

Event percentages(事件百分比)

0:觸摸事件百分比,參數–pct-touch

1:滑動事件百分比,參數–pct-motion

2:縮放事件百分比,參數–pct-pinchzoom

3:軌迹球事件百分比,參數–pct-trackball

4:螢幕旋轉事件百分比,參數–pct-rotation

5:暫時不知道這個是什麼

6:基本導航事件百分比,參數–pct-nav

7:主要導航事件百分比,參數–pct-majornav

8:系統事件百分比,參數–pct-syskeys

9:Activity啟動事件百分比,參數–pct-appswitch

10:鍵盤翻轉事件百分比,參數–pct-flip

11:其他事件百分比,參數–pct-anyevent

常用事件(

加起來不超100 ,可以一次指定多個

1、.–pct-touch (空格後加數字)設定觸屏事件生成的百分比。觸屏事件是一個有手指按下,擡起事件的手勢。

eg: adb shell monkey -p com.tencent.news --pct-touch 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定觸屏的事件占比為50%。

2.–pct-rotation 設定螢幕翻轉的百分比 橫屏豎屏。

eg: adb shell monkey --throttle 3000 --pct-rotation 50 -p com.tencent.news 100

或 adb shell monkey -p com.tencent.news --pct-rotation 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定螢幕翻轉的百分比 橫屏豎屏占比為50%。

3.–pct-syskeys 設定系統事件,是一些系統提供案件 Home,Back,start,end call,音量鍵等。

eg: adb shell monkey --throttle 3000 --pct-syskeys 50 -p com.tencent.news 100

或 adb shell monkey -p com.tencent.news --pct-syskeys 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定系統事件占比為50%。

34–pct-majornav 設定導航欄事件,是一些提供案件 Home,back,菜單鍵等。

eg: adb shell monkey --throttle 3000 --pct-majornav 50 -p com.tencent.news 100

或 adb shell monkey -p com.tencent.news --pct-majornav 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定系統事件占比為50%。

5.–pct-motion 設定滑動事件生成的百分比。滑動事件是一個先在某一個位置手指按下,滑動一段距離後再擡起手指的手勢。

eg: adb shell monkey --throttle 3000 --pct-motion 50 -p com.tencent.news 100

或 adb shell monkey -p com.tencent.news --pct-motion 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定滑動的事件占比為50%。

6.--pct-trackball 設定軌迹球事件生成的百分比。軌迹球事件是包含一系列随機移動和單擊事件的事件

eg:adb shell monkey --throttle 3000 --pct-trackball 50 -p com.tencent.news 100

或 adb shell monkey -p com.tencent.news --pct-trackball 50 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定軌迹球的事件占比為50%。

7.–pct-nav 設定基本導航事件生成的百分比。基本導航事件是模拟方向性在裝置上輸入向上、向下、向左、向右的事件。(智能機沒有)

eg:adb shell monkey --throttle 3000 --pct-nav 40 -p com.tencent.news 100

或adb shell monkey -p com.tencent.news --pct-nav 40 --throttle 3000 100

向騰訊新聞發送1000次随機事件,每次事件間隔為3秒。其中設定基本導航事件的占比為40%。

7、調試選項(可以一次指定多個)

1.–ignore-crashes

或略(Porce&&close 強制關閉)

通常情況下,monkey會在測試應用程式崩潰或者發生異常後停止運作,若指定了該參數,則monkey将會在産生異常後,繼續向系統發送事件,直到指定事件全部運作完畢。

2.–ignore-timeouts

忽略ANP(程式無響應 逾時)

通常情況下,當應用程式發生任何逾時錯誤(application not responding)時,monkey将停止運作。若指定了該參數,則monkey将會在産生錯誤資訊後,繼續向系統發送事件,直到指定事件全部運作完畢

3.–ignore-security-exceptions

(應用程式權限錯誤)

通常情況下,指定應用程式發生許可錯誤時(如證書許可,網絡許可等),monkey将停止運作。若指定了該參數,即使應用程式發生許可錯誤,monkey會繼續向系統發送事件,直到指定事件全部運作完畢。

4、–ignore-native-crashes

忽略本地應用程式(Monkey崩潰),直到事件數執行完畢

5、–hprof

指定了該參數,Monkey會在發送事件序列的前、後,生成性能分析報告。通常會在data/misc目錄下生成一個5MB左右大小的檔案

6、–pkg-whitelist-file

–pag-blacklist-file(補充)

8、關閉monkey

第一步 adb shell ps #檢視所有程序

第二步 找出所執行launchable-activityname名的程序id

第三步 adb shell kill pid 殺死程序

9、Monkey錯誤資訊

其實我們比較關注的是app在使用過程中出現的錯誤資訊,像上面我們選擇忽略掉錯誤情況,這樣當monkey執行結束後,相關的資訊會被寫入到monkey檔案中,

但是錯誤資訊比如crash,anr等資訊會列印在dos視窗

,這些錯誤資訊會明确的指出哪裡發生的錯誤;如果需要複現,我們可以把忽略參數去掉,然後通過相同的seed值再次進行monkey測試,直到發生錯誤跳出monkey測試,

這裡我們也可以通過adb bugreport指令将手機運作日志導出來檢視,這裡面的資訊更詳細,包括出錯資訊。

//6.0及以下裝置
adb bugreport > bugreport.txt
//7.0及以上裝置
adb bugreport bugreport.zip
           

10.monkey腳本

1、意義

monkeyscript是monkey的腳本語言,能夠被monkey識别的指令集合,可以實作一些固定的重複性動作。Monkey可以通過指令加載腳本來進行測試,簡單友善。Monkey腳本如何編寫,官網并沒有介紹,我們隻能通過Moneky源碼去學習如何編寫腳本,可參考Monkey-Github的MonkeySourceScript.java類

type= raw events	腳本類型可以自定義  修改沒有意義
count= 1			腳本執行次數  修改沒有意義
speed= 1.0   		腳本執行測試  修改沒有意義
start data >>   	下面是腳本語言
 腳本
LaunchActivity(pkg_name, cl_name)  
           

2、腳本指令

1、LaunchActivity(pkg_name, cl_name): 啟動應用,第一個參數是包名,第二個是啟動的activity名

2、DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags) :向指定位置發送單個手勢,相當于我們把手指按在某個點上;這個方法參數有12個,但是我們主要關注owntime,eventTime,action,x,y這麼幾個參數,x,y表示按下的坐标,可以通過上一篇文章UI Automator擷取,這在你想測試點選某個具體view是很有用的

3、DispatchPress(keycode): 向系統發送一個固定的按鍵事件;例如home鍵,back鍵;參數是按鍵值 ,按鍵值可檢視keycode

UserWait:讓腳本的執行暫停一段時間,做一個等待操作

RotateScreen(rotationDegree, persist): 翻轉螢幕,第一個參數是旋轉角度,第二個是旋轉後是否停在目前位置

4、Tap(x, y) :單擊事件,點選螢幕,參數是點選坐标

Drag(xStart, yStart, xEnd, yEnd) :在螢幕上滑動,坐标是從哪一點滑到哪一點

5、LongPress(): 長按2s

6、ProfileWait(): 等待5s

7、PressAndHold(x, y, pressDuration) :模拟長按

8、PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟縮放

9、DispatchString(input): 輸入字元串

10、RunCmd(cmd) :執行shell指令,比如截圖 screencap -p /data/local/tmp/tmp.png

11、DispatchFlip(true/false) :打開或者關閉軟鍵盤

12、UserWait(sleepTime) :睡眠指定時間

13、DeviceWakeUp() :喚醒螢幕

腳本案例

type= raw events
count= 1
speed= 1.0   
start data >>   
 
LaunchActivity(com.android.mangodialog,com.android.mangodialog.MainActivity);
UserWait(1000);
# 按下
DispatchPointer(0,0,0,400,500,0,0,0,0,0,0,0) 
# 擡起
DispatchPointer(0,0,1,400,500,0,0,0,0,0,0,0) 
UserWait(1000);
 
Tab(500,300);
UserWait(1000);
 
DispatchPress(KEYCODE_ENTER)
UserWait(1000);
 
DispatchPress(KEYCODE_BACK);
UserWait(1000);
 
RunCmd(screencap -p /sdcard/tmp.png);
UserWait(1000);
 
Drag(0, 0, 500, 500);
UserWait(1000);
 
RotateScreen(90,1)
UserWait(1000);
 
DispatchString(www.baidu.com);
UserWait(1000);
 
DispatchPress(KEYCODE_BACK);
UserWait(1000);
           
  • 腳本需要對照着MonkeySourceScript.java檔案編寫,這樣才能知道方法需要多少個參數,參數有什麼含義;同時要注意方法名是區分大小寫的,其實最重要的是腳本的編寫需要根據你的測試用例來寫,一步步怎麼操作就寫上對應的方法
  • 因為Monkey是運作在裝置上的,是以需要将腳本先傳到裝置上,通過adb push d:\monkey.txt sdcard/monkey.txt 将檔案推送到手機sd卡上
  • 最後通過adb shell monkey -f sdcard/monkey.txt -v -v 1 執行腳本檔案
  • 用法參考這篇文章
  • https://blog.csdn.net/qq_30993595/article/details/80748559